#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Validate scontrol show commands for configuration, daemons,
#          nodes and partitions.
############################################################################
# Copyright (C) 2002-2007 The Regents of the University of California.
# Copyright (C) 2008-2011 Lawrence Livermore National Security.
# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
# Written by Morris Jette <jette1@llnl.gov>
# CODE-OCEC-09-009. All rights reserved.
#
# 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

#
# Report the slurm configuration
#
set matches     0
spawn $scontrol show config
expect {
	-re "SlurmctldPort" {
		incr matches
		exp_continue
	}
	-re "SlurmdPort" {
		incr matches
		exp_continue
	}
	-re "SLURM_CONF" {
		incr matches
		exp_continue
	}
	timeout {
		fail "scontrol not responding"
	}
	eof {
		wait
	}
}

subtest {$matches >= 2} "Verify output for scontrol show config"
if {$matches == 2} {
	log_warn "It appears you are running with multiple slurmds"
}

#
# Report all slurm partitions
#
set matches     0
set part_name   ""
spawn $scontrol show partition
expect {
	-re "PartitionName=($re_word_str)" {
		set part_name $expect_out(1,string)
		incr matches
		exp_continue
	}
	timeout {
		fail "scontrol not responding"
	}
	eof {
		wait
	}
}
subtest {$matches >= 1} "Verify scontrol show partition"

#
# Report one slurm partition
#
set matches     0
spawn $scontrol show partition $part_name
expect {
	-re "PartitionName=($re_word_str)" {
		if {$expect_out(1,string) eq $part_name} {
			incr matches
		}
		exp_continue
	}
	timeout {
		fail "scontrol not responding"
	}
	eof {
		wait
	}
}
subtest {$matches == 1} "Verify scontrol show partition by name"

#
# Report all slurm nodes
#
set matches     0
set node_name   ""
spawn $scontrol show node
expect {
	-re "NodeName=($re_word_str)" {
		set node_name $expect_out(1,string)
		incr matches
		exp_continue
	}
	timeout {
		fail "scontrol not responding"
	}
	eof {
		wait
	}
}
subtest {$matches >= 1} "Verify scontrol show node"

#
# Report one slurm node
#
set matches     0
spawn $scontrol show node $node_name
expect {
	-re "NodeName=($re_word_str)" {
		if {$expect_out(1,string) eq $node_name} {
			incr matches
		}
		exp_continue
	}
	timeout {
		fail "scontrol not responding"
	}
	eof {
		wait
	}
}
subtest {$matches == 1} "Verify scontrol show node by name"

#
# Report slurm daemons on this node (assuming we are on SlurmctldHost)
#
set matches     0
spawn $scontrol show daemons
expect {
	-re "slurmctld" {
		incr matches
		exp_continue
	}
	timeout {
		fail "scontrol not responding"
	}
	eof {
		wait
	}
}
subtest {$matches == 1} "Verify scontrol show daemons"
