| #!/usr/bin/env expect |
| ############################################################################ |
| # Purpose: Test of Slurm functionality |
| # Validate that sinfo -O (--Format) option displays the |
| # correct user specified values. |
| ############################################################################ |
| # 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 test_acct "${test_name}_acct" |
| set test_part "${test_name}_part" |
| set test_node [lindex [get_nodes_by_state] 0] |
| |
| array set node_sinfo_vals { } |
| array set part_sinfo_vals { } |
| |
| array set node_info { |
| AllocMem allocmem |
| CPUTot cpus |
| CPULoad cpusload |
| CoresPerSocket cores |
| TmpDisk disk |
| AvailableFeatures features |
| FreeMem freemem |
| Gres gres |
| NodeAddr nodeaddr |
| NodeHostName nodehost |
| RealMemory memory |
| State statecomplete |
| Sockets sockets |
| ThreadsPerCore threads |
| Version version |
| Weight weight |
| } |
| |
| array set part_info { |
| State available |
| MaxCPUsPerNode maxcpuspernode |
| Nodes nodelist |
| TotalNodes nodes |
| PreemptMode preemptmode |
| PriorityJobFactor priorityjobfactor |
| PriorityTier prioritytier |
| OverSubscribe oversubscribe |
| RootOnly root |
| } |
| |
| if {![is_super_user]} { |
| skip "This test can't be run without being a super user of the cluster" |
| } |
| |
| proc cleanup { } { |
| global scontrol test_part |
| |
| run_command "$scontrol delete partitionname=$test_part" |
| } |
| |
| log_info "=== Testing Node Information ===" |
| set nodes_dict [get_nodes $test_node] |
| foreach option [array names node_info] { |
| set node_sinfo_vals($node_info($option)) [dict get $nodes_dict $test_node $option] |
| } |
| |
| foreach option [array names node_sinfo_vals] { |
| # Gres option (and potentially others) may include "(" and ")" as |
| # characters, they need to be escaped to be used as part of a regexp |
| set val_re [string map {\( \\( \) \\) \+ \\+} $node_sinfo_vals($option)] |
| |
| set output [string trim [run_command_output -fail "$sinfo -n$test_node -O$option:256 -h"]] |
| if {$option eq "cpusload" || $option eq "freemem"} { |
| # CPULoad and FreeMem can change from one system call to another |
| subtest [regexp {\d+(?:\.\d+)?} $output] "Verify node $option field" "Expected a number but observed $output" |
| } else { |
| subtest [regexp -nocase $val_re $output] "Verify node $option field" "Expected $val_re but observed $output" |
| } |
| } |
| |
| # |
| # Add test partition |
| # |
| run_command -fail "$scontrol create partitionname=$test_part nodes=$test_node" |
| set output [run_command_output -fail "$scontrol show partitionname=$test_part"] |
| if {![regexp "PartitionName=$test_part" $output]} { |
| fail "Test partition was not created" |
| } |
| |
| log_info "=== Testing Partition Information ===" |
| set parts_dict [get_partitions $test_part] |
| foreach option [array names part_info] { |
| set part_sinfo_vals($part_info($option)) [dict get $parts_dict $test_part $option] |
| } |
| |
| foreach option [array names part_sinfo_vals] { |
| set output [string trim [run_command_output -fail "$sinfo -p$test_part -O$option -h"]] |
| subtest [regexp -nocase $part_sinfo_vals($option) $output] "Verify partition $option field" "Expected $part_sinfo_vals($option) but observed $output" |
| } |