Skip to content
Snippets Groups Projects
Commit 07e0dcf9 authored by Morris Jette's avatar Morris Jette
Browse files

Add sacct test using node names

parent 6bf04fab
No related branches found
No related tags found
No related merge requests found
......@@ -248,6 +248,7 @@ EXTRA_DIST = \
test12.2 \
test12.2.prog.c \
test12.3 \
inc12.3.2 \
test12.4 \
test12.5 \
test13.1 \
......
......@@ -533,6 +533,7 @@ EXTRA_DIST = \
test12.2 \
test12.2.prog.c \
test12.3 \
inc12.3.2 \
test12.4 \
test12.5 \
test13.1 \
......
#!/usr/bin/expect
############################################################################
# Purpose: Test for accounting records of specific jobs on specific nodes
# This is a sub-test of test12.3
############################################################################
# Copyright (C) 2012 SchedMD LLC.
# Written by Nathan Yee <nyee32@schedmd.com>
#
# This file is part of SLURM, a resource management program.
# For details, see <http://www.schedmd.com/slurmdocs/>.
# 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
source ./globals_accounting
proc inc12_3_2 {job_id_1 job_id_2 job_name_1 job_name_2 test_acct job_1_node_0 job_1_node_2 job_2_node_1 job_2_node_2} {
global alpha_numeric_under sacct
global exit_code
send_user "\nSearch for jobs on node: $job_1_node_0\n"
set job_1_match 0
set job_2_match 0
spawn $sacct -A '$test_acct' -N$job_1_node_0
expect {
-re "$job_id_1" {
incr job_1_match
exp_continue
}
-re "$job_id_2" {
incr job_2_match
exp_continue
}
timeout {
send_user "\nFAILURE: sacct did not respond\n"
set exit_code 1
}
eof {
wait
}
}
if {$job_1_match != 1} {
send_user "\nFAILURE:sacct was unable to find the job $job_id_1 on node $job_1_node_0 ($job_1_match != 1)\n"
set exit_code 1
}
if {$job_2_match != 0} {
send_user "\nFAILURE:sacct was found job $job_id_2 on node $job_1_node_0 ($job_2_match != 0)\n"
set exit_code 1
}
send_user "\nSearch for jobs on node: $job_1_node_2\n"
set job_1_match 0
set job_2_match 0
spawn $sacct -A '$test_acct' -N$job_1_node_2
expect {
-re "$job_id_1" {
incr job_1_match
exp_continue
}
-re "$job_id_2" {
incr job_2_match
exp_continue
}
timeout {
send_user "\nFAILURE: sacct did not respond\n"
set exit_code 1
}
eof {
wait
}
}
if {$job_1_match != 1} {
send_user "\nFAILURE:sacct was unable to find the job $job_id_1 on node $job_1_node_2 ($job_1_match != 1)\n"
set exit_code 1
}
send_user "\nSearch for jobs on node: $job_2_node_1\n"
set job_1_match 0
set job_2_match 0
spawn $sacct -A '$test_acct' -N$job_2_node_1
expect {
-re "$job_id_1" {
incr job_1_match
exp_continue
}
-re "$job_id_2" {
incr job_2_match
exp_continue
}
timeout {
send_user "\nFAILURE: sacct did not respond\n"
set exit_code 1
}
eof {
wait
}
}
if {$job_2_match != 1} {
send_user "\nFAILURE:sacct was unable to find the job $job_id_2 on node $job_2_node_1 ($job_2_match != 1)\n"
set exit_code 1
}
send_user "\nSearch for jobs on node: $job_2_node_2\n"
set job_1_match 0
set job_2_match 0
spawn $sacct -A '$test_acct' -N$job_2_node_2
expect {
-re "$job_id_1" {
incr job_1_match
exp_continue
}
-re "$job_id_2" {
incr job_2_match
exp_continue
}
timeout {
send_user "\nFAILURE: sacct did not respond\n"
set exit_code 1
}
eof {
wait
}
}
if {$job_2_match != 1} {
send_user "\nFAILURE: sacct was unable to find the job $job_id_2 on node $job_2_node_2 ($job_2_match != 1)\n"
set exit_code 1
}
}
......@@ -34,13 +34,14 @@
############################################################################
source ./globals
source ./globals_accounting
source ./inc12.3.2
set test_id "12.3"
set exit_code 0
set file_in "test.$test_id.input"
set job_name_1 "JOB1"
set job_name_2 "JOB2"
set ta "slurm_test-account.1"
set file_in "test.$test_id.input"
set test_acct "slurm_test-account.1"
print_header $test_id
......@@ -49,15 +50,27 @@ print_header $test_id
#
if { [test_account_storage] == 0 } {
send_user "\nWARNING: This test can't be run without a usable AccountStorageType\n"
exit 0
exit $exit_code
}
if { [string compare [check_accounting_admin_level] "Administrator"] } {
send_user "\nWARNING: This test can't be run without being an Accounting administrator.\n"
send_user "Use sacctmgr mod user \$USER_NAME set admin=admin.\n"
exit 0
exit $exit_code
}
#
# Make sure we have enough nodes to test functionality
#
set partition [default_partition]
set node_count [get_node_cnt_in_part $partition]
if { $node_count < 3 } {
send_user "WARNING: system must have at least 3 \
nodes to run this test on. This system \
only has $node_count.\n"
exit $exit_code
}
#
# Identify the user and his current default account
#
......@@ -90,17 +103,17 @@ expect {
}
#
# Use sacctmgr to add an account
# Use sacctmgr to add a test account
#
set aamatches 0
set sadd_pid [spawn $sacctmgr -i add account $ta]
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 $ta found\n"
send_user "\nWARNING: vestigial account $test_acct found\n"
incr aamatches
exp_continue
}
......@@ -121,7 +134,7 @@ if {$aamatches != 1} {
#
# Add self to this new account
#
set sadd_pid [spawn $sacctmgr -i create user name=$user_name account=$ta]
set sadd_pid [spawn $sacctmgr -i create user name=$user_name account=$test_acct]
expect {
timeout {
send_user "\nFAILURE: sacctmgr add not responding\n"
......@@ -134,16 +147,18 @@ expect {
}
#
# Submit two slurm jobs that will execute 'id'
# Submit two slurm jobs to capture job info
#
set job_id_1 0
set job_1_node_inx 0
set timeout $max_job_delay
set srun_pid [spawn $srun -N1 -t1 -A $ta -J $job_name_1 -v $bin_id]
set srun_pid [spawn $srun -N2 -t1 -A $test_acct -J $job_name_1 -v $bin_id]
expect {
-re "launching ($number)" {
-re "launching ($number).0 on host ($alpha_numeric_under)," {
set job_id_1 $expect_out(1,string)
set job_1_node($job_1_node_inx) $expect_out(2,string)
incr job_1_node_inx
exp_continue
}
timeout {
send_user "\nFAILURE: srun not responding\n"
......@@ -154,15 +169,24 @@ expect {
wait
}
}
if {$job_1_node_inx != 2} {
send_user "\nFAILURE: srun host count bad ($job_1_node_inx != 2)\n"
exit 1
}
#
# Second job explicitly excludes node zero from previous job
#
set job_id_2 0
set timeout $max_job_delay
set srun_pid [spawn $srun -N1 -t1 -A $ta -J $job_name_2 -v $bin_id]
set job_2_node_inx 0
set srun_pid [spawn $srun -N2 -x $job_1_node(0) -t1 -A $test_acct -J $job_name_2 -v $bin_id]
expect {
-re "launching ($number)" {
-re "launching ($number).0 on host ($alpha_numeric_under)," {
set job_id_2 $expect_out(1,string)
set job_2_node($job_2_node_inx) $expect_out(2,string)
incr job_2_node_inx
exp_continue
}
timeout {
send_user "\nFAILURE: srun not responding\n"
......@@ -173,6 +197,10 @@ expect {
wait
}
}
if {$job_2_node_inx != 2} {
send_user "\nFAILURE: srun host count bad ($job_2_node_inx != 2)\n"
exit 1
}
#
# Wait for accounting data to be propagated to slurmdbd
......@@ -180,51 +208,15 @@ expect {
sleep 5
#
# Matches the job name with the job id
# Execute sub-tests based upon these jobs
#
set idmatch 0
send_user "\nJob id1 number: $job_id_1\n"
spawn $sacct -A '$ta' --name=$job_name_1 -p -o jobid
expect {
-re "$job_id_1" {
incr idmatch
exp_continue
}
timeout {
send_user "\nFAILURE: sacct not responding\n"
set exit_code 1
}
eof {
wait
}
}
send_user "\nJob id2 number: $job_id_2\n"
spawn $sacct -A '$ta' --name=$job_name_2 -p -o jobid
expect {
-re "$job_id_2" {
incr idmatch
exp_continue
}
timeout {
send_user "\nFAILURE: sacct not responding\n"
set exit_code 1
}
eof {
wait
}
}
if {$idmatch != 2} {
send_user "\nFAILURE: sacct could not match job id to job name\n"
set exit_code 1
}
inc12_3_2 $job_id_1 $job_id_2 $job_name_1 $job_name_2 $test_acct $job_1_node(0) $job_1_node(1) $job_2_node(0) $job_2_node(1)
#
# Use sacctmgr to delete the test account
#
set damatches 0
set sadel_pid [spawn $sacctmgr -i delete account $ta]
set sadel_pid [spawn $sacctmgr -i delete account $test_acct]
expect {
-re "Deleting account" {
incr damatches
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment