#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          to be called from test3.11
#	   Create a reservation and update it in various ways
#
############################################################################
# Copyright (C) 2009 Lawrence Livermore National Security
# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
# Written by Dave Bremer <dbremer@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.
############################################################################

proc inc3_11_2 {} {
	global def_node user_name def_partition

	set res_name "resv3.11.2"

	# TEST 2

	log_info "+++++ STARTING TEST 2 +++++"
	set ret_code [create_res $res_name "StartTime=now+60minutes Duration=60 NodeCnt=1 User=$user_name"]
	if {$ret_code != 0} {
		fail "Unable to create a valid reservation"
	}

	set goodupdates "
	{PartitionName=$def_partition}
	{PartitionName=}
	{Duration=90}
	{StartTime=now+30minutes}
	{EndTime=now+60minutes Flags=Maint NodeCnt=1 Nodes=}
	{Nodes=$def_node}
"
	#	{Flags=Maint}
	#	{Flags=}

	if {$user_name != "root"} {
		lappend goodupdates {Users+=root} {Users-=root}
	}

	foreach test $goodupdates {
		subtest {[update_res $res_name $test] == 0} "Reservation update {$test} should succeed"
	}

	set ret_code [delete_res $res_name]
	if {$ret_code != 0} {
		fail "Unable to delete a reservation"
	}
}
