Source code for pyslurmutils.tests.test_script
import pytest
from ..client import SlurmScriptRestClient
[docs]
@pytest.fixture
def slurm_script_client(slurm_client_kwargs) -> SlurmScriptRestClient:
slurm_client_kwargs = {
k: v for k, v in slurm_client_kwargs.items() if k != "pre_script"
}
return SlurmScriptRestClient(**slurm_client_kwargs)
[docs]
def test_script(slurm_script_client, slurm_parameters):
nbefore = len(list(slurm_script_client.get_all_job_properties(update_time=None)))
job_id = slurm_script_client.submit_script(_SUCCESS_SCRIPT)
try:
try:
assert slurm_script_client.wait_finished(job_id, timeout=60) == "COMPLETED"
finally:
slurm_script_client.print_stdout_stderr(job_id)
assert slurm_script_client.get_status(job_id) == "COMPLETED"
nafter = len(list(slurm_script_client.get_all_job_properties(update_time=None)))
if slurm_parameters["mock"]:
# This might fail on a production SLURM queue
assert (nafter - nbefore) == 1
finally:
slurm_script_client.clean_job_artifacts(job_id)
[docs]
def test_failing_script(slurm_script_client):
job_id = slurm_script_client.submit_script(_FAIL_SCRIPT)
try:
assert slurm_script_client.wait_finished(job_id, timeout=60) == "FAILED"
slurm_script_client.print_stdout_stderr(job_id)
finally:
slurm_script_client.clean_job_artifacts(job_id)
[docs]
def test_cancel_script(slurm_script_client):
job_id = slurm_script_client.submit_script(_SUCCESS_SCRIPT)
try:
slurm_script_client.cancel_job(job_id)
assert slurm_script_client.wait_finished(job_id, timeout=60) == "CANCELLED"
slurm_script_client.print_stdout_stderr(job_id)
finally:
slurm_script_client.clean_job_artifacts(job_id)
[docs]
def test_script_parameters(slurm_script_client):
parameters = {"time_limit": "00:05:00", "environment": {"NAME1": "VAR1"}}
metadata = {"NAME2": "VAR2"}
job_id = slurm_script_client.submit_script(
_SUCCESS_SCRIPT, parameters=parameters, metadata=metadata
)
try:
try:
assert slurm_script_client.wait_finished(job_id, timeout=60) == "COMPLETED"
finally:
slurm_script_client.print_stdout_stderr(job_id)
assert slurm_script_client.get_status(job_id) == "COMPLETED"
properties = slurm_script_client.get_job_properties(job_id)
finally:
slurm_script_client.clean_job_artifacts(job_id)
assert properties.comment == '{"NAME2": "VAR2"}'
assert properties.time_limit.model_dump() == {
"infinite": False,
"number": 5,
"set": True,
}
_SUCCESS_SCRIPT = """
echo 'Job started'
echo 'Job finished'
"""
_FAIL_SCRIPT = """
echo 'Job started'
exit 3
"""