#!/usr/bin/env expect
############################################################################
# Purpose: Test of Slurm functionality
#          Test scancel interactive mode (--interactive option).
############################################################################
# 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
set matches      0

proc cleanup {} {
	global job_id

	cancel_job $job_id
}

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

#
# Submit a job so we have something to work with
#
set job_id [submit_job -fail "--output=/dev/null --error=/dev/null -t1 $file_in"]

#
# Test interactive scancel
#

spawn $scancel --interactive $job_id
expect {
	-re "Job $job_id not found" {
		fail "Job initiation failure"
	}
	-re "Cancel job.*\? " {
		send "n\r"
		incr matches
		exp_continue
	}
	timeout {
		fail "scancel not responding"
	}
	eof {
		wait
	}
}

spawn $scancel --interactive $job_id
expect {
	-re "Cancel job.*\? " {
		send "y\r"
		incr matches
		exp_continue
	}
	timeout {
		fail "scancel not responding"
	}
	eof {
		wait
	}
}

spawn $scancel --interactive $job_id
expect {
	-re "Kill job error.* $job_id" {
		log_debug "No worries, error is expected"
		incr matches
		exp_continue
	}
	timeout {
		fail "scancel not responding"
	}
	eof {
		wait
	}
}

subtest {$matches == 3} "Test interactive scancel"
