| #!/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" |