#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Verify the appropriate job environment variables are set.
############################################################################
# Copyright (C) 2002-2007 The Regents of the University of California.
# Copyright (C) 2008-2009 Lawrence Livermore National Security
# 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 matches          0

# These are the variables for which we are checking existence.
# If the number following a variable name is 1, then we check to make
# certain that the value of the env variable is greater than 0
array set good_vars {
    SLURM_CPUS_ON_NODE 1
    SLURM_CPUS_PER_TASK 1
    SLURM_JOB_ID 1
    SLURM_LAUNCH_NODE_IPADDR 0
    SLURM_LOCALID 0
    SLURM_NNODES 0
    SLURM_NODEID 0
    SLURM_NODELIST 0
    SLURM_NTASKS 1
    SLURM_PROCID 0
    SLURM_SRUN_COMM_HOST 0
    SLURM_SRUN_COMM_PORT 1
    SLURM_STEPID 0
    SLURM_TASKS_PER_NODE 1
    SLURM_TASK_PID 1
    SLURM_TOPOLOGY_ADDR 0
    SLURM_TOPOLOGY_ADDR_PATTERN 0
}

#
# Spawn a job via srun to print environment variables
#
set timeout $max_job_delay
spawn $srun -N1 -n1 --cpus-per-task=1 -t1 $bin_env
expect {
	-re "(SLURM_$re_word_str)=($re_word_str)" {
		set found_vars($expect_out(1,string)) "$expect_out(2,string)"
		exp_continue
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}

set total 0
set good 0
foreach {slurm_var check_flag} [array get good_vars] {
	incr total
	if {[info exists found_vars($slurm_var)]} {
		if { $check_flag == 1 && $found_vars($slurm_var) <= 0 } {
			log_error "Found $slurm_var, but $found_vars($slurm_var) <= 0"
		} else {
			incr good
		}
	} else {
		log_error "Variable $slurm_var not found"
	}
}

if {$good < $total} {
	fail "Only $good of $total Slurm environment variables set"
}
