From fc68ffbf75c32836e0b5d91b7beb3d5b81e6b5b1 Mon Sep 17 00:00:00 2001 From: Michael Bridgen Date: Thu, 21 Dec 2023 11:32:08 +0000 Subject: [PATCH] Shut down all test envs As part of testing pipelines with targets in remote clusters, an envtest Environment `leafEnv` is created to act as a remote cluster. But it is left running after the tests, as one could see with `ps` once `go test` has completed. Since the controller is run in TestMain, the environment must be shut down in TestMain -- i.e., not within an individual test. This commit adds a simple mechanism for keeping track of envs to shut down after the tests have run, and uses it both for the "main" cluster environment and the leaf cluster. Signed-off-by: Michael Bridgen --- .../leveltriggered/controller_remote_test.go | 1 + controllers/leveltriggered/suite_test.go | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/controllers/leveltriggered/controller_remote_test.go b/controllers/leveltriggered/controller_remote_test.go index 26b939f..d98e099 100644 --- a/controllers/leveltriggered/controller_remote_test.go +++ b/controllers/leveltriggered/controller_remote_test.go @@ -33,6 +33,7 @@ func TestRemoteTargets(t *testing.T) { if err != nil { t.Error("starting leaf test env failed", err) } + envsToStop = append(envsToStop, leafEnv) user, err := leafEnv.ControlPlane.AddUser(envtest.User{ Name: "leaf-admin", diff --git a/controllers/leveltriggered/suite_test.go b/controllers/leveltriggered/suite_test.go index c118476..2dcb801 100644 --- a/controllers/leveltriggered/suite_test.go +++ b/controllers/leveltriggered/suite_test.go @@ -34,6 +34,8 @@ var kubeConfig []byte var eventRecorder *testEventRecorder var pipelineReconciler *PipelineReconciler +var envsToStop []*envtest.Environment + type testEvent struct { object runtime.Object eventType string @@ -100,6 +102,7 @@ func TestMain(m *testing.M) { if err != nil { log.Fatalf("starting test env failed: %s", err) } + envsToStop = append(envsToStop, testEnv) user, err := testEnv.ControlPlane.AddUser(envtest.User{ Name: "envtest-admin", @@ -178,11 +181,18 @@ func TestMain(m *testing.M) { wg.Wait() log.Println("manager exited") - err = testEnv.Stop() - if err != nil { - log.Fatalf("stopping test env failed: %s", err) + var failedToStopEnvs bool + for _, env := range envsToStop { + err = env.Stop() + if err != nil { + failedToStopEnvs = true + log.Printf("stopping test env failed: %s\n", err) + } + } + if failedToStopEnvs { + log.Fatalf("failed to stop all test envs") } - log.Println("test env stopped") + log.Println("test envs stopped") os.Exit(retCode) }