blob: 78fb1130152b14e130d814687c8d56782481bc40 [file] [log] [blame]
############################################################################
# Copyright (C) SchedMD LLC.
############################################################################
import atf
import pytest
# import re
# Setup
@pytest.fixture(scope="module", autouse=True)
def setup():
atf.require_auto_config("wants to create custom gres and resource file")
atf.require_config_parameter("SelectType", "select/cons_tres")
atf.require_config_parameter("SelectTypeParameters", "CR_CPU")
atf.require_config_parameter("AccountingStorageType", "accounting_storage/slurmdbd")
atf.require_config_parameter("GresTypes", "r1,r2")
atf.require_nodes(1, [("Gres", "r1:1,r2:a:1"), ("CPUs", "2")])
resource_file = f"{atf.module_tmp_path}/resource1"
atf.run_command(f"touch {resource_file}")
atf.require_config_parameter(
"Name", {"r1": {"File": resource_file}, "r2": {"Type": "a"}}, source="gres"
)
atf.require_slurm_running()
@pytest.fixture(scope="function", autouse=True)
def cleanup_test():
yield
atf.cancel_all_jobs(quiet=True)
def test_gres_alloc_dealloc_file():
"""Test alloc/dealloc of gres when file is set, but not type"""
alloc = atf.run_command_output(
"salloc --gres=r1 scontrol show nodes node1 -d | grep GresUsed", fatal=True
)
assert "r1:1" in alloc, "Expect allocation of gres with file set"
dealloc = atf.run_command_output("scontrol show nodes node1 -d | grep GresUsed")
assert "r1:0" in dealloc, "Expect deallocation of gres with file set"
def test_gres_alloc_dealloc_type():
"""Test alloc/dealloc of gres when type is set, but not file"""
alloc = atf.run_command_output(
"salloc --gres=r2:a:1 scontrol show nodes node1 -d | grep GresUsed", fatal=True
)
assert "r2:a:1" in alloc, "Expect allocation of gres with type set"
dealloc = atf.run_command_output("scontrol show nodes node1 -d | grep GresUsed")
assert "r2:a:0" in dealloc, "Expect deallocation of gres with type set"
def test_gres_overlap():
"""Test gres without file and --overlap"""
output_file = f"{atf.module_tmp_path}/out"
job_id = atf.submit_job_sbatch(
f"-wnode1 -N1 --gres=r2:1 \
--output={output_file} --wrap='\
srun --overlap --gres=r2:1 sleep 60 &\
srun --overlap --gres=r2:1 sleep 60 &\
wait'",
fatal=True,
)
assert atf.repeat_until(
lambda: None,
lambda out: atf.get_step_parameter(f"{job_id}.0", "State") == "RUNNING"
and atf.get_step_parameter(f"{job_id}.1", "State") == "RUNNING",
), "Expect all steps to run in parallel"