#!/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 # CODE-OCEC-09-009. All rights reserved. # # This file is part of Slurm, a resource management program. # For details, see . # 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 exit_code 0 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 set srun_pid [spawn $srun --input=$task_id -N1 -n$task_num -O -v --wait=2 -t1 $bin_bash] expect { -re "launching ($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" set exit_code 1 } send "exit\r" exp_continue } -re "error: First task exited" { log_debug "This error is expected, no worries" exp_continue } timeout { log_error "srun not responding" slow_kill $srun_pid set exit_code 1 } eof { wait } } if {$matches != 1} { log_error "Stdin to specific task_id failed" set exit_code 1 } if {[test_front_end]} { skip "Additional portions of this test are incompatible with front-end systems" } if {$exit_code == 0} { log_info "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 set srun_pid [spawn $srun --output=$task_id -N1 -n$task_num -O -v -t1 env] expect { -re "launching ($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" set exit_code 1 } exp_continue } timeout { log_error "srun not responding" slow_kill $srun_pid set exit_code 1 } eof { wait } } if {$matches != 1} { log_error "Stdout from specific task_id failed" set exit_code 1 } if {$exit_code != 0} { fail "Test failed due to previous errors (\$exit_code = $exit_code)" }