#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test of --deadline option and no time
############################################################################
# Copyright (C) 2015 CEA/DAM/DIF
# Written by Aline Roy <aline.roy@cea.fr>
#
# 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.,
# 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
############################################################################
source ./globals

set job_id      0

set default_time [get_partition_default_time_limit]
if { $default_time != -1} {
	skip "This test is not compatible with default partition having a default time limit ($default_time)"
}

#
# Spawn a batch job with a deadline and no time
#
set timeout $max_job_delay
spawn $salloc -N1 --deadline now+600 $bin_sleep 1
expect {
	-re "Requested time limit is invalid (missing or exceeds some limit)" {
		fail "Requested time limit is invalid (missing or exceeds some limit)"
	}
	-re "Granted job allocation ($number)" {
		set job_id $expect_out(1,string)
		exp_continue
	}

	timeout {
		fail "salloc not responding"
	}
	eof {
		wait
	}
}

if {$job_id == 0} {
	fail "Batch not submitted"
}

if {$job_id != 0} {
	spawn $scontrol show job $job_id
	expect {
		-re "TimeLimit=00:10:00" {
			log_debug "Timelimit OK"
		}
		-re "TimeLimit=00:09:" {
			log_debug "Timelimit OK"
		}
		-re "TimeLimit=" {
			fail "Timelimit not OK with deadline"
		}
		timeout {
			fail "scontrol not responding"
		}
		eof {
			wait
		}
	}
}
