#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test scancel of individual job steps (job.step specification).
#
# Note:    This script generates and then deletes files in the working directory
#          named test6.9.input
############################################################################
# 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 file_in     "$test_dir/input"
set job_id      0

proc cleanup {} {
	global job_id

	cancel_job $job_id
}

#
# Build input script file
# The "sleep 1" ensures the background tasks is step 0 and foreground tasks is step 1
#
make_bash_script $file_in "
  $srun --mem=10 --overlap $bin_sleep $max_job_delay &
  $bin_sleep 1
  $srun --mem=10 --overlap $bin_sleep $max_job_delay
"

#
# Spawn sbatch job
#
set job_id [submit_job -fail "--output=/dev/null --error=/dev/null --mem=20 --job-name=$test_name -t5 $file_in"]
wait_for_job -fail $job_id RUNNING

# Wait for job steps to begin
wait_for_step "$job_id.0"
wait_for_step "$job_id.1"

#
# Kill single job steps individually
#
set matches  0
spawn $scancel --interactive $job_id.0
expect {
	-re "Cancel step_id=$job_id\\.0*\? " {
		send "y\r"
		incr matches
		exp_continue
	}
	timeout {
		fail "scancel not responding"
	}
	eof {
		wait
	}
}
subtest {$matches == 1} "Test killing job step 0"

set matches  0
spawn $scancel --interactive $job_id.1
expect {
	-re "Cancel step_id=$job_id\\.1*\? " {
		send "y\r"
		incr matches
		exp_continue
	}
	timeout {
		fail "scancel not responding"
	}
	eof {
		wait
	}
}
subtest {$matches == 1} "Test killing job step 1"
