#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test of srun --open-mode (truncate or append) option.
############################################################################
# Copyright (C) 2002-2007 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       ""
set got_job_grps         0
set got_login_grps       0
set got_sleep_err        0

#
# Build stdin file
#
make_bash_script $file_in "
  $bin_id
  $bin_sleep aaa
  exit 0"
exec echo "$bin_echo INITIAL_VALUE" >$file_err
exec echo "$bin_echo INITIAL_VALUE" >$file_out

#
# Get user id and group id for comparison with stdout
#

set login_grp_info "uid=[get_my_uid]"

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

wait_for_file -fail $file_out
spawn $bin_cat $file_out
expect {
	-re "INITIAL_VALUE" {
		fail "stdout file not truncated"
	}
	-re "$login_grp_info" {
		incr got_job_grps
		exp_continue
	}
	eof {
		wait
	}
}

subtest {$got_job_grps == 1} "Confirm user and group ID info seen on stdout in truncate mode"

#
# Check for sleep input specification error in stderr
#
wait_for_file -fail $file_err
spawn $bin_cat $file_err
expect {
	-re "INITIAL_VALUE" {
		fail "stderr file not truncated"
	}
	-re "$sleep_error_message" {
		log_debug "No worries, this error is expected"
		incr got_sleep_err
		exp_continue
	}
	-re "Specify time as a positive integer.*\n" {
		incr got_sleep_err
		exp_continue
	}
	eof {
		wait
	}
}

subtest {$got_sleep_err == 1} "Check for sleep input specification error in stderr"

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

wait_for_file -fail $file_out
set got_job_grps 0
spawn $bin_cat $file_out
expect {
	-re "$login_grp_info" {
		incr got_job_grps
		exp_continue
	}
	eof {
		wait
	}
}

subtest {$got_job_grps == 2} "Confirm user and group ID seen on stdout in append mode"

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

subtest {$got_sleep_err == 2} "Check for sleep input specification error in stderr"
