#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          strigger --set (node options)
############################################################################
# Copyright (C) 2007 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 file_in      "$test_dir/input"
set file_out     "$test_dir/output"

# 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"
}

exec $strigger --clear --quiet --user=$uid

#
# Build input script file
#
make_bash_script $file_in "$bin_echo DOWN >$file_out"

set disabled 0
set matches  0
spawn $strigger --set -v --down --program=$file_in
expect {
	-re "permission denied" {
		set disabled 1
		exp_continue
	}
	-re "trigger set" {
		incr matches
		exp_continue
	}
	timeout {
		fail "strigger not responding"
	}
	eof {
		wait
	}
}
if {$disabled == 1} {
	skip "Current configuration prevents setting triggers. Need to run as SlurmUser or make SlurmUser=root"
}
if {$matches == 0} {
	fail "Trigger creation failure"
}

set matches 0
spawn $strigger --get -v --down --user=$uid
expect {
	-re "$file_in" {
		incr matches
		exp_continue
	}
	timeout {
		fail "strigger not responding"
	}
	eof {
		wait
	}
}
if {$matches != 1} {
	fail "Trigger set or get failure"
}

spawn $strigger --clear -v --user=$uid
expect {
	timeout {
		fail "strigger not responding"
	}
	eof {
		wait
	}
}
