#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Validates that strigger --noheader does not print header
############################################################################
# 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

set trigger_file_in   "$test_dir/trig_in"
set trigger_file_out  "$test_dir/trig_out"
set permission        0

#
# get my uid and clear any vestigial triggers
#
set uid [get_my_uid]
if {$uid == 0} {
	skip "This test can't be run as user root"
}

proc cleanup {} {
	global strigger uid

	run_command -none "$strigger --clear --quiet --user=$uid"
}

cleanup

#
# Build input script file
#
make_bash_script $trigger_file_in " $bin_echo Strigger has been triggered >$trigger_file_out"

set match 0
spawn $strigger --set -v --down --program=$trigger_file_in
expect {
	-re "permission denied" {
		set permission 1
		exp_continue
	}
	-re "trigger set" {
		incr match 1
		exp_continue
	}
	timeout {
		fail "strigger is not responding"
	}
	eof {
		wait
	}
}
if {$permission == 1} {
	skip "Current configuration prevents setting triggers. Need to run the tests as SlurmUser or make SlurmUser=root"
}
if {$match != 1} {
	fail "Trigger was not set"
}

set match 0
spawn $strigger --get
expect {
	-re "TRIG_ID" {
		set match 1
		exp_continue
	}
	timeout {
		fail "strigger is not responding"
	}
	eof {
		wait
	}
}
subtest {$match == 1} "Verify strigger displays headers by default"

set match 0
spawn $strigger --get --noheader
expect {
	-re "TRIG_ID" {
		set match 1
		exp_continue
	}
	timeout {
		fail "strigger is not responding"
	}
	eof {
		wait
	}
}
subtest {$match == 0} "Verify strigger does not display headers when using --noheader option"
