#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test sbcast logging (--verbose option).
############################################################################
# Copyright (C) 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 file_err    "$test_dir/error"
set job_id      0

set accounting_storage_enforce [get_config_param "AccountingStorageEnforce"]
if {[param_contains $accounting_storage_enforce "nosteps"] || [param_contains $accounting_storage_enforce "nojobs"]} {
	skip "This test can not be run with nosteps or nojobs (AccountingStorageEnforce)"
}
if {[get_config_param "SlurmdUser"] ne "root(0)"} {
	skip "This test is incompatible with SlurmdUser != root"
}

proc cleanup {} {
	global job_id

	cancel_job $job_id
}

#
# Build input script file that broadcasts a file
#
set pid         [pid]
set file1       "/tmp/test.$pid.1.$test_id"
make_bash_script $file_in "
  $srun $bin_rm -f $file1
  $sbcast -vvvv $sbcast $file1
  $srun $bin_rm -f $file1
"

#
# Spawn an sbatch job that uses stdout/err and confirm their contents
#
set timeout $max_job_delay
set job_id [submit_job -fail "-N1 --output=$file_out --error=$file_err -t1 $file_in"]

#
# Wait for job to complete and check output file
#
wait_for_job -fail $job_id "DONE"

wait_for_file -fail $file_err
set output [run_command_output -fail "$bin_cat $file_err"]
subtest [regexp -all "force *=" $output] "Verify that verbose includes the force message"
subtest [regexp -all "preserve *=" $output] "Verify that verbose includes the preserve message"
subtest [regexp -all "modes *=" $output] "Verify that verbose includes the modes message"
subtest [regexp -all "jobid *=" $output] "Verify that verbose includes the jobid message"
subtest {![regexp -all "error:" $output]} "Verify that verbose doesn't include any error message"
