#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test of increasing job sizes
############################################################################
# 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 error     0
set srun_opts "-c1"
set max_node_cnt 1024

#
# Spawn a srun immediate jobs with ever larger node counts
#
set timeout $max_job_delay
for {set node_cnt 1} {$node_cnt < $max_node_cnt} {set node_cnt [expr $node_cnt * 2]} {
	spawn $srun --immediate -N$node_cnt $srun_opts -t2 $bin_printenv SLURMD_NODENAME
	expect {
		-re "Immediate execution impossible" {
			log_debug "This error is expected, no worries"
			set node_cnt $max_node_cnt
			set error 0
			exp_continue
		}
		-re "Unable to contact" {
			fail "Slurm appears to be down"
		}
		-re "Unable to allocate resources" {
			log_debug "This error is expected, no worries"
			set node_cnt $max_node_cnt
			set error 0
			exp_continue
		}
		-re "Too many open files" {
			log_debug "This error is expected, no worries"
			set node_cnt $max_node_cnt
			exp_continue
		}
		-re "error" {
			set error 1
			exp_continue
		}
		timeout {
			fail "srun not responding"
		}
		eof {
			wait
		}
	}
}

if {$error == 1} {
	fail "Some error happened"
}
