#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test of task signal abort message
############################################################################
# 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/job_script"
set test_prog      "$test_name.prog"

proc cleanup {} {
	global test_prog

	file delete $test_prog
}

#
# Delete left-over program and rebuild it
#
exec $bin_cc -o $test_prog ${test_prog}.c
exec $bin_chmod 700 $test_prog
make_bash_script $file_in "
./$test_prog
$bin_rm -f *${test_prog}*core /tmp/*${test_prog}*core core.*"

#
# Spawn program and check for task exit messages from srun
#
set matches 0
set timeout $max_job_delay
spawn $srun -n1 -t1 $file_in
expect {
	-re "Segmentation fault" {
		log_debug "This Seg Fault was expected, no worries"
		set matches 1
		exp_continue
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}
if {$matches != 1} {
	fail "srun failed to report exit code"
}
