#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Confirm that a job executes with various launch thread fanouts
#          (--threads option).
############################################################################
# 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

#
# Submit a job with one thread fanout
#
set host_0      ""
set timeout     $max_job_delay
set node_cnt    1-64
set task_num    [get_config_param "MaxTasksPerNode"]

spawn $srun -N$node_cnt -l --threads=1 -t1 $bin_printenv SLURMD_NODENAME
expect {
	-re "0: *($re_word_str)" {
		set host_0 $expect_out(1,string)
		exp_continue
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}

#
# Verify node registration
#
subtest {$host_0 ne ""} "Verify node registration" "Did not get hostname of task 0"

#
# Submit a job with up to 32 thread fanout (Slurm limit is 60)
#
set host_0      ""
if {$task_num <= 32} {
	set thread_cnt $task_num
} else {
	set thread_cnt 32
}
spawn $srun -N$node_cnt -n$task_num -O -l --threads=$thread_cnt -t1 $bin_printenv SLURMD_NODENAME
expect {
	-re "Memory required by task is not available" {
		log_warn "DefMemPerTask is configured too high for this test"
		set host_0 "warn"
	}
	-re "0: *($re_word_str)" {
		set host_0 $expect_out(1,string)
		exp_continue
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}

#
# Verify node registration
#
subtest {$host_0 ne ""} "Verify node registration" "Did not get hostname of task 0"
