#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test some invalid gres/mps job option
############################################################################
# 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.,
# 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA.
############################################################################
source ./globals

set nb_nodes [get_partition_param [default_partition] "TotalNodes"]

if {[llength [get_nodes_by_request "--gres=mps:100 -t1"]] == 0} {
	skip "This test requires being able to submit job with --gres=mps:100"
}

#
# Request both GPUs and MPS in single request
#
log_info "==== TEST 1 ===="
spawn $sbatch --gres=mps:1,gpu:1 -N1 --output=/dev/null -t1 --wrap $bin_hostname
expect {
	-re "Submitted batch job ($number)" {
		cancel_job $expect_out(1,string)
		fail "Batch request not rejected"
	}
	-re "error: " {
		log_debug "Error is expected, no worries"
		exp_continue
	}
	timeout {
		fail "sbatch not responding"
	}
	eof {
		wait
	}
}

#
# Request MPS plus GPU frequency
#
log_info "==== TEST 2 ===="
spawn $sbatch --gres=mps:1 --gpu-freq=high -N1 --output=/dev/null -t1 --wrap $bin_hostname
expect {
	-re "Submitted batch job ($number)" {
		cancel_job $expect_out(1,string)
		fail "Batch request not rejected"
	}
	-re "error: " {
		log_debug "Error is expected, no worries"
		exp_continue
	}
	timeout {
		fail "sbatch not responding"
	}
	eof {
		wait
	}
}

#
# Request MPS per job with node count > 1
# Request MPS per socket with socket count > 1
# Request MPS per task with task count > 1
#
# FIXME: Add these tests whenever tres-per-* options added
#	 The tests already exist in src/common/gres.c to reject such jobs
#
