#!/usr/bin/env expect ############################################################################ # Purpose: Test of Slurm functionality # Validate scontrol displays and updates Allow/Deny accounts. ############################################################################ # Copyright (C) 2013 SchedMD LLC # Written by Nathan Yee # # This file is part of Slurm, a resource management program. # For details, see . # 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 set part_name "test$test_id\_part" set acct_name "test$test_id\_acct" set exit_code 0 # # Check accounting config and bail if not found. # if { [test_account_storage] == 0 } { skip "This test can't be run without a usable AccountStorageType" } if { [string compare [check_accounting_admin_level] "Administrator"] } { skip "This test can't be run without being an Accounting administrator.\nUse: sacctmgr mod user \$USER set admin=admin" } proc set_part_val {part_type part_val} { global scontrol part_name exit_code spawn $scontrol update partitionname=$part_name $part_type=$part_val expect { -re "Error" { log_error "$part_type was not set" set exit_code 1 } timeout { log_error "scontrol is not responding" set exit_code 1 } eof { wait } } } proc check_part {part_type part_val} { global scontrol part_name exit_code set val_found 0 spawn $scontrol show partition=$part_name expect { -re "$part_type=$part_val" { set val_found 1 exp_continue } timeout { log_error "scontrol is not responding" set exit_code 1 } eof { wait } } if {$val_found != 1} { log_error "$part_type was not set to $part_val" set exit_code 1 } } proc delete_part { } { global scontrol sacctmgr part_name acct_name spawn $scontrol delete partition=$part_name expect { -re "error" { log_error "scontrol did not remove partition" set exit_code 1 exp_continue } timeout { log_error "scontrol is not responding" set exit_code 1 } eof { wait } } set del_acct 0 spawn $sacctmgr -i delete account $acct_name expect { -re "Deleting accounts" { set del_acct 1 exp_continue } timeout { log_error "sacctmgr is not responding" set exit_code 1 } eof { wait } } if {$del_acct != 1} { log_error "Account was not deleted" set exit_code 1 } } spawn $scontrol create partition=$part_name expect { -re "error" { log_error "Partition was not created" set exit_code 1 } timeout { log_error "scontrol is not reponding" set exit_code 1 } eof { wait } } set make_acct 0 spawn $sacctmgr -i create account $acct_name expect { -re "Adding Account" { set make_acct 1 exp_continue } timeout { log_error "sacctmgr is not responding" set exit_code 1 } eof { wait } } if { $make_acct != 1 } { log_error "Account was not added" set exit_code 1 } # # Set AllowAccount # set_part_val allowaccount $acct_name # # Check that AllowAccounts is set in the partition # check_part AllowAccounts $acct_name # # Set AllowAccounts back to all # set_part_val allowaccount ALL # # Check that AllowAccounts is set back to all # check_part AllowAccounts ALL # # Set DenyAccount # set_part_val denyaccount $acct_name # # Check that DenyAccount was set # check_part DenyAccounts $acct_name # # Set DenyAccount to none # set_part_val denyaccount none # # Check that DenyAccount was set to ALL # check_part DenyAccounts none # # Delete the partition and the Account # delete_part if {$exit_code != 0} { fail "Test failed due to previous errors (\$exit_code = $exit_code)" }