#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          to be called from test21.30
#          Tests if the GrpJob limit is enforced
############################################################################
# Copyright (C) SchedMD LLC.
#
# 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.
############################################################################

# Test GrpJob limits
proc inc21_30_3 { wait_reason } {
	global srun acct bin_sleep grjobs_num

	log_info "Starting $wait_reason test"
	set job_ids [list]
	set check_num $grjobs_num

	# Raise an error to abort the catch block
	set exception_code [catch {

		for {set inx 0} {$inx < $check_num} {incr inx} {
			lappend job_ids [submit_job -fail "--account=$acct -n1 -t1 -o none --wrap '$srun $bin_sleep 300'"]
		}

		foreach job_id $job_ids {
			subtest {![wait_for_job $job_id "RUNNING"]} "Job should run $wait_reason"
		}

		#AGIL:
		run_command "squeue"

		lappend job_ids [submit_job -fail "--account=$acct -n1 -t1 -o none --wrap '$srun $bin_sleep 300'"]
		subtest {![wait_job_reason [lindex $job_ids end] "PENDING" $wait_reason]} "Job should have pending reason $wait_reason"

	} message] ; # Store the error message in $message

	# Perform local cleanup
	cancel_job $job_ids

	# Convert any errors into failures (after cleaning up)
	if {$exception_code == 1} { ; # errors only
		fail "Failure testing $wait_reason: $message"
	}
}
