#!/usr/bin/env expect
############################################################################
# Purpose: Test that job arrays of hetjobs are rejected
############################################################################
# Copyright (C) SchedMD LLC.
# 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 matches	0
set het_job_id	0

proc cleanup {} {
	global het_job_id

	cancel_job $het_job_id
}

if {[get_config_param "SchedulerType"] ne "sched/backfill"} {
	skip "This test requires SchedulerType = sched/backfill"
}

spawn $sbatch -a 0-1 -t1 -N1 -o /dev/null : -N1 --wrap "date"
expect {
	-re "Submitted batch job ($number)" {
		set het_job_id $expect_out(1,string)
		exp_continue
	}
	-re "Invalid job array" {
		incr matches
		exp_continue
	}
	timeout {
		fail "sbatch not responding"
	}
	eof {
		wait
	}
}
if {$het_job_id != 0} {
	fail "Heterogeneous job array should not be accepted"
} elseif {$matches != 1} {
	fail "Heterogeneous job array should not be accepted ($matches != 1)"
} else {
	log_debug "No worries. This error is expected"
}
