#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Confirm that srun stdin, stdout, and stderr options work (--input,
#          --output, and --error option respectively).
#
# Note:    This script generates and then deletes files in the working directory
#          named test1.8.input, test1.8.output, and test1.8.error
############################################################################
# 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 <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 file_err    "$test_dir/error"

set login_grp_info       [get_my_id]
set job_grp_info         ""
set got_job_grps         0
set got_login_grps       0
set got_sleep_err        0

#
# Delete left-over stdin/out/err files
# Build stdin file
#
exec echo "$bin_id"         >$file_in
exec echo "$bin_sleep aaa" >>$file_in
exec echo "exit 0"         >>$file_in
exec $bin_chmod 700 $file_in

proc test_srun_output {} {
	global file_out file_err bin_cat sleep_error_message login_grp_info

	#
	# Check user id and group id in stdout
	#
	wait_for_file -fail $file_out
	spawn $bin_cat $file_out
	expect {
		-re "(uid=.*\n)" {
			set job_grp_info $expect_out(1,string)
			set got_job_grps 1
			exp_continue
		}
		eof {
			wait
		}
	}
	subtest {$got_job_grps != 0} "User and group ID should be seen in stdout"
	subtest {$login_grp_info eq $job_grp_info} "Login information should match that of the test user"

	#
	# Check for sleep input specification error in stderr
	#
	wait_for_file -fail $file_err
	spawn $bin_cat $file_err
	expect {
		-re "$sleep_error_message" {
			log_debug "No worries, this error is expected"
			set got_sleep_err 1
			exp_continue
		}
		-re "Specify time as a positive integer.*\n" {
			set got_sleep_err 1
			exp_continue
		}
		eof {
			wait
		}
	}
	subtest {$got_sleep_err != 0} "Stderr should show sleep error message"
}

#
# Spawn a shell via srun that uses stdin/out/err and confirm their contents
#
set timeout $max_job_delay
spawn $srun --input=$file_in --output=$file_out --error=$file_err -t1 $bin_bash
expect {
	-re "Unable to contact" {
		fail "Slurm appears to be down"
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}

testproc test_srun_output

#
# Test environment variables for srun -i/-e/-o (legacy)
#
run_command "$bin_rm $file_out $file_err"
run_command "SLURM_STDINMODE=$file_in SLURM_STDOUTMODE=$file_out SLURM_STDERRMODE=$file_err $srun -t1 $bin_bash"
testproc test_srun_output

#
# Test new environment variables for srun -i/-e/-o
#
run_command "$bin_rm $file_out $file_err"
run_command "SRUN_INPUT=$file_in SRUN_OUTPUT=$file_out SRUN_ERROR=$file_err $srun -t1 $bin_bash"
testproc test_srun_output

#
# Spawn a program to run for a while with no input, output or error
#
spawn $srun --input=none --output=none --error=none -t1 -N1 $bin_head $file_in
expect {
	-re "Unable to contact" {
		fail "Slurm appears to be down"
	}
	-re "Terminated" {
		fail "srun failed to complete"
	}
	-re "time limit exceeded" {
		fail "srun failed to complete"
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}
