#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test priorities assigned to jobs. Uses srun --hold and --batch options.
############################################################################
# Copyright (C) 2002 The Regents of the University of California.
# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
# Written by Morris Jette <jette1@llnl.gov>
# 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 job_id1              0
set job_id2              0
set job_id3              0
set prio1                -1
set prio2                -1
set prio3                -1
set multi                0

proc cleanup {} {
	global job_id1 job_id2 job_id3

	cancel_job [list $job_id1 $job_id2 $job_id3]
}

# expected outcome is different under multifactor rule
if {[get_config_param "PriorityType"] eq "priority/multifactor"} {
	set multi 1
}

#
# Spawn three sbatch job, one held
#
set job_id1 [submit_job -fail "-t1 --output=/dev/null --error=/dev/null --wrap='$bin_id'"]
set job_id2 [submit_job -fail "-t1 --output=/dev/null --error=/dev/null --wrap='$bin_id'"]
set job_id3 [submit_job -fail "-t1 --output=/dev/null --error=/dev/null --hold --wrap='$bin_id'"]

#
# Get priority of each job
#
set prio1 [get_job_param $job_id1 "Priority"]
set prio2 [get_job_param $job_id2 "Priority"]
set prio3 [get_job_param $job_id3 "Priority"]

#
# Confirm reasonable values for the job priorities
#
if {$multi} {
	subtest {$prio1 == $prio2} "Confirm reasonable values for the job priorities" "Job priorities are not same: $prio1 != $prio2"
} else {
	subtest {$prio1 > $prio2} "Confirm reasonable values for the job priorities" "Job priorities are not decreasing: $prio1 <= $prio2"
}
subtest {$prio3 == 0} "Held job should have zero priority" "Held job has non-zero priority: $prio3"
