| #!/usr/bin/env expect |
| ############################################################################ |
| # Purpose: Test of Slurm functionality |
| # sacctmgr clear (modify) resource values |
| ############################################################################ |
| # Written by Bill Brophy <bill.brophy@bull.com> |
| # Copyright (C) 2012 Bull S. A. S. |
| # Bull, Rue Jean Jaures, B.P.68, 78340, Les Clayes-sous-Bois. |
| # This program is free software; you can redistribute it and/or modify it |
| # under the terms of the GNU General Public License as published by |
| # the Free Software Foundation version 2 of the License. |
| # This program is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
| # See the GNU General Public License for more details. |
| # You should have received a copy of the GNU General Public License along |
| # with this program; if not, write to the Free Software Foundation, Inc., |
| # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| ############################################################################ |
| source ./globals_accounting |
| |
| set tc2 "${test_name}-cluster-2" |
| set sr1 [format "%s%s" $test_name "res_1"] |
| set sr2 [format "%s%s" $test_name "res_2"] |
| set sr3 [format "%s%s" $test_name "res_3"] |
| |
| set res1_desc sr1 |
| set res1_cnt 80 |
| set res1_srvtyp server_type_1 |
| set res1_srv server_1 |
| set res1_type license |
| set res1_allw 50 |
| |
| set res2_desc "sr2&sr3" |
| set res2_cnt 100 |
| set res2_srvtyp server_type_2 |
| set res2_srv server_2 |
| set res2_type license |
| |
| set ser server |
| set ect1 40 |
| set ect1a 25 |
| set access_err 0 |
| |
| # First test resource |
| array set resource1 {} |
| set resource1(description) $res1_desc |
| set resource1(count) $res1_cnt |
| set resource1(ServerType) $res1_srvtyp |
| set resource1(Server) $res1_srv |
| set resource1(type) $res1_type |
| set resource1(percentallowed) $res1_allw |
| |
| # First check test resources |
| array set resource1_chck {} |
| set resource1_chck(description) $res1_desc |
| set resource1_chck(count) $res1_cnt |
| set resource1_chck(ServerType) $res1_srvtyp |
| set resource1_chck(Server) $res1_srv |
| |
| # Limit changes to the first resource |
| array set resource1_chng {} |
| set resource1_chng(count) 50 |
| |
| # Second and third test resources |
| array set resource2 {} |
| set resource2(description) $res2_desc |
| set resource2(count) $res2_cnt |
| set resource2(ServerType) $res2_srvtyp |
| set resource2(Server) $res2_srv |
| set resource2(type) $res2_type |
| |
| array set resource2_chck {} |
| set resource2_chck(description) $res2_desc |
| set resource2_chck(count) $res2_cnt |
| set resource2_chck(ServerType) $res2_srvtyp |
| set resource2_chck(Server) $res2_srv |
| |
| # Cluster |
| array set clus_req {} |
| |
| set timeout 60 |
| |
| # |
| # Check accounting config and bail if not found. |
| # |
| if {[get_config_param "AccountingStorageType"] ne "accounting_storage/slurmdbd"} { |
| skip "This test can't be run without a usable AccountStorageType" |
| } |
| |
| # |
| # Check that current user is root or SlurmUser |
| # |
| if {![is_super_user]} { |
| skip "Test can only be ran as SlurmUser" |
| } |
| |
| #if {[get_admin_level] ne "Administrator"} { |
| # skip "This test can't be run without being an Accounting administrator.\nUse: sacctmgr mod user \$USER set admin=admin" |
| #} |
| |
| proc cleanup {} { |
| global sr2 sr3 tc2 |
| |
| # |
| # Clean up and exit |
| # |
| remove_res $sr2,$sr3 |
| remove_cluster $tc2 |
| } |
| |
| # Make sure we have a clean system and permission to do this work |
| cleanup |
| if {$access_err != 0} { |
| skip "Not authorized to perform this test" |
| } |
| |
| # |
| # Add cluster |
| # |
| if [add_cluster "$tc2" [array get clus_req]] { |
| fail "Unable to add cluster ($tc2)" |
| } |
| |
| # |
| # get name of this cluster |
| # |
| set cluster [get_config_param "ClusterName"] |
| set resource1(cluster) "$cluster,$tc2" |
| |
| # |
| # add a global resource designating multiple clusters |
| # |
| add_resource $sr1 [array get resource1] |
| |
| # |
| # Use sacctmgr list to verify the test global resource fields |
| # |
| if {[check_resource_limits $sr1 [array get resource1_chck]] == 1} { |
| fail "list resource output is incorrect" |
| } |
| |
| # |
| # use scontrol show license to verify the cluster license was created |
| # |
| set matches 0 |
| wait_for -subtest {$matches == 2} { |
| set output [run_command_output -fail "$scontrol show license"] |
| set matches 0 |
| incr matches [regexp "LicenseName=($sr1@$resource1(Server))" $output] |
| incr matches [regexp "Total=$ect1 Used=0 Free=$ect1 Reserved=0 Remote=yes" $output] |
| } |
| |
| # |
| # modify resources |
| # |
| if {[mod_resource $sr1 [array get resource1_chng]] == 1} { |
| fail "Resource modify not working ($matches != 1)" |
| } |
| |
| # |
| # Use sacctmgr to list the test resource modifications |
| # |
| # Use sacctmgr list to verify the test resource fields |
| # |
| set resource1_chck(count) $resource1_chng(count) |
| if {[check_resource_limits $sr1 [array get resource1_chck]] == 1} { |
| fail "List resource output is incorrect" |
| } |
| |
| # |
| # use scontrol to verify the modified cluster license |
| # |
| set matches 0 |
| wait_for -subtest {$matches == 2} { |
| set output [run_command_output -fail "$scontrol show license $sr1@$resource1(Server)"] |
| set matches 0 |
| incr matches [regexp "LicenseName=$sr1@$resource1(Server)" $output] |
| incr matches [regexp "Total=$ect1a Used=0 Free=$ect1a Reserved=0 Remote=yes" $output] |
| } |
| |
| # |
| # remove resource |
| # |
| if [remove_res $sr1] { |
| fail "Unable to remove resource ($sr1)" |
| } |
| |
| # |
| # use scontrol to verify cluster license was removed |
| # |
| set matches 1 |
| wait_for -subtest {$matches == 0} { |
| set output [run_command_output -fail "$scontrol show license $sr1@$resource1(Server)"] |
| set matches 0 |
| incr matches [regexp "LicenseName=$sr1@$resource1(Server)" $output] |
| } |
| |
| # |
| # add multiple global resources in a single call |
| # |
| add_resource "$sr2,$sr3" [array get resource2] |
| |
| # |
| # Use sacctmgr list to verify both global resources were added |
| # |
| # Check resource 2 |
| if {[check_resource_limits $sr2 [array get resource2_chck]] == 1} { |
| fail "List resource output is incorrect" |
| } |
| |
| # Check resource 3 |
| if {[check_resource_limits $sr3 [array get resource2_chck]] == 1} { |
| fail "List resource output is incorrect" |
| } |