#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Validate scontrol update command for job steps.
# Copyright (C) 2010 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 file_in1      "$test_dir/input1"
set file_in2      "$test_dir/input2"
set file_out      "$test_dir/output"
set job_id        0
set step_id       0
set orig_time     0
set new_time      0

proc cleanup {} {
	global job_id

	cancel_job $job_id
}

#
# Build input batch file
#
make_bash_script $file_in1 "
  $bin_echo JOB_BEGIN
  $srun -t5 $file_in2
  $bin_echo JOB_FINISH
"
#
# Build step file
# The second sleep is because with some proctrack plugins, the bash shell may
# be terminated slightly later than the first sleep process
#
make_bash_script $file_in2 "
  $bin_echo STEP_BEGIN
  $bin_sleep 120
  $bin_sleep 1
  $bin_echo STEP_FINISH
"

#
# Submit a job so we have something to work with
#
spawn $sbatch --output=$file_out -t3 $file_in1
expect {
	-re "Submitted batch job ($number)" {
		set job_id $expect_out(1,string)
		exp_continue
	}
	timeout {
		fail "srun not responding"
	}
	eof {
		wait
	}
}
if {$job_id == 0} {
	fail "srun failed to initiate job"
}
#
# Wait for job _and_ step to start running
#
wait_for_job -fail $job_id "RUNNING"
sleep 5

#
# Validate that step's original time limit
#
spawn $scontrol show step $job_id.$step_id
expect {
	-re "TimeLimit=00:($number):00" {
		set orig_time $expect_out(1,string)
		exp_continue
	}
	timeout {
		fail "scontrol not responding"
	}
	eof {
		wait
	}
}
subtest {$orig_time == 5} "Validate the step's original time limit" "$orig_time != 5"

#
# Change that step's time limit
#
spawn $scontrol update StepId=$job_id TimeLimit=1
expect {
	timeout {
		fail "scontrol not responding"
	}
	eof {
		wait
	}
}

#
# Validate that step's new time limit
#
spawn  $scontrol show step $job_id.$step_id
expect {
	-re "TimeLimit=00:($number):00" {
		set orig_time $expect_out(1,string)
		exp_continue
	}
	timeout {
		fail "scontrol not responding"
	}
	eof {
		wait
	}
}
subtest {$orig_time == 1} "Validate the step's new time limit" "$orig_time != 1"

#
# Wait for step to exit and check output file
# Look for message generated before and after srun (job step) time limit
#
sleep 60
wait_for_job -fail $job_id "DONE"
wait_for_file -fail $file_out

spawn $bin_cat $file_out
expect {
	-re "STEP_FINISH" {
		fail "Step time limit not enforced"
	}
	eof {
		wait
	}
}
