############################################################################
# Copyright (C) SchedMD LLC.
############################################################################
import re

import pytest

import atf


# 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(60)
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"
