#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test of sbatch --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 job_id         0
set login_grp_info "uid=[get_my_uid]"

proc cleanup {} {
	global job_id

	cancel_job $job_id
}

#
# 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

#
# Spawn a shell via sbatch that uses stdin/out/err in truncate mode
# and confirm their contents
#
set job_id [submit_job -fail "--output=$file_out --error=$file_err --open-mode=t -t1 $file_in"]

wait_for_job -fail $job_id "DONE"
wait_for_file -fail $file_out
wait_for_file -fail $file_err

set output [run_command_output -fail "$bin_cat $file_out"]
subtest {[regexp -all "$login_grp_info" $output] == 1} "Confirm that user and group ID is seen in stdout"
subtest {![regexp "INITIAL_VALUE" $output]} "Confirm that stdout file is truncated"

#
# Check for sleep input specification error in stderr
#
set output [run_command_output -fail "$bin_cat $file_err"]
set sleep_error_message_count [regexp -all "$sleep_error_message" $output]
set time_positive_count       [regexp -all "Specify time as a positive integer.*\n" $output]

subtest {[expr $sleep_error_message_count + $time_positive_count] == 1} "Check for sleep input specification error in stderr"
subtest {![regexp "INITIAL_VALUE" $output]} "Confirm that stderr file is truncated"

#
# Spawn a shell via sbatch that uses stdin/out/err in append mode
# and confirm their contents
#
set job_id [submit_job -fail "--output=$file_out --error=$file_err --open-mode=a -t1 $file_in"]

wait_for_job -fail $job_id "DONE"
wait_for_file -fail $file_out
wait_for_file -fail $file_err

set output [run_command_output -fail "$bin_cat $file_out"]
subtest {[regexp -all "$login_grp_info" $output] == 2} "Confirm that user and group ID is seen in stdout"

#
# Check for sleep input specification error in stderr
#
set output [run_command_output -fail "$bin_cat $file_err"]
set sleep_error_message_count [regexp -all "$sleep_error_message" $output]
set time_positive_count       [regexp -all "Specify time as a positive integer.*\n" $output]

subtest {[expr $sleep_error_message_count + $time_positive_count] == 2} "Check for sleep input specification error in stderr"
