| ############################################################################ | |
| # Copyright (C) SchedMD LLC. | |
| ############################################################################ | |
| import os | |
| import pytest | |
| import atf | |
| # 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})" |