| #!/usr/bin/env expect |
| ############################################################################ |
| # Purpose: Test of Slurm functionality |
| # Test for seff |
| ############################################################################ |
| # 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 |
| |
| if {[file executable $seff] == 0} { |
| skip "seff was not found" |
| } |
| |
| set out [run_command_output -fail -xfail "$seff -h"] |
| subtest {[regexp "Usage:" $out]} "seff -h should return Usage:" |
| |
| set job_id [submit_job -fail "-H --wrap=\"sleep 10\" -o /dev/null -e /dev/null"] |
| wait_for_command_match "$sacct -n -j $job_id" "PENDING" |
| set out [run_command_output -fail "$seff $job_id" ] |
| subtest {[regexp "State: PENDING" $out]} "Job should be returned as in PENDING state by seff" |
| subtest {[regexp "Cores: 1" $out]} "Job should be reported as 1 core" |
| subtest {[regexp "Efficiency not available for jobs in the PENDING state." $out]} "Job should be reported as efficiency not available for PENDING state" |
| |
| run_command -fail "$scontrol release $job_id" |
| wait_for_command_match "$sacct -X -n -j $job_id" "RUNNING" |
| |
| set out [run_command_output -fail "$seff $job_id"] |
| subtest {[regexp "State: RUNNING" $out]} "Job should be reported as RUNNING by seff" |
| subtest {[regexp "WARNING: Efficiency statistics can only be obtained after the job has ended as seff tool is based on the accounting database data." $out]} "seff output should contain warning about statistics for RUNNING job" |
| |
| wait_for_command_match "$sacct -X -n -j $job_id" "COMPLETED" |
| set out [run_command_output -fail "$seff $job_id"] |
| subtest {[regexp "State: COMPLETED" $out]} "Job should be reported as COMPLETED by seff" |
| subtest {[regexp "Cores: \(\\d+\)" $out {} cores] || \ |
| [regexp "Cores per node: \(\\d+\)" $out {} cores]} "seff should report the number of cores (per node) based on the configuration" |
| |
| regexp "Job Wall-clock time: 00:00:\(\\d+\)" $out {} wall_clock_time |
| subtest {[tolerance 10 $wall_clock_time +7]} "Wall time should be close to 10s" "${wall_clock_time}s not in tolerance range of 10s" |
| set cpu_s [expr $cores * $wall_clock_time] |
| set cpu_d [expr int(floor($cpu_s / (24*60))) ] |
| set cpu_s [expr $cpu_s - ($cpu_d*24*60) ] |
| set cpu_h [expr int(floor($cpu_s / 60)) ] |
| set cpu_s [expr $cpu_s - ($cpu_h*60) ] |
| set cpu_time_str [format "%02d:%02d:%02d" $cpu_d $cpu_h $cpu_s] |
| subtest {[regexp -line "CPU Efficiency: 0.00% of $cpu_time_str core-walltime" $out]} "Job efficiency should be 0.00% of core-walltime" "$cpu_time_str|$out" |