#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Confirm that salloc exit code processing.
############################################################################
# Copyright (C) 2002-2006 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 job_id             0
set slurm_jobid        0

proc cleanup {} {
	global job_id

	cancel_job $job_id
}

#
# Submit a slurm allocate job
# Interactively print $SLURM_JOB_ID
#
set timeout $max_job_delay
set match 0
spawn $salloc -t1 $bin_bash
expect {
	-re "Granted job allocation ($number)" {
		set job_id $expect_out(1,string)
		send "$bin_echo MY_ID=\$SLURM_JOB_ID \r"
		array unset expect_out
		exp_continue
	}
	-re "MY_ID=($number)?" {
		foreach name [array names expect_out] {
			if {$name == "1,string"} {
				# SLURM_JOB_ID is set
				set slurm_jobid $expect_out(1,string)
				break
			}
		}
		send "exit 4\r"
		exp_continue
	}
	-re "\[Ee\]xit 4" {
		set match 1
		exp_continue
	}
	timeout {
		fail "salloc not responding"
	}
	eof {
		wait
	}
}


#
# Confirm the job_ids match.
#
if { $job_id == 0 } {
	fail "salloc failure"
} else {
	if { $job_id != $slurm_jobid } {
		fail "salloc failed to set valid SLURM_JOB_ID"
	}
}

#
# Confirm exit code is propagated
#
subtest { $match == 1 } "Confirm exit code is propagated"
