| ############################################################################ |
| # Copyright (C) SchedMD LLC. |
| ############################################################################ |
| import atf |
| import pytest |
| |
| # import re |
| |
| num_nodes = 3 |
| |
| |
| # Setup |
| @pytest.fixture(scope="module", autouse=True) |
| def setup(): |
| atf.require_nodes(num_nodes * 2) |
| atf.require_slurm_running() |
| |
| |
| def test_preserve_env(): |
| """Test that a job correctly uses the -E or --preserve-env flag.""" |
| |
| file_in = atf.module_tmp_path / "file_in" |
| file_out = atf.module_tmp_path / "file_out" |
| num_tasks = num_nodes * 2 |
| srun_nodes = 1 |
| srun_tasks = 1 |
| atf.make_bash_script( |
| file_in, |
| f"""printenv SLURM_NNODES |
| srun -E -n{srun_tasks} -N{srun_nodes} printenv SLURM_NNODES |
| printenv SLURM_NTASKS |
| srun --preserve-env -n{srun_tasks} -N{srun_nodes} printenv SLURM_NTASKS |
| srun -n{srun_tasks} -N{srun_nodes} printenv SLURM_NNODES |
| srun -n{srun_tasks} -N{srun_nodes} printenv SLURM_NTASKS""", |
| ) |
| |
| atf.run_command("srun printenv SLURM_NNODES") |
| job_id = atf.submit_job_sbatch( |
| f"-O --output={file_out} -N{num_nodes} -n{num_tasks} {file_in}" |
| ) |
| atf.wait_for_job_state(job_id, "DONE") |
| atf.wait_for_file(file_out) |
| f = open(file_out, "r") |
| error_msg = "Incorrect output from:" |
| assert num_nodes == int(f.readline()), f"{error_msg} printenv SLURM_NNODES" |
| assert num_nodes == int( |
| f.readline() |
| ), f"{error_msg} srun -E -n{srun_tasks} -N{srun_nodes} printenv SLURM_NNODES" |
| assert num_tasks == int(f.readline()), f"{error_msg} printenv SLURM_NTASKS" |
| assert num_tasks == int( |
| f.readline() |
| ), f"{error_msg} srun --preserve-env -n{srun_tasks} -N{srun_nodes} printenv SLURM_NTASKS" |
| assert srun_nodes == int( |
| f.readline() |
| ), f"{error_msg} srun -n{srun_tasks} -N{srun_nodes} printenv SLURM_NNODES" |
| assert srun_tasks == int( |
| f.readline() |
| ), f"{error_msg} srun -n{srun_tasks} -N{srun_nodes} printenv SLURM_NTASKS" |