blob: 8a9ccbc8da65e01c9fea5e9b42014d60e127f92d [file] [edit]
############################################################################
# Copyright (C) SchedMD LLC.
############################################################################
import atf
import pytest
# Global variables
qos1 = {"name": "qos1", "prio": 1}
qos2 = {"name": "qos2", "prio": 2}
qos3 = {"name": "qos3", "prio": 3}
part1 = "pa"
part2 = "pb"
acct = "acct"
comment = {
None: "no partition",
part1: f"comment of {part1}",
part2: f"comment of {part2}",
}
job_submit_lua = """
function slurm_job_modify(job_desc, part_list, submit_uid)
return slurm.SUCCESS
end
function slurm_job_submit(job_desc, part_list, submit_uid)
assoc_qos = job_desc["assoc_qos"]
assoc_comment = job_desc["assoc_comment"]
if assoc_qos ~= nil then
slurm.log_user("assoc_qos: %s", assoc_qos)
for qos in string.gmatch(assoc_qos, '([^,]+)') do
slurm.log_user("%s priority is %d", qos, slurm.get_qos_priority(qos))
end
else
slurm.log_user("No assoc_qos")
end
if assoc_comment ~= nil then
slurm.log_user("assoc_comment: %s", assoc_comment)
end
return slurm.SUCCESS
end
return slurm.SUCCESS
"""
# Setup
@pytest.fixture(scope="module", autouse=True)
def setup():
atf.require_accounting(modify=True)
atf.require_config_parameter_includes("JobSubmitPlugins", "lua")
atf.require_config_file("job_submit.lua", job_submit_lua)
atf.require_config_parameter(
"PartitionName",
{
"debug": {"Nodes": "ALL", "Default": "YES"},
part1: {"Nodes": "ALL"},
part2: {"Nodes": "ALL"},
},
)
atf.require_slurm_running()
@pytest.fixture(scope="module", autouse=True)
def setup_db(module_setup):
def _sacctmgr_add(opts):
atf.run_command(
f"sacctmgr -i add {opts}",
user=atf.properties["slurm-user"],
fatal=True,
)
_sacctmgr_add(f"qos {qos1['name']} Priority={qos1['prio']}")
_sacctmgr_add(f"qos {qos2['name']} Priority={qos2['prio']}")
_sacctmgr_add(f"qos {qos3['name']} Priority={qos3['prio']}")
_sacctmgr_add(f"account {acct}")
user = atf.get_user_name()
qos1_3 = qos1["name"] + "," + qos3["name"]
_sacctmgr_add(f"user {user} Account={acct} qos={qos1_3} Comment='{comment[None]}'")
_sacctmgr_add(
f"user {user} Account={acct} qos={qos1_3} Comment='{comment[part1]}' Partition={part1}",
)
_sacctmgr_add(
f"user {user} Account={acct} qos={qos1_3} Comment='{comment[part2]}' Partition={part2}",
)
@pytest.mark.skipif(
atf.get_version() < (24, 11),
reason="Ticket 20828: Allow lookup of available QOSs for user in submit filter, in 24.11+.",
)
def test_assoc_qos():
"""Test that submitting a job reports the correct assoc QOS info"""
# Submit a job
output = atf.run_command_error("srun true", fatal=True)
assert f"assoc_qos: {qos1['name']},{qos3['name']}" in output
assert f"{qos1['name']} priority is {qos1['prio']}" in output
assert f"{qos3['name']} priority is {qos3['prio']}" in output
# Check for slurmctld crash (bug 23497)
if atf.get_version() >= (25, 5, 3):
output = atf.run_command_error("srun --account=__not_an_acct true", fatal=True)
assert "No assoc_qos" in output
@pytest.mark.xfail(
atf.get_version() < (24, 11),
reason="Issue 50073: job_desc['assoc_comment'] does not look at assoc partition. Fixed in 24.11+",
)
def test_assoc_comment():
"""Test that submitting a job reports the correct assoc comment"""
# Submit a job
output = atf.run_command_error("srun true", fatal=True)
assert comment[None] in output
output = atf.run_command_error(f"srun --partition={part1} true", fatal=True)
assert comment[part1] in output
output = atf.run_command_error(f"srun --partition={part2} true", fatal=True)
assert comment[part2] in output