#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test of --deadline option and time limit partition
############################################################################
# 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.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA.
############################################################################
source ./globals

set job_id         0
set part_name      "QA_TEST"

if {![is_super_user]} {
	skip "Can not test more unless SlurmUser or root"
}

proc cleanup {} {
	global job_id scontrol part_name

	cancel_job $job_id
	run_command "$scontrol delete PartitionName=$part_name"
}

#
# Start clean
#
cleanup

#
# Identify usable nodes in default partition
#
set def_node [lindex [get_nodes_by_state] 0]
if {$def_node eq ""} {
	fail "Default partition seems to have no nodes"
}

#
# Create a new partition
#
run_command -fail "$scontrol create PartitionName=$part_name Nodes=$def_node MaxTime=30"
if {![dict exists [get_partitions] $part_name]} {
	fail "Partition not created"
}

# Check EnforcePartLimits value
set enforcepartlimits [get_config_param "EnforcePartLimits"]
log_debug "EnforcePartLimits=$enforcepartlimits"

#
# Run a job in this new partition and validate the time limit
#
if {$enforcepartlimits eq "NO"} {
	#
	# Verify time limit
	#
	set job_id [submit_job -fail "--output=/dev/null --error=/dev/null -t100 --deadline now+3hour -p $part_name --wrap '$bin_hostname'"]
	subtest {![wait_job_reason $job_id "PENDING" "PartitionTimeLimit"]} "Verify job is PD due PartitionTimeLimit"
} else {
	#
	# Job should be rejected at submit time
	#
	set output [run_command_output -xfail "$sbatch --output=/dev/null --error=/dev/null -t100 --deadline now+3hour -p $part_name --wrap '$bin_hostname'"]
	subtest {![regexp "Submitted batch job ($number)" $output]} "Verify that submission is rejected"
	subtest {![regexp "unrecognized option '--deadline'" $output]} "Verify that --deadline is recognized"
	subtest {[regexp "Requested time limit is invalid \\(missing or exceeds some limit\\)" $output]} "Verify message about invalid time limit"
}
