| ############################################################################ |
| # Copyright (C) SchedMD LLC. |
| ############################################################################ |
| import atf |
| import pytest |
| import re |
| |
| |
| # Setup |
| @pytest.fixture(scope="module", autouse=True) |
| def setup(): |
| atf.require_slurm_running() |
| |
| |
| def test_kill_on_bad_exit(): |
| """Test of srun's --kill-on-bad-exit option.""" |
| |
| error_text = r"SHOULD_NOT_BE_HERE" |
| python_script = atf.module_tmp_path / "python_script.py" |
| py_file = open(python_script, "w") |
| num_tasks = 10 |
| |
| # python script that exits on one of the tasks of the job |
| # if any task gets past the sleep then the test fails |
| py_file.write( |
| f"""import sys |
| import time |
| import os |
| proc_id = os.environ['SLURM_PROCID'] |
| if proc_id == '{num_tasks - 2}': |
| sys.exit(2) |
| time.sleep(15) |
| print('{error_text}')""" |
| ) |
| py_file.close() |
| |
| output = atf.run_job_output( |
| f"--kill-on-bad-exit -n{num_tasks} -O python3 {python_script}", xfail=True |
| ) |
| assert ( |
| re.search(error_text, output) is None |
| ), "--kill-on-bad-exit failed to kill all tasks on a bad exit" |