#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Check sinfo output without header (--noheader option).
############################################################################
# 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

#
# Look for header or underline
#

spawn $sinfo --noheader
expect {
	-re "PARTITION" {
		incr matches
		exp_continue
	}
	-re "Unable to contact" {
		fail "Slurm appears to be down"
	}
	timeout {
		fail "sinfo not responding"
	}
	eof {
		wait
	}
}

subtest {$matches == 0} "Look for header or underline with --noheader"

#
# Look for header or underline
#

spawn $sinfo --noheader --Node
expect {
	-re "PARTITION" {
		incr matches
		exp_continue
	}
	-re "Unable to contact" {
		fail "Slurm appears to be down"
	}
	timeout {
		fail "sinfo not responding"
	}
	eof {
		wait
	}
}

subtest {$matches == 0} "Look for header or underline with --noheader --Node"

#
# Look for header or underline
#

spawn $sinfo --noheader --summarize
expect {
	-re "PARTITION" {
		incr matches
		exp_continue
	}
	-re "Unable to contact" {
		fail "Slurm appears to be down"
	}
	timeout {
		fail "sinfo not responding"
	}
	eof {
		wait
	}
}

subtest {$matches == 0} "Look for header or underline with --noheader --summarize"
