#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Validate scontrol listpids command.
############################################################################
# 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

set file_in     "$test_dir/input"
set file_out    "$test_dir/output"
set job_id      0
set step_id     0
set scontrol_id 0

proc cleanup {} {
	global job_id

	cancel_job $job_id
}

#
# Build input script file
#
make_bash_script $file_in "
  $srun $bin_sleep 10 &
  $bin_sleep 1
  $scontrol listpids \$SLURM_JOB_ID.10 \$SLURMD_NODENAME
  $scontrol listpids \$SLURM_JOB_ID.$step_id \$SLURMD_NODENAME
  $scontrol listpids \$SLURM_JOB_ID \$SLURMD_NODENAME
"

#
# Spawn a srun batch job that uses stdout/err and confirm their contents
#
set job_id [submit_job -fail "--output=$file_out -t1 $file_in"]

#
# Wait for job to complete
#
wait_for_job -fail $job_id "DONE"

#
# Verify job_id in output file
#
set matches 0
wait_for_file -fail $file_out
set output [run_command_output -fail "$bin_cat $file_out"]
subtest {[regexp -all "StepId=($number)\\.10 does not exist on" $output] == 1} "Verify message for unexisting step"
subtest {[regexp -all "$job_id *$step_id *0 *0" $output] == 2} "Verify the 2 expected messages from listpids"
