blob: d8f69ee51b2a1d3410486dfdc9197abcadabe476 [file] [log] [blame]
#!/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"
}