Skip to content

Commit 2f6232e

Browse files
committed
adding tests for job and pjm platform files
1 parent a40aad4 commit 2f6232e

File tree

4 files changed

+59
-28
lines changed

4 files changed

+59
-28
lines changed

autosubmit/platforms/paramiko_platform.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -257,8 +257,6 @@ def agent_auth(self, port: int) -> bool:
257257
# noinspection PyUnusedLocal
258258
def interactive_auth_handler(self, title, instructions, prompt_list):
259259
answers = []
260-
# Walk the list of prompts that the server sent that we need to answer
261-
twofactor_nonpush = None
262260
for prompt_, _ in prompt_list:
263261
prompt = str(prompt_).strip().lower()
264262
# str() used to make sure that we're dealing with a string rather than a unicode string
@@ -272,8 +270,7 @@ def interactive_auth_handler(self, title, instructions, prompt_list):
272270
# Sometimes the server may ask for the 2FA code more than once. This is to avoid asking the
273271
# user again. If it is wrong, just run again autosubmit run because the issue could be in
274272
# the password step.
275-
if twofactor_nonpush is None:
276-
twofactor_nonpush = input("Please type the 2FA/OTP/token code: ")
273+
twofactor_nonpush = input("Please type the 2FA/OTP/token code: ")
277274
answers.append(twofactor_nonpush)
278275
return tuple(answers)
279276

autosubmit/platforms/pjmplatform.py

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -263,30 +263,6 @@ def update_cmds(self):
263263
self.get_cmd = "scp"
264264
self.mkdir_cmd = "mkdir -p " + self.remote_log_dir
265265

266-
# TODO: Not used, but it's in Slurm. To confirm later if it must stay...
267-
def hold_job(self, job):
268-
try:
269-
cmd = f"pjrls {job.id} ; sleep 2 ; pjhold -R ASHOLD {job.id}"
270-
self.send_command(cmd)
271-
job_status = self.check_job(job, submit_hold_check=True)
272-
if job_status == Status.RUNNING:
273-
self.send_command(f"{self.cancel_cmd} {job.id}")
274-
return False
275-
elif job_status == Status.FAILED:
276-
return False
277-
cmd = self.get_queue_status_cmd(job.id)
278-
self.send_command(cmd)
279-
except BaseException as e:
280-
try:
281-
self.send_command(f"{self.cancel_cmd} {job.id}")
282-
raise AutosubmitError(
283-
f"Can't hold jobid:{job.id}, canceling job", 6000, str(e))
284-
except BaseException as e:
285-
raise AutosubmitError(
286-
f"Can't cancel the jobid: {job.id}", 6000, str(e))
287-
except AutosubmitError as e:
288-
raise
289-
290266
def get_checkhost_cmd(self):
291267
return self._checkhost_cmd
292268

test/unit/test_job.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
from autosubmit.platforms.platform import Platform
5252
from autosubmit.platforms.psplatform import PsPlatform
5353
from autosubmit.platforms.slurmplatform import SlurmPlatform
54+
from test.conftest import AutosubmitConfigFactory
5455

5556
"""Tests for the Autosubmit ``Job`` class."""
5657

@@ -2414,3 +2415,36 @@ def test_submit_ready_jobs(autosubmit_exp, mocker):
24142415
assert error_message == ''
24152416
assert len(valid_packages_to_submit) == 1
24162417
assert any_job_submitted
2418+
2419+
2420+
@pytest.mark.parametrize("create_jobs", [[1, 2]], indirect=True)
2421+
@pytest.mark.parametrize(
2422+
'status,failed_file',
2423+
[
2424+
(Status.RUNNING, False),
2425+
(Status.QUEUING, False),
2426+
(Status.HELD, False),
2427+
(Status.FAILED, False),
2428+
(Status.FAILED, True),
2429+
(Status.UNKNOWN, False),
2430+
(Status.SUBMITTED, False)
2431+
]
2432+
)
2433+
def test_update_status(create_jobs: list[Job], status: Status, failed_file,
2434+
autosubmit_config: 'AutosubmitConfigFactory', local: 'LocalPlatform'):
2435+
as_conf = autosubmit_config('t000', experiment_data={
2436+
'PLATFORMS': {
2437+
local.name: {
2438+
'DISABLE_RECOVERY_THREADS': False
2439+
}
2440+
}
2441+
})
2442+
job = create_jobs[0]
2443+
job.id = 0
2444+
job.platform = local
2445+
job.platform_name = local.name
2446+
job.new_status = status
2447+
2448+
assert job.status != status
2449+
job.update_status(as_conf=as_conf, failed_file=failed_file)
2450+
assert job.status == status

test/unit/test_pjm.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import pytest
2222

23+
from autosubmit.config.configcommon import AutosubmitConfig
2324
from autosubmit.config.yamlparser import YAMLParserFactory
2425
from autosubmit.job.job import Job
2526
from autosubmit.job.job_common import Status
@@ -187,3 +188,26 @@ def test_process_batch_ready_jobs_valid_packages_to_submit(mocker, pjm_platform,
187188
else:
188189
assert job.wrapper_name is None
189190
assert failed_packages == []
191+
192+
193+
@pytest.mark.parametrize("create_jobs", [[3, 5]], indirect=True)
194+
@pytest.mark.parametrize('parse_queue_reason, result', [
195+
('ASHOLD', 3),
196+
('WAITING ASHOLD', 6),
197+
('(Invalid)', -1)
198+
], ids=['ASHOLD', 'WAITING ASHOLD', 'AssociationJobLimit'])
199+
def test_get_queue_status(mocker, create_jobs: list[Job], pjm_platform: 'PJMPlatform', as_conf: 'AutosubmitConfig',
200+
parse_queue_reason, result):
201+
in_queue_jobs = create_jobs
202+
jobs_id = []
203+
mocker.patch('autosubmit.platforms.platform.Platform.add_job_to_log_recover', return_value = True)
204+
for job in in_queue_jobs:
205+
job.platform = pjm_platform
206+
jobs_id.append(job.id)
207+
if 'WAITING' in parse_queue_reason:
208+
job.hold = True
209+
mocker.patch('autosubmit.platforms.pjmplatform.PJMPlatform.send_command', return_value = True)
210+
mocker.patch('autosubmit.platforms.pjmplatform.PJMPlatform.parse_queue_reason', return_value = parse_queue_reason)
211+
pjm_platform.get_queue_status(in_queue_jobs, jobs_id, as_conf)
212+
assert result == in_queue_jobs[0].new_status
213+

0 commit comments

Comments
 (0)