#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          bsub wrapper test
############################################################################
# Copyright (C) SchedMD LLC.
#
# 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_err    "$test_dir/error"
set file_in     "$test_dir/input"
set file_out    "$test_dir/output"
set job_id      0

if {[file executable $bsub] == 0} {
	skip "$bsub not found"
}

if {[file executable $bkill] == 0} {
	skip "$bkill not found"
}

proc cleanup {} {
	global qdel job_id

	run_command -none "$qdel $job_id"
}

make_bash_script $file_in "$bin_echo HELLO; $bin_cat /dummy_file"
spawn $bsub -W 01:00 -e $file_err -o $file_out $file_in
expect {
	-re "($number)" {
		set job_id $expect_out(1,string)
		exp_continue
	}
	timeout {
		fail "bsub not responding"
	}
	eof {
		wait
	}
}
if {$job_id == 0} {
	fail "bsub failed to submit job"
}

wait_for_file -fail $file_out
set matches 0
spawn $bin_cat $file_out
expect {
	-re "HELLO" {
		incr matches
		exp_continue
	}
	eof {
		wait
	}
}
subtest {$matches == 1} "Verify expected bsub output file contents"

wait_for_file -fail $file_err
set matches 0
spawn $bin_cat $file_err
expect {
	-re "No such file" {
		log_debug "Message from cat expected, no worries"
		incr matches
		exp_continue
	}
	eof {
		wait
	}
}
subtest {$matches == 1} "Verify expected bsub error file contents"
