#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test scancel state and name filters (--state and --name options).
#
# Note:    This script generates and then deletes files in the working directory
#          named test6.8.input
############################################################################
# Copyright (C) 2002 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_id1     0
set job_id2     0

proc cleanup {} {
	global job_id1 job_id2

	cancel_job [list $job_id1 $job_id2]
}

#
# Build input script file
#
make_bash_script $file_in "$srun $bin_sleep $max_job_delay"

#
# Spawn a couple of sbatch jobs
#
set job_id1 [submit_job -fail "--output=/dev/null --error=/dev/null --job-name=job.$test_id --hold -t1 $file_in"]
set job_id2 [submit_job -fail "--output=/dev/null --error=/dev/null --job-name=job.$test_id -t1 $file_in"]

wait_for_job -fail $job_id2 RUNNING

#
# Kill the jobs by state and name
#
set matches  0
spawn $scancel --name=job.$test_id --interactive --state=RUNNING
expect {
	-re "Cancel job_id=$job_id2.*\? " {
		send "y\r"
		incr matches
		exp_continue
	}
	-re "Cancel job_id=($number).*\? " {
		send "n\r"
		fail "scancel job id mismatch ($expect_out(1,string) != $job_id2)"
	}
	timeout {
		fail "scancel not responding"
	}
	eof {
		wait
	}
}
subtest {$matches == 1} "Test killing the jobs by name and RUNNING state"

set matches  0
spawn $scancel --name=job.$test_id --interactive --state=PENDING
expect {
	-re "Cancel job_id=$job_id1.*\? " {
		send "y\r"
		incr matches
		exp_continue
	}
	-re "Cancel job_id=($number).*\? " {
		send "n\r"
		fail "scancel job id mismatch ($expect_out(1,string) != $job_id1)"
	}
	timeout {
		fail "scancel not responding"
	}
	eof {
		wait
	}
}
subtest {$matches == 1} "Test killing the jobs by name and PENDING state"
