#!/usr/bin/expect
############################################################################
# Purpose: Test of SLURM functionality
#          Confirm that srun buffering can be disabled (--unbuffered option).
#
# Output:  "TEST: #.#" followed by "SUCCESS" if test was successful, OR
#          "FAILURE: ..." otherwise with an explanation of the failure, OR
#          anything else indicates a failure mode that must be investigated.
############################################################################
# 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 <http://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 test_id            "1.16"
set exit_code          0
set job_id             0
set matches            0
set scratch_file       "scratch.$test_id"

print_header $test_id

if {[test_alps]} {
        send_user "\nWARNING: This test is incompatible with Cray systems\n"
        exit $exit_code
}

#
# Create a scratch file
#
exec $bin_touch $scratch_file

#
# Submit a slurm job that will execute 'rm -i'
# The --unbuffered option will send the message which lacks a '\n'
#
set timeout $max_job_delay
set srun_pid [spawn $srun --unbuffered --verbose -t1 $bin_rm -f -i $scratch_file]
expect {
	-re "launching ($number).0 on host" {
		set job_id $expect_out(1,string)
		exp_continue
	}
	-re "\[Rr\]emove .*\?" {
		set matches 1
		send "y\r"
		exp_continue
	}
	timeout {
		send_user "\nFAILURE: srun not responding\n"
		slow_kill $srun_pid
		set exit_code 1
	}
	eof {
		wait
	}
}

#
# Confirm message send before '\n' (unbuffered).
#

if {$matches != 1} {
	send_user "\nFAILURE: srun --unbuffered option failure\n"
	exec $bin_rm -f $scratch_file
	set exit_code 1
}
if {$exit_code == 0} {
	send_user "\nSUCCESS\n"
}
exit $exit_code
