Properly exit CTS on signals
This kills the loops when the global context is cancelled ensuring reliable termination
of the CTS with Ctrl+C or a signal.
Test Plan: Manually tested by aborting the CTS with Ctrl+C
X-Origin-Diff: phab/D673
GitOrigin-RevId: a2f367cd4a7a57bb573bd57656148681add048a2
diff --git a/metropolis/test/e2e/k8s_cts/main.go b/metropolis/test/e2e/k8s_cts/main.go
index 8ee63be..2c5a19e 100644
--- a/metropolis/test/e2e/k8s_cts/main.go
+++ b/metropolis/test/e2e/k8s_cts/main.go
@@ -88,7 +88,8 @@
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM)
ctx, cancel := context.WithCancel(context.Background())
go func() {
- <-sigs
+ sig := <-sigs
+ log.Printf("Got signal %s, aborting test", sig)
cancel()
}()
@@ -97,7 +98,6 @@
log.Fatalf("Failed to launch cluster: %v", err)
}
log.Println("Cluster initialized")
-
clientSet, err := e2e.GetKubeClientSet(ctx, debugClient, portMap[common.KubernetesAPIPort])
if err != nil {
log.Fatalf("Failed to get clientSet: %v", err)
@@ -152,6 +152,8 @@
log.Printf("Log pump error: %v", err)
}
logs.Close()
+ } else if err == ctx.Err() {
+ return // Exit if the context has been cancelled
} else {
log.Printf("Pod logs not ready yet: %v", err)
}
@@ -161,7 +163,9 @@
for {
time.Sleep(1 * time.Second)
pod, err := clientSet.CoreV1().Pods("default").Get(ctx, podName, metav1.GetOptions{})
- if err != nil {
+ if err != nil && err == ctx.Err() {
+ return // Exit if the context has been cancelled
+ } else if err != nil {
log.Printf("Failed to get CTS pod: %v", err)
continue
}