#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Validates that strigger will not submit duplicate triggers
############################################################################
# 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 files
#
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 as SlurmUser or make SlurmUser=root"
}
if {$match != 1} {
	fail "Trigger was not set"
}

set match 0
spawn $strigger --set -v --down --program=$trigger_file_in
expect {
	-re "Duplicate event trigger" {
		log_debug "This error is expected"
		set match 1
		exp_continue
	}
	timeout {
		fail "strigger is not responding"
	}
	eof {
		wait
	}
}
subtest {$match == 1} "Validate that strigger will not submit duplicate triggers"
