############################################################################
# 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_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
