| ############################################################################ |
| # Copyright (C) SchedMD LLC. |
| ############################################################################ |
| import re |
| |
| import pytest |
| |
| import atf |
| |
| node_count = 9 |
| |
| |
| # Setup |
| @pytest.fixture(scope="module", autouse=True) |
| def setup(): |
| atf.require_nodes(node_count) |
| atf.require_slurm_running() |
| |
| |
| def test_test_only(): |
| """Test of slurm_job_will_run API, (srun --test-only option).""" |
| |
| error_output = atf.run_command_error( |
| f"srun --test-only -O -N{node_count} printenv SLURMD_NODENAME" |
| ) |
| assert ( |
| re.search(r"Job \d+ to start at \d+", error_output) is not None |
| ), "Failed out output job number or start time" |
| |
| |
| @pytest.mark.xfail( |
| atf.get_version("bin/srun") < (26, 5), |
| reason="MR !3126: srun --test-only --jobid fixed in 26.05", |
| ) |
| def test_test_only_with_jobid(): |
| """Test --test-only with --jobid for a pending (held) job""" |
| |
| job_id = atf.submit_job_sbatch("-N1 -H --wrap 'sleep infinity'", fatal=True) |
| atf.wait_for_job_state(job_id, "PENDING", fatal=True) |
| |
| results = atf.run_command( |
| f"srun --test-only --jobid={job_id}", |
| fatal=True, |
| ) |
| combined = results["stderr"] + results["stdout"] |
| assert ( |
| re.search(rf"Job {job_id} to start at ", combined) is not None |
| ), f"Expected --test-only to report will-run for pending job id {job_id}" |
| |
| atf.cancel_jobs([job_id]) |