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

import atf


# Setup
@pytest.fixture(scope="module", autouse=True)
def setup():
    atf.require_slurm_running()


def test_exit_code_reporting():
    """Test of srun exit code reporting"""

    exit_code = 66
    task_count = "2"
    exit_string = "srun_exit_code_"
    exit_script = atf.module_tmp_path / "exit_script"
    atf.make_bash_script(
        exit_script,
        f"""sleep 2
    exit {exit_code}""",
    )
    test_script = atf.module_tmp_path / "test_script"
    atf.make_bash_script(
        test_script,
        rf"""srun -n{task_count} -O {exit_script}
    echo srun_exit_code_$?""",
    )

    # Spawn program and check for exit code messages from srun
    result_exit_code = atf.run_command_exit(
        f"srun -n{task_count} -O {exit_script}", xfail=True
    )
    assert (
        exit_code == result_exit_code
    ), f"Srun failed to report exit code: {exit_code}, reported: {result_exit_code}"

    # Spawn program to check the exit code of srun itself
    result_exit_string = atf.run_command_output(f"{test_script}").strip()
    assert (
        f"{exit_string}{exit_code}" == result_exit_string
    ), f"Sruns exit code is bad {exit_string}{exit_code} != {result_exit_string}"
