| ############################################################################ | |
| # Copyright (C) SchedMD LLC. | |
| ############################################################################ | |
| import pytest | |
| import atf | |
| node_count = 4 | |
| # Setup | |
| @pytest.fixture(scope="module", autouse=True) | |
| def setup(): | |
| atf.require_nodes(node_count) | |
| atf.require_slurm_running() | |
| def test_exclusive(tmp_path): | |
| file_in = str(tmp_path / "exclusive.in") | |
| atf.make_bash_script( | |
| file_in, | |
| f""" | |
| for i in $(seq {node_count}); do | |
| srun -n1 --exclusive sleep infinity & | |
| done | |
| wait | |
| """, | |
| ) | |
| job_id = atf.submit_job_sbatch(f"-N{node_count} -t2 {file_in}", fatal=True) | |
| nodes = set() | |
| for i in range(node_count): | |
| atf.wait_for_step(job_id, i, fatal=True) | |
| step_str = f"{job_id}.{i}" | |
| nodes.add(atf.get_steps(job_id)[step_str].get("NodeList")) | |
| assert len(nodes) == node_count, "Verify that all steps are in different nodes" |