#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test of --partition and --verbose options.
############################################################################
# Copyright (C) 2002-2006 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 file_in     "$test_dir/input"
set job_id      0

proc cleanup {} {
	global job_id

	cancel_job $job_id
}

#
# Delete left-over stdin/out/err files
# Build stdin file
#
exec $bin_rm -f $file_in
make_bash_script $file_in "$bin_id"

#
# Test that sbatch prints "debug" messages with "-vvv" option
#
set debug  0
spawn $sbatch -N1 --output=none --error=none -t1 -vvv $file_in
expect {
	-re "debug:" {
		set debug 1
		exp_continue
	}
	-re "Submitted batch job ($number)" {
		set job_id $expect_out(1,string)
		exp_continue
	}
	timeout {
		fail "sbatch not responding"
	}
	eof {
		wait
	}
}
if {$job_id == 0} {
	fail "Failed to submit job"
}
subtest {$debug != 0} "Test that sbatch prints debug messages with -vvv option"
cancel_job $job_id

#
# Submit job to dummy partition name just to see that --partition gets
# processed
#
set job_id  0
set matches 0
spawn $sbatch -N1 --output=none --error=none -t1 -vv --partition=$test_id $file_in
expect {
	-re "partition *: $test_id" {
		incr matches
		exp_continue
	}
	-re "Invalid partition name" {
		incr matches
		log_debug "No worries, this error is expected"
		exp_continue
	}
	timeout {
		fail "sbatch not responding"
	}
	eof {
		wait
	}
}
subtest {$matches == 2} "Verify that partition name is set"
