#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test of srun --jobid option with an existing allocation
############################################################################
# Copyright (C) 2002-2006 The Regents of the University of California.
# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
# Written by Christopher J. Morrone <morrone2@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

proc cleanup {} {
	global job_id

	cancel_job $job_id
}

#
# Run an srun to grab a single node allocation, but not start any
# job steps.
#
set timeout $max_job_delay
spawn $salloc -v -N1 -n1 -t2 $bin_sleep 600
expect {
	-re "salloc: Granted job allocation ($number)" {
		set job_id $expect_out(1,string)
	}
	timeout {
		fail "srun failed to grab an allocation in a timely manner"
	}
}
if {$job_id == 0} {
	fail "srun failed to create an allocation"
}

#
# Now try to use the srun --jobid option to run in the already existing
# allocation.
#
set pattern "sdiouetj49udfj"

# give time for stepmgr to be created
sleep 1

set got_pattern 0
spawn $srun --jobid $job_id echo $pattern
expect {
	-re "error" {
		fail "Unexpected error occurred"
	}
 	-re $pattern {
		set got_pattern 1
		exp_continue
	}
	timeout {
		fail "srun timed out"
	}
	eof {
		wait
	}
}

subtest {$got_pattern != 0} "srun should run under existing job allocation"
