#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Check sinfo formatting options (--format option and SINFO_FORMAT
#          environment variable).
############################################################################
# Copyright (C) 2002 The Regents of the University of California.
# 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

set matches      0

#
# Check the sinfo format output via command line
#

# For some reason, quoting the format value breaks expect,
#  but this passes the entire format in a single argv entry
set format "--format=partition=%P node_cnt=%D"
spawn $sinfo --noheader $format
expect {
	-re "partition=($re_word_str).* node_cnt=($number)" {
		incr matches
		exp_continue
	}
	timeout {
		fail "sinfo not responding"
	}
	eof {
		wait
	}
}

subtest {$matches != 0} "Check the sinfo format output via command line"

#
# Check the sinfo format output via environment variable
#

set matches      0
set env(SINFO_FORMAT) "part=%P nodes=%D"
spawn $sinfo --noheader
expect {
	-re "part=($re_word_str).* nodes=($number)" {
		incr matches
		exp_continue
	}
	timeout {
		fail "sinfo not responding"
	}
	eof {
		wait
	}
}
unset env(SINFO_FORMAT)

subtest {$matches != 0} "Check the sinfo format output via environment variable"
