| ############################################################################ |
| # Copyright (C) SchedMD LLC. |
| ############################################################################ |
| # import re |
| import json |
| import os |
| import pwd |
| |
| import pytest |
| |
| import atf |
| |
| |
| @pytest.fixture(scope="module", autouse=True) |
| def setup(): |
| atf.require_auto_config("wants to load a user into the accounting database") |
| atf.require_accounting(modify=True) |
| atf.require_config_parameter("Parameters", "PreserveCaseUser", source="dbd") |
| atf.require_slurm_running() |
| |
| |
| @pytest.fixture(scope="module") |
| def setup_account(): |
| test_user = pwd.getpwuid(os.getuid())[0] |
| atf.run_command( |
| "sacctmgr -vi add account test_account", |
| user=atf.properties["slurm-user"], |
| fatal=True, |
| ) |
| atf.run_command( |
| f"sacctmgr -vi add user {test_user} account=test_account AdminLevel=Admin", |
| user=atf.properties["slurm-user"], |
| fatal=True, |
| ) |
| |
| |
| def test_PreserveCaseUser_on(setup_account): |
| """Verify text case is preserved on the imported user name""" |
| |
| config_file = f"{atf.module_tmp_path}/my_cluster.cfg" |
| user = "Test.User" |
| config_text = f""" |
| Cluster - atf |
| User - {user}:DefaultAccount=test_account |
| """ |
| with open(config_file, "w") as f: |
| f.writelines(config_text) |
| |
| atf.run_command(f"sacctmgr -inQ load {config_file} clean", fatal=True) |
| user_out = atf.run_command_output( |
| f"sacctmgr list user {user} format=User -nP" |
| ).rstrip() |
| assert ( |
| user_out == user |
| ), f"Case was not be preserved for imported user name ({user_out})" |
| |
| |
| def test_PreserveCaseAll_sets_case_flags(): |
| """Verify PreserveCaseAll enables every preserve-case connection flag""" |
| |
| atf.require_version( |
| (26, 11), |
| "sbin/slurmdbd", |
| reason="PreserveCaseAll was added in 26.11", |
| ) |
| atf.require_version( |
| (26, 11), |
| "bin/sacctmgr", |
| reason="PreserveCaseAll JSON validation requires 26.11 sacctmgr", |
| ) |
| |
| atf.set_config_parameter("Parameters", "PreserveCaseAll", source="slurmdbd") |
| |
| expected_flags = {"PreserveCaseResource", "PreserveCaseUser"} |
| output = atf.run_command_output( |
| "sacctmgr --json show configuration", |
| user=atf.properties["slurm-user"], |
| fatal=True, |
| ) |
| config = json.loads(output)["slurmdbd_conf"] |
| flags = set(config.get("PersistConnFlags", [])) |
| |
| assert ( |
| expected_flags <= flags |
| ), f"PreserveCaseAll did not set all flags. Expected superset of {expected_flags}, got {flags}" |