#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test srun stdin/out routing with specific task number (--input
#          and --output options with numeric argument).
############################################################################
# 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 job_id           0
set matches          0
set task_id          3
set task_num         10

#
# Spawn a shell via srun with stdout forwarding disabled
#
set timeout $max_job_delay
spawn $srun --input=$task_id -N1 -n$task_num -O -v --wait=2 -t1 $bin_bash
expect {
	-re "launching StepId=($number)\\.0 on host" {
		set job_id $expect_out(1,string)
		send "$bin_env\r"
		exp_continue
	}
	-re "SLURM_PROCID=($number)" {
		set proc_id $expect_out(1,string)
		if {$task_id == $proc_id} {
			incr matches
		} else {
			log_error "Wrong task_id responded"
		}
		send "exit\r"
		exp_continue
	}
	-re "error: First task exited" {
		log_debug "This error is expected, no worries"
		exp_continue
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}

subtest {$matches == 1} "Verify stdin to specific task id"

log_debug "So far... stdin to specific task worked fine"

#
# Spawn program to print task number, we only expect to see output from task 2
#
set job_id  0
set matches 0
spawn $srun --output=$task_id -N1 -n$task_num -O -v -t1 env
expect {
	-re "launching StepId=($number)\\.0 on host" {
		set job_id $expect_out(1,string)
		exp_continue
	}
	-re "SLURM_PROCID=($number)" {
		set proc_id $expect_out(1,string)
		if {$task_id == $proc_id} {
			incr matches
		} else {
			log_error "Wrong task_id responded"
		}
		exp_continue
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}

subtest {$matches == 1} "Verify stdout from specific task id"
