blob: 50db01df0c839a220c73c289b29766f93bd0b74b [file]
############################################################################
# Copyright (C) SchedMD LLC.
############################################################################
import pytest
import atf
# 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")
# Wait until file is complete
for t in atf.timer():
output = atf.run_command_output(f"cat {file_out}")
if len(output.splitlines()) >= 6:
break
else:
assert (
False
), f"Output should contain 6 lines, but got {len(output.splitlines())}"
lines = output.splitlines()
error_msg = "Incorrect output from:"
assert num_nodes == int(lines[0]), f"{error_msg} printenv SLURM_NNODES"
assert num_nodes == int(
lines[1]
), f"{error_msg} srun -E -n{srun_tasks} -N{srun_nodes} printenv SLURM_NNODES"
assert num_tasks == int(lines[2]), f"{error_msg} printenv SLURM_NTASKS"
assert num_tasks == int(
lines[3]
), f"{error_msg} srun --preserve-env -n{srun_tasks} -N{srun_nodes} printenv SLURM_NTASKS"
assert srun_nodes == int(
lines[4]
), f"{error_msg} srun -n{srun_tasks} -N{srun_nodes} printenv SLURM_NNODES"
assert srun_tasks == int(
lines[5]
), f"{error_msg} srun -n{srun_tasks} -N{srun_nodes} printenv SLURM_NTASKS"