From 0611d4713201c9801a7e00643e9c9ac51f22f904 Mon Sep 17 00:00:00 2001
From: Isaac Hartung <ihartung@schedmd.com>
Date: Mon, 15 May 2017 11:15:41 -0600
Subject: [PATCH] Adds tests for scancel --sibling=<jobid>

Bug 3667
---
 testsuite/expect/README   |  1 +
 testsuite/expect/test37.8 | 79 +++++++++++++++++++++++++++++++++++++--
 2 files changed, 76 insertions(+), 4 deletions(-)

diff --git a/testsuite/expect/README b/testsuite/expect/README
index ea8f5acd0ad..339c8bcfb6f 100644
--- a/testsuite/expect/README
+++ b/testsuite/expect/README
@@ -804,3 +804,4 @@ test37.5   Federated Requeue
 test37.6   Federated Job Updates
 test37.7   Federated Cluster States
 test37.8   scontrol --local, --sibling options
+           scancel --sibling=<jobid>
diff --git a/testsuite/expect/test37.8 b/testsuite/expect/test37.8
index b66b9504972..dca07fefd4d 100755
--- a/testsuite/expect/test37.8
+++ b/testsuite/expect/test37.8
@@ -1,6 +1,7 @@
 #!/usr/bin/expect
 ############################################################################
 # Purpose: scontrol --local, --sibling options
+#          scancel --sibling=<jobid>
 #
 # Reqs:    1. Using slurmdbd accounting storage type and is up
 #          2. fed_slurm_base is defined in globals.local - set to directory that
@@ -148,13 +149,18 @@ proc sbatch { } {
 	return $job_id
 }
 
-proc squeue { job_id regex } {
-	global fed_slurm_base fedc1
+proc squeue { job_id regex args } {
+	global my_squeue
 
 	set matches 0
-	set my_squeue "${fed_slurm_base}/$fedc1/bin/squeue"
 	set command "$my_squeue --noheader -a --local -Ostatecompact:.5i\
-		-Mfed1,fed2,fed3 -j $job_id"
+		-j $job_id"
+
+	if {$args ne ""} {
+		append command " -M$args"
+	} else {
+		append command " -Mfed1,fed2,fed3"
+	}
 	spawn {*}$command
 	expect {
 		-re "$regex" {
@@ -192,8 +198,31 @@ proc verify { job_id output } {
 		scontrol --local $job_id "JobId.+" -Mfed3
 	}
 
+}
 
+proc scancel_mod { sibling job_id regex} {
+	global fed_slurm_base fedc1
 
+	set matches 0
+	set my_scancel "${fed_slurm_base}/$fedc1/bin/scancel"
+
+	spawn $my_scancel --sibling=$sibling $job_id
+	expect {
+		-re "$regex" {
+			incr matches
+		}
+		timeout {
+			log_error "scancel not responding"
+			end_it 1
+		}
+		eof {
+			wait
+		}
+	}
+	if {$matches != 1} {
+		log_error "scancel failure, expected $regex\n"
+		end_it 1
+	}
 }
 
 proc cancel_all_jobs { } {
@@ -387,6 +416,16 @@ set output [wait_for_fed_job $ji2 RUNNING $fedc1,$fedc2,$fedc3]
 
 verify $ji2 $output
 
+send_user "\n################################################################\n"
+send_user "scancel --sibling=<clustername><jobid> will remove on active pending"
+send_user "\n################################################################\n"
+
+cancel_all_jobs
+
+set ji0 [sbatch]
+set ji1 [sbatch]
+set ji2 [sbatch]
+
 set output [wait_for_fed_job $ji0 RUNNING $fedc1,$fedc2,$fedc3]
 
 verify $ji0 $output
@@ -399,5 +438,37 @@ set output [wait_for_fed_job $ji2 RUNNING $fedc1,$fedc2,$fedc3]
 
 verify $ji2 $output
 
+scancel_mod $fedc1 $ji0 "scancel: error: Kill job error on job id $ji0: Job is\
+ no longer pending execution"
+
+scancel_mod $fedc1 $ji1 "scancel: error: Kill job error on job id $ji1: Job is\
+ no longer pending execution"
+
+scancel_mod $fedc1 $ji2 "scancel: error: Kill job error on job id $ji2: Job is\
+ no longer pending execution"
+
+set job_id [sbatch]
+
+squeue $job_id "\\s+PD\\s+" $fedc1
+squeue $job_id "\\s+PD\\s+" $fedc2
+squeue $job_id "\\s+PD\\s+" $fedc3
+
+scancel_mod $fedc1 $job_id ""
+
+squeue $job_id "\\s+RV\\s+" $fedc1
+squeue $job_id "\\s+PD\\s+" $fedc2
+
+scancel_mod $fedc2 $job_id ""
+
+squeue $job_id "\\s+RV\\s+" $fedc1
+squeue $job_id "slurm_load_jobs error: Invalid job id specified\\s+" $fedc2
+squeue $job_id "\\s+PD\\s+" $fedc3
+
+scancel_mod $fedc3 $job_id ""
+
+squeue $job_id "\\s+RV\\s+" $fedc1
+squeue $job_id "slurm_load_jobs error: Invalid job id specified\\s+" $fedc2
+squeue $job_id "slurm_load_jobs error: Invalid job id specified\\s+" $fedc3
+
 # All Done
 end_it 0
-- 
GitLab