From 64ca3ead46df9909b1113bceedaab8639c35b588 Mon Sep 17 00:00:00 2001 From: "Joseph P. Donaghy" <donaghy1@llnl.gov> Date: Thu, 19 Feb 2009 18:00:28 +0000 Subject: [PATCH] Test of stat options a, n, o, p, P and v. --- testsuite/expect/Makefile.am | 2 + testsuite/expect/README | 3 +- testsuite/expect/test23.3 | 671 +++++++++++++++++++++++++++++++++++ 3 files changed, 675 insertions(+), 1 deletion(-) create mode 100755 testsuite/expect/test23.3 diff --git a/testsuite/expect/Makefile.am b/testsuite/expect/Makefile.am index 60dd7d8faad..d3141f93300 100644 --- a/testsuite/expect/Makefile.am +++ b/testsuite/expect/Makefile.am @@ -317,9 +317,11 @@ EXTRA_DIST = \ test21.22 \ test21.23 \ test21.24 \ + test21.25 \ test22.1 \ test23.1 \ test23.2 \ + test23.3 \ usleep distclean-local: diff --git a/testsuite/expect/README b/testsuite/expect/README index 8f43d9c6b38..1895a79a498 100644 --- a/testsuite/expect/README +++ b/testsuite/expect/README @@ -532,5 +532,6 @@ test22.1 sreport cluster utilization report test23.# Testing of sstat commands and options. ================================================= -test23.1 sstat --help +test23.1 sstat -e, h, and V options test23.2 sstat --helpformat +test23.3 sstat -a, n, o, p, P, v options diff --git a/testsuite/expect/test23.3 b/testsuite/expect/test23.3 new file mode 100755 index 00000000000..2aae9dd6363 --- /dev/null +++ b/testsuite/expect/test23.3 @@ -0,0 +1,671 @@ +#!/usr/bin/expect +############################################################################ +# Purpose: Test of SLURM sstat functionality +# sstat a, n, o, p, P and v options. +# +# 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) 2009 Lawrence Livermore National Security. +# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). +# Written by Joseph Donaghy <donaghy1@llnl.gov> +# LLNL-CODE-402394. +# +# This file is part of SLURM, a resource management program. +# For details, see <http://www.llnl.gov/linux/slurm/>. +# +# 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 "23.3" +set exit_code 0 +set file_in1 "test.$test_id.input1" +set file_in2 "test.$test_id.input2" +set file_in3 "test.$test_id.input3" +set test_acct "test_acct" +set timeout 60 +print_header $test_id + +set ac AveCPU +set ap AvePages +set ar AveRSS +set av AveVMSize +set ji JobID +set mp MaxPages +set mpn MaxPagesNode +set mpt MaxPagesTask +set mr MaxRSS +set mrn MaxRSSNode +set mrt MaxRSSTask +set mvs MaxVMSize +set mvn MaxVMSizeNode +set mvt MaxVMSizeTask +set mc MinCPU +set mn MinCPUNode +set mt MinCPUTask +set nt NTasks +set sc SystemCPU +set tc TotalCPU +# +# Check accounting config and bail if not found. +# +if { [test_account_storage] == 0 } { + send_user "\nWARNING: This test can't be run without a usable AccountStorageType\n" + exit 0 +} + +if { [string compare [check_accounting_admin_level] "Administrator"] } { + send_user "\nWARNING: This test can't be run without being an Accounting administrator.\nUse sacctmgr mod user \$USER_NAME set admin=admin.\n" + exit 0 +} + +# +# Identify the user and his current default account +# +set acct_name "" +set user_name "" +set user_gid "" +spawn $bin_id -u -n +expect { + -re "($alpha_numeric_under)" { + set user_name $expect_out(1,string) + exp_continue + } + eof { + wait + } +} + +spawn $bin_id -u +expect { + -re "($alpha_numeric_under)" { + set user_gid $expect_out(1,string) + exp_continue + } + eof { + wait + } +} + +set s_pid [spawn $sacctmgr show user $user_name] +expect { + -re "$user_name *($alpha_numeric_under)" { + set acct_name $expect_out(1,string) + exp_continue + } + timeout { + send_user "FAILURE: sacctmgr add not responding\n" + slow_kill $s_pid + exit 1 + } + eof { + wait + } +} + +# +# Use sacctmgr to add an account +# +set aamatches 0 +set sadd_pid [spawn $sacctmgr -i add account $test_acct] +expect { + -re "Adding Account" { + incr aamatches + exp_continue + } + -re "Nothing new added" { + send_user "\nWARNING: vestigial account $test_acct found\n" + incr aamatches + exp_continue + } + timeout { + send_user "\nFAILURE: sacctmgr add not responding\n" + slow_kill $sadd_pid + set exit_code 1 + } + eof { + wait + } +} +if {$aamatches != 1} { + send_user "\nFAILURE: sacctmgr had a problem adding account.\n" + exit 1 +} + +# +# Add self to this new account +# +set sadd_pid [spawn $sacctmgr -i create user name=$user_name account=$test_acct] +expect { + timeout { + send_user "\nFAILURE: sacctmgr add not responding\n" + slow_kill $sadd_pid + set exit_code 1 + } + eof { + wait + } +} + +# +# Build input script file1 +# +make_bash_script $file_in1 " +$srun $file_in2 + +" + +# +# Build input script file2 +# +make_bash_script $file_in2 " +$srun $file_in3 + +" + +# +# Build input script file3 +# +make_bash_script $file_in3 " +$srun sleep 10 + +" + +# +# Spawn a job via srun using this account +# +set job_id3 0 +spawn $sbatch -N1 -v --account=$test_acct $file_in1 +expect { + -re "Submitted batch job ($number)" { + set job_id3 $expect_out(1,string) + send_user "\nFOUND JobID to be $job_id3\n" + exp_continue + } + timeout { + send_user "\nFAILURE: sbatch not responding\n" + set exit_code 1 + } + eof { + wait + } +} +if {$job_id3 == 0} { + send_user "\nFAILURE: did not get srun job_id3\n" + set exit_code 1 +} else { + set matches 0 + spawn $scontrol show job $job_id3 + expect { + -re "Account=$test_acct" { + incr matches + exp_continue + } + timeout { + send_user "\nFAILURE: scontrol not responding\n" + set exit_code 1 + } + eof { + wait + } + } + if {$matches != 1} { + send_user "\nFAILURE: srun failed to use specified account\n" + set exit_code 1 + } +} + +# +# Wait for job to start running, then signal it +# +if {[wait_for_job $job_id3 "RUNNING"] != 0} { + send_user "\nFAILURE: waiting for job to start running\n" + exit 1 +} +################################################################ +# +# Proc: sstat_job +# +# Purpose: Pass sstat options and test +# +# Returns: Number of matches. +# +# Input: Switch options not requiring arguments +# +################################################################ + +proc sstat_job { soption job_id} { + global sstat + set debug 0 + set exit_code 0 + set matches 0 + set not_support 0 + send_user "sstat -$soption -j $job_id\n" + + if { $soption == "-allsteps" || $soption == "a" } { + + spawn $sstat -$soption -j $job_id + expect { + -re "SLURM accounting storage is disabled" { + set not_support 1 + exp_continue + } + -re "$job_id.0" { + if {$debug} {send_user "\nmatch1\n"} + incr matches + exp_continue + } + -re "$job_id.1" { + if {$debug} {send_user "\nmatch2\n"} + incr matches + exp_continue + } + -re "$job_id.2" { + if {$debug} {send_user "\nmatch3\n"} + incr matches + exp_continue + } + timeout { + send_user "\nFAILURE: sstat not responding\n" + set exit_code 1 + } + eof { + wait + } + } + + if {$not_support != 0} { + send_user "\nWARNING: can not test without accounting enabled\n" + exit 0 + } + if {$matches != 3} { + send_user "\nFAILURE: sstat -$soption failed ($matches)\n" + set exit_code 1 + } + return $matches +} + + if { $soption == "-noheader" || $soption == "n" } { + + spawn $sstat -$soption -j $job_id + expect { + -re "SLURM accounting storage is disabled" { + set not_support 1 + exp_continue + } + -re "JobID|MaxVMSize|MaxVMSizeNode|MaxVMSizeTask| \ + AveVMSize|MaxRSS|MaxRSSNode|MaxRSSTask|AveRSS| \ + MaxPages|MaxPagesNode|MaxPagesTask|AvePages| \ + MinCPU|MinCPUNode|MinCPUTask|AveCPU|NTasks" { + if {$debug} {send_user "\nmatch4\n"} + incr matches + exp_continue + } + -re "$job_id" { + if {$debug} {send_user "\nmatch5\n"} + incr matches + exp_continue + } + timeout { + send_user "\nFAILURE: sstat not responding\n" + set exit_code 1 + } + eof { + wait + } + } + + if {$not_support != 0} { + send_user "\nWARNING: can not test without accounting enabled\n" + exit 0 + } + if {$matches != 1} { + send_user "\nFAILURE: sstat -$soption failed ($matches)\n" + set exit_code 1 + } + return $matches +} + + if { $soption == "-parsable" || $soption == "p" } { + + spawn $sstat -$soption -j $job_id + expect { + -re "SLURM accounting storage is disabled" { + set not_support 1 + exp_continue + } + -re "JobID\\|MaxVMSize\\|MaxVMSizeNode\\|MaxVMSizeTask\\|AveVMSize\\|MaxRSS\\|" { + if {$debug} {send_user "\nmatch6\n"} + incr matches + exp_continue + } + -re "MaxRSSNode\\|MaxRSSTask\\|AveRSS\\|MaxPages\\|MaxPagesNode\\|MaxPagesTask\\|" { + if {$debug} {send_user "\nmatch7\n"} + incr matches + exp_continue + } + -re "AvePages\\|MinCPU\\|MinCPUNode\\|MinCPUTask\\|AveCPU\\|NTasks\\|" { + if {$debug} {send_user "\nmatch8\n"} + incr matches + exp_continue + } + -re "$job_id..\\|" { + if {$debug} {send_user "\nmatch9\n"} + incr matches + exp_continue + } + timeout { + send_user "\nFAILURE: sstat not responding\n" + set exit_code 1 + } + eof { + wait + } + } + + if {$not_support != 0} { + send_user "\nWARNING: can not test without accounting enabled\n" + exit 0 + } + if {$matches != 4} { + send_user "\nFAILURE: sstat -$soption failed ($matches)\n" + set exit_code 1 + } + return $matches +} + + if { $soption == "-parsable2" || $soption == "P" } { + + spawn $sstat -$soption -j $job_id + expect { + -re "SLURM accounting storage is disabled" { + set not_support 1 + exp_continue + } + -re "JobID\\|MaxVMSize\\|MaxVMSizeNode\\|MaxVMSizeTask\\|AveVMSize\\|MaxRSS\\|" { + if {$debug} {send_user "\nmatch10\n"} + incr matches + exp_continue + } + -re "MaxRSSNode\\|MaxRSSTask\\|AveRSS\\|MaxPages\\|MaxPagesNode\\|MaxPagesTask\\|" { + if {$debug} {send_user "\nmatch11\n"} + incr matches + exp_continue + } + -re "AvePages\\|MinCPU\\|MinCPUNode\\|MinCPUTask\\|AveCPU\\|NTasks" { + if {$debug} {send_user "\nmatch12\n"} + incr matches + exp_continue + } + -re "$job_id..\\|" { + if {$debug} {send_user "\nmatch13\n"} + incr matches + exp_continue + } + timeout { + send_user "\nFAILURE: sstat not responding\n" + set exit_code 1 + } + eof { + wait + } + } + + if {$not_support != 0} { + send_user "\nWARNING: can not test without accounting enabled\n" + exit 0 + } + if {$matches != 4} { + send_user "\nFAILURE: sstat -$soption failed ($matches)\n" + set exit_code 1 + } + return $matches + } + + if { $soption == "-verbose" || $soption == "v" } { + + spawn $sstat -$soption -j $job_id + expect { + -re "SLURM accounting storage is disabled" { + set not_support 1 + exp_continue + } + -re "JobID......MaxVMSize..MaxVMSizeNode..MaxVMSizeTask..AveVMSize..MaxRSS" { + if {$debug} {send_user "\nmatch14\n"} + incr matches + exp_continue + } + -re "MaxRSSNode.MaxRSSTask.AveRSS.....MaxPages.MaxPagesNode.MaxPagesTask" { + if {$debug} {send_user "\nmatch15\n"} + incr matches + exp_continue + } + -re "AvePages...MinCPU.....MinCPUNode.MinCPUTask.AveCPU.....NTasks" { + if {$debug} {send_user "\nmatch16\n"} + incr matches + exp_continue + } + -re "$job_id" { + if {$debug} {send_user "\nmatch17\n"} + incr matches + exp_continue + } + timeout { + send_user "\nFAILURE: sstat not responding\n" + set exit_code 1 + } + eof { + wait + } + } + + if {$not_support != 0} { + send_user "\nWARNING: can not test without accounting enabled\n" + exit 0 + } + if {$matches != 4} { + send_user "\nFAILURE: sstat -$soption failed ($matches)\n" + set exit_code 1 + } + return $matches + } + + +} + +################################################################ +# +# Proc: sstat_vargs +# +# Purpose: Pass sstat options with arguments and test +# +# Returns: Number of matches. +# +# Input: Switch options with argument +# +################################################################ + +proc sstat_vargs { soption vargs job_id} { + global sstat + set debug 0 + set exit_code 0 + set matches 0 + set not_support 0 + send_user "sstat -$soption $vargs -j $job_id\n" + + if { $soption == "o" || $soption == "-format" } { + + spawn $sstat -$soption $vargs -j $job_id + expect { + -re "SLURM accounting storage is disabled" { + set not_support 1 + exp_continue + } + -re "AveCPU.....AvePages...AveRSS.....AveVMSize" { + if {$debug} {send_user "\nmatch18\n"} + incr matches + exp_continue + } + -re "JobID......MaxPages.MaxPagesNode.MaxPagesTask" { + if {$debug} {send_user "\nmatch19\n"} + incr matches + exp_continue + } + -re "MaxRSS.....MaxRSSNode.MaxRSSTask.MaxVMSize" { + if {$debug} {send_user "\nmatch20\n"} + incr matches + exp_continue + } + -re "MaxVMSizeNode..MaxVMSizeTask..MinCPU.....MinCPUNode" { + if {$debug} {send_user "\nmatch21\n"} + incr matches + exp_continue + } + -re "MinCPUTask.NTasks...SystemCPU..TotalCPU" { + if {$debug} {send_user "\nmatch22\n"} + incr matches + exp_continue + } + -re "$job_id" { + if {$debug} {send_user "\nmatch23\n"} + incr matches + exp_continue + } + timeout { + send_user "\nFAILURE: sstat not responding\n" + set exit_code 1 + } + eof { + wait + } + } + + if {$not_support != 0} { + send_user "\nWARNING: can not test without accounting enabled\n" + exit 0 + } + if {$matches != 6} { + send_user "\nFAILURE: sstat -$soption failed ($matches)\n" + set exit_code 1 + } + return $matches + } +} +################################################################ +sleep 1 +set matches [sstat_job a $job_id3] +if {$matches != 3} { + send_user "\nFAILURE: sstat -a failed ($matches)\n" + set exit_code 1 +} + +set matches [sstat_job -allsteps $job_id3] +if {$matches != 3} { + send_user "\nFAILURE: sstat --allsteps failed ($matches)\n" + set exit_code 1 +} + +set matches [sstat_job n $job_id3] +if {$matches != 1} { + send_user "\nFAILURE: sstat -n failed ($matches)\n" + set exit_code 1 +} + +set matches [sstat_job -noheader $job_id3] +if {$matches != 1} { + send_user "\nFAILURE: sstat --noheader failed ($matches)\n" + set exit_code 1 +} + +set matches [sstat_job p $job_id3] +if {$matches != 4} { + send_user "\nFAILURE: sstat -p failed ($matches)\n" + set exit_code 1 +} + +set matches [sstat_job -parsable $job_id3] +if {$matches != 4} { + send_user "\nFAILURE: sstat --parsable failed ($matches)\n" + set exit_code 1 +} + +set matches [sstat_job P $job_id3] +if {$matches != 4} { + send_user "\nFAILURE: sstat -P failed ($matches)\n" + set exit_code 1 +} + +set matches [sstat_job -parsable2 $job_id3] +if {$matches != 4} { + send_user "\nFAILURE: sstat --parsable2 failed ($matches)\n" + set exit_code 1 +} + +set matches [sstat_job v $job_id3] +if {$matches != 4} { + send_user "\nFAILURE: sstat -v failed ($matches)\n" + set exit_code 1 +} + +set matches [sstat_job -verbose $job_id3] +if {$matches != 4} { + send_user "\nFAILURE: sstat --verbose failed ($matches)\n" + set exit_code 1 +} + +set matches [sstat_vargs o $ac,$ap,$ar,$av,$ji,$mp,$mpn,$mpt,$mr,$mrn,$mrt,$mvs,$mvn,$mvt,$mc,$mn,$mt,$nt,$sc,$tc $job_id3] +if {$matches != 6} { + send_user "\nFAILURE: sstat -o failed ($matches)\n" + set exit_code 1 +} + +set matches [sstat_vargs -format $ac,$ap,$ar,$av,$ji,$mp,$mpn,$mpt,$mr,$mrn,$mrt,$mvs,$mvn,$mvt,$mc,$mn,$mt,$nt,$sc,$tc $job_id3] +if {$matches != 6} { + send_user "\nFAILURE: sstat --format failed ($matches)\n" + set exit_code 1 +} + + +# +# Use sacctmgr to delete the test account +# +set damatches 0 +set sadel_pid [spawn $sacctmgr -i delete account $test_acct] +expect { + -re "Deleting account" { + incr damatches + exp_continue + } + timeout { + send_user "\nFAILURE: sacctmgr delete not responding\n" + slow_kill $sadel_pid + set exit_code 1 + } + eof { + wait + } +} +if {$damatches != 1} { + send_user "\nFAILURE: sacctmgr had a problem deleting account\n" + set exit_code 1 +} + +if {$exit_code == 0} { + exec $bin_rm -f $file_in1 $file_in2 $file_in3 + send_user "\nSUCCESS\n" +} +exit $exit_code -- GitLab