############################################################################
# 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_input_output_error(tmp_path):
    """Verify srun -input,--output, and --error options work"""

    CONTENT = "sleep aaa\nexit 0"
    sleep_err_message = r"sleep: invalid time interval ‘aaa’"
    echo_output = "test --output"
    file_in = tmp_path / "file_in.input"
    file_out = tmp_path / "file_out.output"
    file_err = tmp_path / "file_err.error"
    file_in.write_text(CONTENT)

    # Test --input with a file that would fail and --error catching the error
    atf.run_command(f"srun --input={str(file_in)} --error={str(file_err)} -t1 bash")
    assert re.search(sleep_err_message, file_err.read_text()) is not None

    # Test --output's file gets the echoed message
    atf.run_command(f"srun --output={str(file_out)} -t1 echo {echo_output}")
    assert file_out.read_text().strip("\n") == echo_output

    # Test the none parameter
    stderr = atf.run_command_error("srun --error=none -t1 sleep aaa", xfail=True)
    assert re.search(sleep_err_message, stderr) is None
    stdout = atf.run_command_output("srun --output=none -t1 id")
    assert re.search(r"uid=", stdout) is None
