#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test srun stdout/err disabling (--output and --error options with
#          argument of "none").
############################################################################
# Copyright (C) 2002-2006 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


#
# Spawn a program via srun with stdout forwarding disabled
#
set timeout $max_job_delay
spawn $srun --output=none -t1 $bin_id
expect {
	-re "uid=" {
		fail "srun improperly forwarded stdout"
	}
	-re "groups=" {
		fail "srun improperly forwarded stdout"
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}

#
# Spawn a program via srun with stderr forwarding disabled
#
set matches 0
spawn $srun --error=none -t1 $bin_sleep aaa
expect {
	-re "invalid" {
		fail "srun improperly forwarded stderr"
	}
	-re "exit code $number" {
		log_debug "This error is expected, no worries"
		set matches 1
		exp_continue
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}

subtest {$matches == 1} "Srun exit code should indicate error"
