#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test of maximum running task count in a job array.
############################################################################
# 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.
############################################################################
source ./globals

set array_size    4
set file_script   "$test_dir/script"
set job_id        0
set array_in      2

if {[get_config_param "MaxArraySize"] < [expr $array_size + 1]} {
	skip "MaxArraySize is too small"
}

proc cleanup {} {
	global job_id

	cancel_job $job_id
}

# Submit a job array with 4 elements
make_bash_script $file_script "sleep 20"

spawn $sbatch -N1 --array=0-[expr $array_size -1]%2 --output=/dev/null -t1 $file_script
expect {
	-re "Submitted batch job ($number)" {
		set job_id $expect_out(1,string)
		exp_continue
	}
	-re "error" {
		fail "sbatch did not submit jobs"
	}
	timeout {
		fail "sbatch not responding"
	}
	eof {
		wait
	}
}
if {$job_id == 0} {
	fail "sbatch did not submit jobs"
}

wait_for_job -fail ${job_id}_0 "RUNNING"

set inx 0
while { $inx < 10 } {
	sleep 9
	set run_count 0
	spawn $scontrol show job $job_id
	expect {
		-re "RUNNING" {
			incr run_count
			exp_continue
		}
		timeout {
			fail "scontrol not responding"
		}
		eof {
			wait
		}
	}
	if {$run_count > 2} {
		fail "Too many tasks in the job array are running ($run_count > 2)"
	}
	log_debug "+++ $run_count running tasks +++"
	if {$run_count == 0} {
		break
	}
	incr inx
}
