############################################################################
# Copyright (C) SchedMD LLC.
############################################################################
import re

import pytest

import atf

node_num = 4


# Setup
@pytest.fixture(scope="module", autouse=True)
def setup():
    atf.require_nodes(node_num)
    atf.require_slurm_running()


def test_threads():
    """Verify a job executes with various launch thread fanouts with --threads option"""

    node_count = "1-64"
    threads = 0
    output = atf.run_command_output(
        f"srun -N{node_count} -l --threads=1 printenv SLURMD_NODENAME"
    )
    assert re.search(r"0: (\S+)", output) is not None, "Did not get hostname of task 0"

    task_num = int(atf.get_config_parameter("MaxTasksPerNode"))
    if task_num <= 32:
        threads = task_num
    else:
        threads = 32
    task_num = threads * 2
    output = atf.run_command(
        f"srun -N{node_count} -n{task_num} -O -l --threads={threads} printenv SLURMD_NODENAME"
    )
    assert (
        output["exit_code"] == 0
    ), f"srun failed to run with {threads} threads and {task_num} tasks"
    assert (
        re.search(r"0: (\S+)", output["stdout"]) is not None
    ), f"Did not get hostname of task 0 when running {threads} threads"
