#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test srun handling of SIGINT to get task status or kill the job
#          (--quit-on-interrupt option).
############################################################################
# Copyright (C) 2002-2007 The Regents of the University of California.
# Copyright (C) 2008 Lawrence Livermore National Security.
# 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 step_id     0
set job_id      0

proc cleanup {} {
	global job_id

	cancel_job $job_id
}

#
# Build input script file
#
make_bash_script $file_in "
  trap \"\" INT
  $bin_echo WAITING
  $bin_sleep 1000
"

#
# Get uid
#
set uid [get_my_uid]

#
# Spawn initial program via srun and use SIGINT to status
# Note: For systems supporting proper pthreads use
#       exec $bin_kill -INT $srun_pid
#	otherwise use
#	exec $bin_pkill -INT -n -u $uid srun
#
set timeout $max_job_delay
set match_int  0
set match_term 0
set match_wait 0
set srun_pid [spawn $srun -v -N1 -t1 --unbuffered $file_in]
expect {
	-re "launching StepId=($number)\\.$step_id" {
		set job_id $expect_out(1,string)
		exp_continue
	}
	-re "WAITING" {
		set match_wait 1
		# make sure the task gets started
		sleep 1
		exec $bin_kill -INT $srun_pid
		exp_continue
	}
	-re "srun: interrupt" {
		set match_int 1
		cancel_job $job_id
		exp_continue
	}
	-re "Job step aborted" {
		set match_term 1
		exp_continue
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}
subtest {[expr $match_wait + $match_int + $match_term] == 3} "srun should properly process SIGINT" "$match_wait + $match_int + $match_term != 3"
log_debug "So far, so good"

#
# Spawn initial program via srun and use SIGINT to kill
# Note: For systems supporting proper pthreads, instead use
#       exec $bin_kill -INT $srun_pid
#
set match_int  0
set match_term 0
set match_wait 0
set job_id  0
set srun_pid [spawn $srun -v -N1 -t1 --unbuffered --quit-on-interrupt $file_in]
expect {
	-re "launching StepId=($number)\\.$step_id" {
		set job_id $expect_out(1,string)
		exp_continue
	}
	-re "WAITING" {
		set match_wait 1
		exec $bin_kill -INT $srun_pid
		exp_continue
	}
	-re "srun: interrupt" {
		set match_int 1
		exp_continue
	}
	-re "srun: task 0: running" {
		set match_int 1
		exp_continue
	}
	-re "srun: sending Ctrl-C" {
		set match_term 1
		exp_continue
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}

subtest {[expr $match_wait + $match_int + $match_term] == 2} "srun should process SIGINT properly" "$match_wait + $match_int + $match_term != 2"
subtest {$match_int == 0} "srun should process SIGINT properly" "$match_int != 0"
