############################################################################
# Copyright (C) SchedMD LLC.
############################################################################
import os
import shutil

import pytest

import atf


# Setup
@pytest.fixture(scope="module", autouse=True)
def setup():
    atf.require_auto_config("wants to set the TaskEpilog")
    atf.require_slurm_running()


def test_task_epilog(tmp_path):
    """Test TaskEpilog"""

    sleep_symlink = str(tmp_path / f"sleep_symlink_{os.getpid()}")
    os.symlink(shutil.which("sleep"), sleep_symlink)
    task_epilog = str(tmp_path / "task_epilog.sh")
    touched_file = str(tmp_path / "touched_file")
    atf.make_bash_script(
        task_epilog,
        f"""touch {touched_file}
{sleep_symlink} 60 &
exit 0
""",
    )
    atf.set_config_parameter("TaskEpilog", task_epilog)

    # Verify task epilog ran by checking for the file creation
    atf.run_job("-t1 true", fatal=True)
    assert atf.wait_for_file(touched_file), f"File ({touched_file}) was not created"

    # Verify that the child processes of the task epilog have been killed off
    assert (
        atf.run_command_exit(f"pgrep {sleep_symlink}", xfail=True) != 0
    ), "Process ({sleep_symlink}) should have been killed"
