| ############################################################################ |
| # Copyright (C) SchedMD LLC. |
| ############################################################################ |
| import atf |
| import pytest |
| |
| |
| @pytest.fixture(scope="module", autouse=True) |
| def setup(): |
| atf.require_accounting(modify=True) |
| atf.require_slurm_running() |
| |
| |
| @pytest.fixture(scope="function", autouse=False) |
| def delete_old_resv(): |
| """Delete the reservation if it's still there""" |
| atf.run_command( |
| "scontrol delete reservation resv1", |
| user=atf.properties["slurm-user"], |
| fatal=False, |
| ) |
| |
| |
| @pytest.fixture(scope="function", autouse=False) |
| def create_resv(delete_old_resv): |
| """Create a reservation to use for testing""" |
| atf.run_command( |
| f"scontrol create reservation reservationname=resv1 " |
| f"user={atf.properties['test-user']} start=now end=now+1 " |
| f"nodes=node0", |
| user=atf.properties["slurm-user"], |
| fatal=True, |
| ) |
| |
| |
| def test_clear_job_expired_deadline(create_resv): |
| """Put several jobs in the queue that will go past the resv deadline""" |
| job_id = atf.submit_job_sbatch( |
| sbatch_args=r" -w node0 --deadline=now+4 " |
| "--begin=now --reservation=resv1 " |
| '--wrap="sleep 300"' |
| ) |
| |
| assert job_id != 0, "Couldn't start job batch" |
| |
| """Wait for the JobState to change to RESV_DEL_HOLD""" |
| atf.repeat_until( |
| lambda: atf.run_command_output(f"scontrol show job {job_id} | grep JobState"), |
| lambda resp: "RESV_DEL_HOLD" in resp, |
| timeout=60, |
| poll_interval=1, |
| ) |
| |
| """Wait for the JobState to change to DEADLINE""" |
| atf.repeat_until( |
| lambda: atf.run_command_output(f"scontrol show job {job_id} | grep JobState"), |
| lambda resp: "DEADLINE" in resp, |
| timeout=60, |
| poll_interval=1, |
| ) |
| |
| """Assert that the JobState is DEADLINE""" |
| output = atf.run_command_output(f"scontrol show job {job_id} | grep JobState") |
| assert ( |
| "DEADLINE" in output |
| ), "The JobState did not change to DEADLINE when the reservation expired." |
| |
| """Verify that the queue is empty""" |
| output = atf.run_command_output("squeue") |
| assert ( |
| str(job_id) not in output |
| ), f"Job {job_id} was still in the queue and should have been deleted." |