| ############################################################################ |
| # Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved. |
| ############################################################################ |
| import os |
| import re |
| |
| import pytest |
| |
| import atf |
| |
| |
| @pytest.fixture(scope="module", autouse=True) |
| def setup(): |
| atf.require_slurm_running() |
| if atf.get_config_parameter("SlurmdUser") != "root(0)": |
| pytest.skip("This test is incompatible with SlurmdUser != root") |
| |
| |
| @pytest.fixture(scope="module") |
| def sbcast_binary(): |
| """Use the sbcast binary itself as the file to broadcast""" |
| |
| return atf.run_command_output("which sbcast", fatal=True).strip() |
| |
| |
| def _run_sbcast_compress_test(sbcast_binary, compress_type, tmp_path): |
| """broadcast sbcast binary with given compress type, verify integrity""" |
| |
| dest = f"/tmp/test_sbcast_compress_{compress_type}_{os.getpid()}" |
| script = str(tmp_path / f"script_{compress_type}.sh") |
| output = str(tmp_path / f"output_{compress_type}.txt") |
| |
| atf.make_bash_script( |
| script, |
| f""" |
| srun rm -f {dest} |
| sbcast --compress={compress_type} {sbcast_binary} {dest} |
| srun diff {sbcast_binary} {dest} |
| srun rm -f {dest} |
| """, |
| ) |
| |
| job_id = atf.submit_job_sbatch(f"-N1 -t2 --output={output} {script}", fatal=True) |
| atf.wait_for_job_state(job_id, "DONE", fatal=True) |
| atf.wait_for_file(output, fatal=True) |
| return atf.run_command_output(f"cat {output}") |
| |
| |
| def test_compress_none(sbcast_binary, tmp_path): |
| """Verify sbcast --compress=none""" |
| |
| output = _run_sbcast_compress_test(sbcast_binary, "none", tmp_path) |
| assert not re.search(r"differ", output) |
| assert not re.search(r"[Ee]rror", output) |
| |
| |
| def test_compress_lz4(sbcast_binary, tmp_path): |
| """Verify sbcast --compress=lz4""" |
| |
| output = _run_sbcast_compress_test(sbcast_binary, "lz4", tmp_path) |
| assert not re.search(r"differ", output) |
| assert not re.search(r"[Ee]rror", output) |