#!/usr/bin/expect
############################################################################
# Purpose: Test of SLURM functionality
#          Test sbcast logging (--verbose 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) 2006 The Regents of the University of California.
# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
# Written by Morris Jette <jette1@llnl.gov>
# UCRL-CODE-226842.
# 
# This file is part of SLURM, a resource management program.
# For details, see <http://www.llnl.gov/linux/slurm/>.
#  
# 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     "14.6"
set file_in     "test$test_id.input"
set file_out    "test$test_id.output"
set file_err    "test$test_id.error"

set exit_code            0
set job_id               0

print_header $test_id

if {[test_front_end] != 0} {
	send_user "\nWARNING: This test is incompatable with front-end systems\n"
	exit 0
}

# Delete left-over stdout/err files
file delete $file_out $file_err

#
# Build input script file that broacasts a file
#
set pid         [pid]
set file1       "/tmp/test.$pid.1.$test_id"
make_bash_script $file_in "
  $srun $bin_rm -f $file1
  $sbcast -vvvv $sbcast $file1
  $srun $bin_rm -f $file1
"

#
# Spawn a srun batch job that uses stdout/err and confirm their contents
#
set timeout $max_job_delay
set srun_pid [spawn $srun -N1-1 --batch --output=$file_out --error=$file_err -t1 $file_in]
expect {
	-re "jobid ($number) submitted" {
		set job_id $expect_out(1,string)
		exp_continue
	}
	timeout {
		send_user "\nFAILURE: srun not responding\n"
		slow_kill $srun_pid
		set exit_code 1
	}
	eof {
		wait
	}
}

if {$job_id == 0} {
	send_user "\nFAILURE: batch submit failure\n"
	exit 1
}

#
# Wait for job to complete and check output file
#
if {[wait_for_job $job_id "DONE"] != 0} {
	send_user "\nFAILURE: waiting for job to complete\n"
	set exit_code 1
}

set matches 0
if {[wait_for_file $file_err] == 0} {
	spawn $bin_cat $file_err
	expect {
		-re "force" {
			incr matches
			exp_continue
		}
		-re "preserve" {
			incr matches
			exp_continue
		}
		-re "modes" {
			incr matches
			exp_continue
		}
		-re "jobid" {
			incr matches
			exp_continue
		}
		eof {
			wait
		}
	}
}
if {$matches != 4} {
	send_user "\nFAILURE: sbcast --verbose option did not produced expected logging\n"
	set exit_code 1
}

if {$exit_code == 0} {
	exec $bin_rm -f $file_in $file_out $file_err
	send_user "\nSUCCESS\n"
}
exit $exit_code
