blob: e322c09842a4e60dd0cca31af5154ce5035f5bd9 [file] [log] [blame]
#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
# Validates that sacctmgr show runawayjobs returns runawayjobs
############################################################################
# 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
source ./globals_accounting
set sql_query "$test_dir/query.sql"
set sql_query_rem "$test_dir/query-rem.sql"
set cluster [get_config_param "ClusterName"]
set account "$test_name\_acct"
set user "$test_name\_user"
# Account requirements
set acct_req(cluster) $cluster
# User requirements
set user_req(account) $account
set user_req(cluster) $cluster
if {[get_config_param "AccountingStorageType"] ne "accounting_storage/slurmdbd"} {
skip "This test can't be run without AccountStorageType=slurmdbd"
}
if {[get_admin_level] ne "Administrator"} {
skip "This test can't be run without being an Accounting administrator"
}
proc cleanup { } {
global cluster account user sql_query sql_query_rem
if {[file exists $sql_query_rem]} {
archive_load $sql_query_rem
}
remove_user "" "" $user
remove_acct "" $account
}
cleanup
# Make SQL file to remove the inserted job
set file [open $sql_query_rem "w"]
# This SQL statement is correct for our purposes (missing && in front of cluster)
puts $file "delete from job_table where alloc_nodes=\'test21.36_node\' cluster=\'$cluster\';"
close $file
# Add Test Account
if {[add_acct $account [array get acct_req]]} {
fail "Unable to add test account ($account)"
}
# Add Test User
if {[add_user $user [array get user_req]]} {
fail "Unable to add test user ($user)"
}
set assoc_id [get_assoc_id $user $account $cluster]
if {$assoc_id == -1} {
skip "Unable to find $user association"
}
# DON'T MESS WITH THIS UNLESS YOU REALLY UNDERSTAND WHAT YOU ARE DOING!!!!!
# THIS COULD SERIOUSLY MESS UP YOUR DATABASE IF YOU ALTER THIS INCORRECTLY
# JUST A FRIENDLY REMINDER ;)
# SINCE THIS TEST HAS TO PUT A JOB INTO THE ACTUAL CLUSTER INSTEAD
# OF A TEST CLUSTER THIS IS MORE IMPORTANT TO GET RIGHT.
# Insert a job that has no end time and is still in running state
set file [open $sql_query "w"]
puts $file "insert into job_table (jobid, associd, cluster, uid, gid, `partition`, account, eligible, submit, start, end, name, state, priority, tres_req, tres_alloc, nodelist, alloc_nodes, qos, deleted) values"
puts $file "('65536', '$assoc_id', '$cluster', '1002', '1002', 'debug', '$account', 1199170800, 1199170800, 1199170800, 0, 'test21.32_job1', '1', '2', '1=2,2=200,4=1', '1=2,2=200,4=1', 'test21.36_node', 'test21.36_node', '0', '0')"
puts $file "on duplicate key update id=LAST_INSERT_ID(id), eligible=VALUES(eligible), submit=VALUES(submit), start=VALUES(start), end=VALUES(end), associd=VALUES(associd), tres_alloc=VALUES(tres_alloc);"
close $file
# Load a job to the database that has no end time.
if {[archive_load $sql_query]} {
fail "Unable to load job to database"
}
# Test sacctmgr show runawayjobs
set output [run_command_output -fail "$sacctmgr show -i runawayjobs $cluster"]
subtest {[regexp "NOTE: Runaway jobs" $output]} "sacctmgr should detect runaway jobs"
# Check that jobs were fixed
set output [run_command_output -fail "$sacctmgr show -i runawayjobs $cluster"]
subtest {[regexp "No runaway jobs found" $output]} "sacctmgr should NOT detect runaway jobs"