diff --git a/testsuite/expect/Makefile.am b/testsuite/expect/Makefile.am index 89776782082691389aa121d723e803d4fc9ef04c..e2d2e4c51476759f99bd375a5eeb39f02be528ba 100644 --- a/testsuite/expect/Makefile.am +++ b/testsuite/expect/Makefile.am @@ -147,6 +147,7 @@ EXTRA_DIST = \ test2.21 \ test2.22 \ test2.23 \ + test2.24 \ test3.1 \ test3.2 \ test3.3 \ diff --git a/testsuite/expect/Makefile.in b/testsuite/expect/Makefile.in index 17c208c6bccad880e7b962a374e7180c45cefe54..1f9001eb7d0c4a19e8d596fb3b08580a418a7c16 100644 --- a/testsuite/expect/Makefile.in +++ b/testsuite/expect/Makefile.in @@ -531,6 +531,7 @@ EXTRA_DIST = \ test2.21 \ test2.22 \ test2.23 \ + test2.24 \ test3.1 \ test3.2 \ test3.3 \ diff --git a/testsuite/expect/README b/testsuite/expect/README index a74f60ebb6baa1e4aba09b0c65875431bb3f8e0e..9687c124d3f850f10a191617bdae2019ef2c72a3 100644 --- a/testsuite/expect/README +++ b/testsuite/expect/README @@ -235,6 +235,7 @@ test2.20 Validate scontrol show hostnames. test2.21 Validate scontrol requeue of failed or completed job. test2.22 Validate scontrol requeuehold requeues job to held pending state. test2.23 Validate scontrol requeuehold State=SpecialExit. +test2.24 Validate the scontrol write config creates accurate config test3.# Testing of scontrol options (best run as SlurmUser or root). diff --git a/testsuite/expect/globals b/testsuite/expect/globals index abdd7064a0e233bf54b250d31018e21f6ec62c22..9471c8fb7c22ff1044406867da038c5e7ec41d17 100755 --- a/testsuite/expect/globals +++ b/testsuite/expect/globals @@ -224,6 +224,7 @@ set digit "\[0-9\]" set end_of_line "\[\r\n\]" set float "\[0-9\]+\\.?\[0-9\]*" set number "\[0-9\]+" +set format_time "\[0-9\]+\\:\[0-9\]+\\:\[0-9\]+" set number_with_suffix "\[0-9\]+\[KM\]*" set slash "/" set whitespace "\[ \t\n\r\f\v\]+" diff --git a/testsuite/expect/test2.24 b/testsuite/expect/test2.24 new file mode 100755 index 0000000000000000000000000000000000000000..ab112efbd399f2d15344a96fb08f3f589b8c4096 --- /dev/null +++ b/testsuite/expect/test2.24 @@ -0,0 +1,163 @@ +#!/usr/bin/expect +############################################################################ +# Purpose: Test of SLURM functionality +# Checks that scontrol write config creates a slurm.conf +# with the correct values +# +# +# Output: "TEST: #.#" followed by "SUCCESS" if test was successful, OR +# "FAILURE: ..." otherwise with an explanation of the failure, OR +# anything else indicates a failure mode that must be investigated. +############################################################################ +# Copyright (C) 2014 SchedMD LLC +# Written by Nathan Yee <nyee32@schedmd.com> +# +# This file is part of SLURM, a resource management program. +# For details, see <http://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 + +set test_id 2.24 +set option "" +set value "" +array set conf_val {} +set new_conf "" +set opt_cnt 0 +set exit_code 0 + +print_header $test_id + +if {[is_super_user] == 0} { + send_user "\nWARNING: this test requires that the user be root or " + send_user "the SlurmUser\n" +} + +# +# User scontrol show config to get some values to check +# against the new created file +# +log_user 0 +set val "" +set option "" +spawn $scontrol show config +expect { + + -re "($alpha_numeric_under) *= ($format_time)" { + set option $expect_out(1,string) + set val $expect_out(2,string) + set conf_val($option) $val + incr opt_cnt + exp_continue + } + -re "($alpha_numeric_under) *= ($alpha_numeric_under)" { + set option $expect_out(1,string) + set val $expect_out(2,string) + + # Exclude ENV variable that appear in scontrol show config + # Also "SuspendTime=NONE" gets written as "SuspendTime=0" + if {$option != "BOOT_TIME" && + $option != "HASH_VAL" && + $option != "MULTIPLE_SLURMD" && + $option != "NEXT_JOB_ID" && + $option != "SLURM_CONF" && + $option != "SLURM_VERSION" && + $option != "SuspendTime"} { + set conf_val($option) $val + incr opt_cnt + } + exp_continue + } + timeout { + send_user "\nFAILURE: scontrol is not responding\n" + set exit_code 1 + } + eof { + wait + } +} +log_user 1 + +# +# Execute scontrol write config and get the path and filename of the +# created file +# +spawn $scontrol write config +expect { + -re "(/.*)/*($alpha_numeric_under)*\r\n" { + set new_conf $expect_out(1,string) + exp_continue + } + timeout { + send_user "\nFAILURE: scontrol is not responding\n"; + set exit_code 1 + } + eof { + wait + } +} + +# +# Loop through the hash and check that the parameters exist within +# the new conf file +# +set tot_match 0 +foreach opt [array names conf_val] { + + log_user 0 + set match 0 + + spawn $bin_cat $new_conf + expect { + -re "$opt=$conf_val($opt)" { + set match 1 + exp_continue + } + -re "#$opt=" { + set match 1 + exp_continue + } + timeout { + send_user "\nFAILURE: scontrol is not responding\n" + set exit_code 1 + } + eof { + wait + } + } + log_user 1 + + if {$match != 1} { + send_user "\nFAILURE: $opt = $conf_val($opt)" + send_user " Was not found in new config file\n" + set exit_code 1 + } else { + incr tot_match + } +} +if {$tot_match != $opt_cnt} { + send_user "FAILURE: not all the values in the new config " + send_user "file were found ($tot_match != $opt_cnt)\n" + set exit_code 1 +} + +if {$exit_code == 0} { + exec $bin_rm -f $new_conf + send_user "\nSUCCESS\n" +} + +exit $exit_code