blob: f443789acbee33cb4570839d5591ced128d2c26a [file] [log] [blame]
#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
# Validates that a resource can be added to a cluster after
# it has been created
############################################################################
# Copyright (C) SchedMD LLC.
#
# This file is part of Slurm, a resource management program.
# For details, see <https://slurm.schedmd.com/>.
# Please also read the included file: DISCLAIMER.
#
# Slurm 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; either version 2 of the License, or (at your option)
# any later version.
#
# Slurm 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 Slurm; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
############################################################################
source ./globals_accounting
set test_cluster "${test_name}_cluster"
set test_res1 "${test_name}_res1"
set test_res2 "${test_name}_res2"
set access_err 0
array set res1 {}
set res1(count) 50
set res1(server) "${test_name}_server1"
set res1(servertype) "${test_name}_server_type1"
set res1(type) "license"
array set res2 {}
set res2(count) 25
set res2(server) "${test_name}_server2"
set res2(servertype) "${test_name}_server_type2"
set res2(type) "license"
array set res1_cluster {}
set res1_cluster(cluster) $test_cluster
set res1_cluster(server) "${test_name}_server1"
set res1_cluster(percentallowed) 25
array set res2_cluster {}
set res2_cluster(cluster) $test_cluster
set res2_cluster(server) "${test_name}_server2"
set res2_cluster(percentallowed) 25
proc check_val { res_name } {
global sacctmgr test_cluster
set rc 0
spawn $sacctmgr -n show resource withcluster cluster=$test_cluster \
format=name%-30
expect {
-re "$res_name" {
set rc 1
exp_continue
}
timeout {
fail "sacctmgr is not responding"
}
eof {
wait
}
}
return $rc
}
if {[get_config_param "AccountingStorageType"] ne "accounting_storage/slurmdbd"} {
skip "This test can't be run without AccountStorageType=slurmdbd"
} elseif {![is_super_user]} {
skip "This test can't be run without superuser permissions"
}
proc cleanup { } {
global test_res1 test_res2 test_cluster
remove_res $test_res1
remove_res $test_res2
remove_cluster $test_cluster
}
# 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"
}
set added 0
spawn $sacctmgr add -i cluster $test_cluster
expect {
-re "Adding Cluster" {
set added 1
exp_continue
}
timeout {
fail "sacctmgr is not responding"
}
eof {
wait
}
}
if {$added != 1} {
fail "Test cluster was not added"
}
#
# Add resources
#
add_resource $test_res1 [array get res1]
if {[check_resource_limits $test_res1 [array get res1]]} {
fail "$test_res1 has bad values"
}
add_resource $test_res2 [array get res2]
if {[check_resource_limits $test_res2 [array get res2]]} {
fail "$test_res2 has bad values"
}
#
# Add a resources to the cluster
#
add_resource $test_res1 [array get res1_cluster]
if {[check_val $test_res1] != 1} {
fail "sacctmgr did not add resource ($test_res1) to cluster ($test_cluster)"
}
#
# Add another resource to the cluster
#
add_resource $test_res2 [array get res2_cluster]
if {[check_val $test_res2] != 1} {
fail "sacctmgr did not add resource ($test_res2) to cluster ($test_cluster)"
}
#
# Remove resource from the cluster
#
set deleted 0
spawn $sacctmgr delete resource -i where name=$test_res1 \
server=$res1(server) cluster=$test_cluster
expect {
-re "Deleting" {
set deleted 1
exp_continue
}
timeout {
fail "sacctmgr is not responding"
}
eof {
wait
}
}
if {$deleted != 1} {
fail "Resource ($test_res1) was not deleted"
}
if {[check_val $test_res2] != 1} {
fail "Only resource ($test_res2) should be associated with cluster ($test_cluster)"
}