blob: 7e437fa0eae580a8e50ad28ec65b8a87d5cf8c7a [file] [log] [blame]
############################################################################
# Copyright (C) SchedMD LLC.
############################################################################
import atf
import pytest
import os
import re
# Setup
@pytest.fixture(scope="module", autouse=True)
def setup():
atf.require_nodes(4)
atf.require_slurm_running()
def test_multi_prog():
"""Test of MPMD (--multi-prog option)."""
file_in = atf.module_tmp_path / "file_in"
# Submit a slurm job that will execute different programs and arguments by task number
content = r"""1-2 echo task:%t:offset:%o
0,3 echo task:%t:offset:%o"""
with open(file_in, "w") as f:
f.write(content)
os.chmod(file_in, 0o777)
output = atf.run_job_output(f"-n4 -O -l --multi-prog {file_in}")
assert (
re.search(r"0: task:0:offset:0", output) is not None
), "Label 0 did not have correct task or offset"
assert (
re.search(r"1: task:1:offset:0", output) is not None
), "Label 1 did not have correct task or offset"
assert (
re.search(r"2: task:2:offset:1", output) is not None
), "Label 2 did not have correct task or offset"
assert (
re.search(r"3: task:3:offset:1", output) is not None
), "Label 3 did not have correct task or offset"
# Submit a slurm job that will execute different executables and check debug info
content = r"""1-2 hostname
0,3 date"""
with open(file_in, "w") as f:
f.write(content)
error = str(
atf.run_job_error(
f"--debugger-test -v -n4 -O -l --multi-prog {file_in}",
timeout=10,
xfail=True,
)
)
match = re.findall(r"executable:\w+", error)
assert len(match) == 4, "Did not generate full list of executables"
error_output = atf.run_job_error(
f"--debugger-test -v -n5 -O -l --multi-prog {file_in}", xfail=True
)
assert re.search(
rf"Configuration file {file_in} invalid", error_output
), "Did not note lack of a executable for task 5"
content = r"""1-2 hostname
0,3 echo aaaa \
task:%t:offset:%o bbbb"""
with open(file_in, "w") as f:
f.write(content)
output = atf.run_job_output(f"-n4 --overcommit -l -t1 --multi-prog {file_in}")
assert re.search(
r"0: aaaa task:0:offset:0 bbbb", output
), "MPMD line continuation first assert"
assert re.search(
r"3: aaaa task:3:offset:1 bbbb", output
), "MPMD line continuation second assert"