############################################################################
# Copyright (C) SchedMD LLC.
############################################################################
import atf
import os
import pytest
import re

iteration_count = 100
node_count = 4
task_count = 4


# Setup/Teardown
@pytest.fixture(scope="module", autouse=True)
def setup():
    atf.require_nodes(node_count, [("CPUs", task_count)])
    atf.require_slurm_running()


@pytest.fixture(scope="function")
def input_file(request, tmp_path):
    """Create a sizable text file"""
    in_file = str(tmp_path / "test.in")
    with open(in_file, "w") as f:
        for line in range(0, 100):
            for i in range(1, 100):
                f.write(chr(ord("0") + i % 10))
            f.write("\n")
    return in_file


def test_stdin_broadcast(input_file, tmp_path):
    """Copy job input to job output and compare sizes"""
    output_file = str(tmp_path / "test.out")
    for i in range(0, iteration_count):
        if os.path.isfile(output_file):
            os.remove(output_file)
        exit_code = atf.run_command_exit(
            f"srun --input={input_file} --output={output_file} --error=/dev/null -n {task_count} -N {node_count} -t 1 cat -"
        )
        assert exit_code == 0, f"srun failed with status {exit_code}"
        in_size = os.path.getsize(input_file)
        out_size = os.path.getsize(output_file)
        assert (
            out_size == in_size * task_count
        ), f"output file size ({out_size}) was not {task_count} times the input file size ({in_size})"
