#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test buffered standard IO with really long lines
############################################################################
# Copyright (C) 2006 The Regents of the University of California.
# Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER).
# Written by Christopher J. Morrone <morrone2@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 file_out             "$test_dir/output"
set slurmstepd_cbuf_size 4096

set short_string "foo bar baz "
set count [expr $slurmstepd_cbuf_size / [string length $short_string] + 1]
set really_big_string [string repeat $short_string $count]
unset count
log_debug "Really_big_string is [string length $really_big_string] bytes"

#
# Create a test input file
#
set file [open $file_in "w"]
puts $file $really_big_string
for {set i 0} {$i < 100} {incr i} {
	puts $file $short_string
}
close $file

#
# Launch the test script
#
set timeout $max_job_delay
spawn $srun -v -n1 -t1 --input=$file_in --output=$file_out --error=- cat
expect {
	-re {launching ($number)\\.($number)} {
		set jobid $expect_out(1,string)
		set stepid $expect_out(2,string)
	}
	timeout {
		fail "srun launch failed"
    }
	eof {
		wait
	}
}

#
# Make sure that the contents of the input and output files are the same
#
if {[catch {exec diff $file_in $file_out}]} {
	fail "Output file ($file_out) does not match input file ($file_in)"
}
