#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test of srun signal forwarding
#
# Note:    This script generates and then deletes files in the working directory
#          named test1.32.prog
############################################################################
# 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 file_prog   "$test_dir/prog"
set matches     0
set fini_cnt    0
set usr1cnt     0
set usr2cnt     0
set usr1target	1
set usr2target	1

#
# Delete left-over program and rebuild it
#
exec $bin_rm -f $file_prog
exec $bin_cc -O ${test_name}.prog.c -o $file_prog
exec $bin_chmod 700 $file_prog

#
# Get uid
#
set uid [get_my_uid]

#
# Spawn initial program via srun
# Note: For systems supporting proper pthreads, instead use
#       exec $bin_kill -USR1 $srun_pid, otherwise we need pkill
#       and can get multiple signals delivered
# Note: We send the signals right after task startup rather than
#	interspersed with messages because some versions of
#	Expect have difficulties handling unbuffered srun output
#
set timeout $max_job_delay
set srun_pid [spawn $srun -N1 -t1 --unbuffered $file_prog]
expect {
	-re "WAITING" {
		incr matches
		# sleep to make sure the process is actually running
		for {set inx 0} {$inx < $usr1target} {incr inx} {
			sleep 1
			exec $bin_kill -USR1 $srun_pid
		}
		log_debug "Sent signal USR1 $usr1target times"
		for {set inx 0} {$inx < $usr2target} {incr inx} {
			sleep 1
			exec $bin_kill -USR2 $srun_pid
		}
		log_debug "Sent signal USR2 $usr2target times"
		exp_continue
	}
	-re "SIGUSR($number)" {
		if {$expect_out(1,string) == 1} {
			set usr1cnt [expr $usr1cnt + 1]
		} else {
			set usr2cnt [expr $usr2cnt + 1]
		}
		exp_continue
	}
	-re "error.*not running" {
		log_debug "Don't worry about the error.."
		exp_continue
	}
	-re "FINI" {
		incr fini_cnt
		exp_continue
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		log_debug "EOF"
		wait
	}
}

subtest {$matches == 1} "srun initialized properly"
subtest {$usr1cnt == $usr1target} "$file_prog should receive $usr1target SIGUSR1" "but received $usr1cnt SIGUSR1"
subtest {$usr2cnt == $usr2target} "$file_prog should receive $usr2target SIGUSR2" "but received $usr2cnt SIGUSR2"
subtest {$fini_cnt == 1} "srun terminated properly"
