#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test of srun --disable-status/-X option, SIGINT to be sent to tasks.
############################################################################
# Copyright (C) 2002-2007 The Regents of the University of California.
# Copyright (C) 2008-2010 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_prog   "$test_name.prog"
set job_id  0
set prefix "TEST_PROCESS"

proc cleanup {} {
	global file_prog job_id

	cancel_job $job_id
	file delete $file_prog
}

#
# We use our own program to get ulimit values since the output
# of the ulimit program is inconsistent across systems.
#
run_command -fail "$bin_cc -O ${file_prog}.c -o $file_prog"
run_command -fail "$bin_chmod 700 $file_prog"

# Submit srun job to send SIGINTs to verify correct behavior
set timeout $max_job_delay
set srun_pid [spawn $srun -v -N1 -t1 -X ./$file_prog]

# Get job_id and wait until signal handlers are ready
expect {
	-re "launching ($number)\\.0" {
		set job_id $expect_out(1,string)
		exp_continue
	}
	-re "${prefix}: Signal handler ready" {
		log_debug "Process is ready to receive signals"
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		fail "srun finished unexpectedly"
	}
}

# Send a single SIGINT
run_command -fail "$bin_kill -INT $srun_pid"
expect {
	-re "${prefix}: Signal received" {
		subpass "Verify process received a single SIGINT"
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		fail "srun finished unexpectedly"
	}
}

subpass "Verify job did not terminate with a single SIGINT"

log_info "Waiting to avoid two conscutive SIGINTs"
sleep 2

# Send two consecutive SIGINTs
# But wait until srun responds to the first one to avoid being "too consecutive".
run_command -fail "$bin_kill -INT $srun_pid"
expect {
	-re "srun: sending Ctrl-C to StepId" {
		subpass "Verify srun received the first of the consecutive SIGINTs"
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		fail "srun finished unexpectedly"
	}
}
run_command -fail "$bin_kill -INT $srun_pid"

# Validate that job is terminated
expect {
	-re "srun: forcing job termination" {
		subpass "Verify job is terminating after two consecutive SIGINTs"
		exp_continue
	}
	timeout {
		fail "srun didn't terminate properly"
	}
	eof {
		wait
	}
}
