blob: 82460fdbddf376fbf363a835d2242527adbf3a5d [file] [log] [blame]
############################################################################
# Copyright (C) SchedMD LLC.
############################################################################
import atf
import pytest
import re
import pexpect
node_count = 4
# Setup
@pytest.fixture(scope="module", autouse=True)
def setup():
atf.require_nodes(node_count)
atf.require_slurm_running()
def test_input_output_taskid():
"""Verify srun stdin/out routing with specific task number."""
task_id = 4
task_num = 10
# Test --input={task_id} runs Task task_id until the other tasks close
child = pexpect.spawn(
f"srun --input={task_id} -O -v --wait=2 -N1 -n{task_num} bash"
)
assert (
child.expect("task 4: Killed") == 0
), f"Task ({task_id}) was not killed when other tasks closed"
child_out = str(child.before)
match = re.search(r"jobid (\d+)", child_out)
job_id = match.group(1)
step_id = rf"StepId={job_id}.0"
assert (
re.search(step_id, child_out) is not None
), f"Step ({step_id}) not found in verbose output"
assert re.search(
rf"{step_id} task {task_id}: running", child_out
), f"Task ({task_id}) failed to run"
assert re.search(
rf"{step_id} tasks 0-{task_id - 1},{task_id + 1}-{task_num - 1}: exited",
child_out,
), "Other tasks failed to exit"
# Test --output={task_id} sends only {task_id}'s output to stdout
stdout = atf.run_command_output(f"srun --output={task_id} -O -N1 -n{task_num} env")
match = re.search(r"SLURM_PROCID=(\d+)", stdout)
proc_id = match.group(1)
assert (
str(task_id) == proc_id
), f"Wrong task id ({proc_id}) responded, expected task id ({task_id})"