| ############################################################################ | |
| # Copyright (C) SchedMD LLC. | |
| ############################################################################ | |
| import logging | |
| import pytest | |
| import atf | |
| # Global variables | |
| cluster = "test_cluster" | |
| # Note: assoc table row count will the sum of these (plus a couple for root) | |
| acct_table_rows = 5000 | |
| user_table_rows = 5000 | |
| acct_table = "acct_table" | |
| assoc_table = f"{cluster}_assoc_table" | |
| user_table = "user_table" | |
| start_acct_id = 1 | |
| start_user_id = 1 | |
| # default values to insert below | |
| acct_desc = "" | |
| acct_org = "" | |
| assoc_id_parent = 1 | |
| assoc_is_def = 1 | |
| assoc_parent_acct = "root" | |
| assoc_shares = 1 | |
| table_gen_info = [ | |
| { | |
| "name": acct_table, | |
| "sql": f"(creation_time, mod_time, name, description, organization) values (@seq, @seq, concat('acct', @seq), '{acct_desc}', '{acct_org}')", | |
| "ignore": "ignore", | |
| "seq_start": start_acct_id, | |
| "seq_end": start_acct_id + acct_table_rows - 1, | |
| }, | |
| { | |
| "name": assoc_table, | |
| "sql": f"(creation_time, mod_time, acct, parent_acct, id_parent, lineage, shares) values (@seq, @seq, concat('acct', @seq), '{assoc_parent_acct}', {assoc_id_parent}, concat('/acct', @seq, '/'), {assoc_shares})", | |
| "ignore": "", | |
| "seq_start": start_acct_id, | |
| "seq_end": start_acct_id + acct_table_rows - 1, | |
| }, | |
| { | |
| "name": user_table, | |
| "sql": "(creation_time, mod_time, name) values (@seq, @seq, concat('user', @seq))", | |
| "ignore": "ignore", | |
| "seq_start": start_user_id, | |
| "seq_end": start_user_id + user_table_rows - 1, | |
| }, | |
| { | |
| "name": assoc_table, | |
| "sql": f"(creation_time, mod_time, user, acct, is_def, id_parent, lineage, shares) values (@seq, @seq, concat('user', {start_user_id}+@seq), concat('acct', {start_acct_id}+@seq), {assoc_is_def}, {assoc_id_parent}, concat('/acct', {start_acct_id}+@seq, '/0-user', {start_user_id}+@seq, '/'), {assoc_shares})", | |
| "ignore": "", | |
| "seq_start": 0, | |
| "seq_end": user_table_rows - 1, | |
| }, | |
| ] | |
| @pytest.fixture(scope="module", autouse=True) | |
| def setup(): | |
| """Test setup with required configurations.""" | |
| atf.require_version( | |
| (25, 5), "sbin/slurmdbd", reason="Fixed in !648 speed up account deletion" | |
| ) | |
| atf.require_accounting(modify=True) | |
| atf.require_config_parameter_includes("AccountingStorageEnforce", "associations") | |
| atf.require_config_parameter("AllowNoDefAcct", None, source="slurmdbd") | |
| atf.require_slurm_running() | |
| @pytest.fixture(scope="function", autouse=True) | |
| def setup_db(sql_statement_repeat): | |
| # | |
| # Create many accounts, users and assoc table entries. | |
| # | |
| # Do this outside slurm since it's way faster. | |
| # | |
| atf.run_command( | |
| f"sacctmgr -i add cluster {cluster}", | |
| user=atf.properties["slurm-user"], | |
| # quiet=True, | |
| ) | |
| logging.info( | |
| f"Populating the accounting database with {acct_table_rows} accounts and {user_table_rows} users" | |
| ) | |
| atf.stop_slurmdbd(quiet=True) | |
| for table_info in table_gen_info: | |
| mysql_command = sql_statement_repeat + ' -e "' | |
| mysql_command += f"call statement_repeat(\\\"insert {table_info['ignore']} into {table_info['name']} {table_info['sql']}\\\", {table_info['seq_start']}, {table_info['seq_end']}, 1, 1)" | |
| mysql_command += '"' | |
| atf.run_command( | |
| mysql_command, | |
| user=atf.properties["slurm-user"], | |
| fatal=True, | |
| ) | |
| atf.start_slurmdbd(quiet=True) | |
| yield | |
| atf.run_command( | |
| f"sacctmgr -i remove cluster {cluster}", | |
| user=atf.properties["slurm-user"], | |
| # quiet=True, | |
| ) | |
| def test_remove_user_account(): | |
| """Test removing default account of a user""" | |
| # acct1 is default account of user1 | |
| max_perf_time = 10 | |
| assert ( | |
| atf.run_command_exit( | |
| "sacctmgr -i remove acct acct1", | |
| user=atf.properties["slurm-user"], | |
| timeout=max_perf_time, | |
| ) | |
| == 0 | |
| ), f"sacctmgr should be able to remove the account in less than {max_perf_time}s" |