From 46cd51662c9bc5f7c2db2303c694397d436a3861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20St=C3=A4bler?= Date: Thu, 30 Apr 2026 10:07:59 +0200 Subject: [PATCH 1/2] Cleanup function via DeferCleanupOnSuccess instead of in AfterEach --- test/e2e/func_deploy_test.go | 76 ++++++++++++------------- test/e2e/func_middleware_update_test.go | 26 ++++----- test/utils/utils.go | 6 ++ 3 files changed, 55 insertions(+), 53 deletions(-) diff --git a/test/e2e/func_deploy_test.go b/test/e2e/func_deploy_test.go index 1e84cec..50175c9 100644 --- a/test/e2e/func_deploy_test.go +++ b/test/e2e/func_deploy_test.go @@ -159,6 +159,10 @@ func createSSHFunctionAndExpectReady( err = k8sClient.Create(ctx, function) Expect(err).NotTo(HaveOccurred()) + utils.DeferCleanupOnSuccess(func() { + _, _ = utils.RunCmd("kubectl", "delete", "function", function.Name, "--namespace", function.Namespace) + }) + Eventually(functionBecomesReady(function.Name, functionNamespace)).Should(Succeed()) return function.Name } @@ -216,13 +220,6 @@ var _ = Describe("Operator", func() { AfterEach(func() { logFailedTestDetails(functionName, functionNamespace) - - // Cleanup function resource - if functionName != "" { - cmd := exec.Command("kubectl", "delete", "function", functionName, "-n", functionNamespace, "--ignore-not-found") - _, err := utils.Run(cmd) - Expect(err).NotTo(HaveOccurred()) - } }) It("should mark the function as ready", func() { @@ -242,6 +239,10 @@ var _ = Describe("Operator", func() { err := k8sClient.Create(ctx, function) Expect(err).NotTo(HaveOccurred()) + utils.DeferCleanupOnSuccess(func() { + _, _ = utils.RunCmd("kubectl", "delete", "function", function.Name, "--namespace", function.Namespace) + }) + functionName = function.Name Eventually(functionBecomesReady(functionName, functionNamespace)).Should(Succeed()) @@ -296,13 +297,6 @@ var _ = Describe("Operator", func() { AfterEach(func() { logFailedTestDetails(functionName, functionNamespace) - - // Cleanup function resource - if functionName != "" { - cmd := exec.Command("kubectl", "delete", "function", functionName, "-n", functionNamespace, "--ignore-not-found") - _, err := utils.Run(cmd) - Expect(err).NotTo(HaveOccurred()) - } }) It("should mark the function as ready", func() { @@ -323,6 +317,10 @@ var _ = Describe("Operator", func() { err := k8sClient.Create(ctx, function) Expect(err).NotTo(HaveOccurred()) + utils.DeferCleanupOnSuccess(func() { + _, _ = utils.RunCmd("kubectl", "delete", "function", function.Name, "--namespace", function.Namespace) + }) + functionName = function.Name Eventually(functionBecomesReady(functionName, functionNamespace)).Should(Succeed()) @@ -356,12 +354,7 @@ var _ = Describe("Operator", func() { }) AfterEach(func() { - // Cleanup function resource - if functionName != "" { - cmd := exec.Command("kubectl", "delete", "function", functionName, "-n", functionNamespace, "--ignore-not-found") - _, err := utils.Run(cmd) - Expect(err).NotTo(HaveOccurred()) - } + logFailedTestDetails(functionName, functionNamespace) }) It("should mark the function as not ready", func() { @@ -381,6 +374,10 @@ var _ = Describe("Operator", func() { err := k8sClient.Create(ctx, function) Expect(err).NotTo(HaveOccurred()) + utils.DeferCleanupOnSuccess(func() { + _, _ = utils.RunCmd("kubectl", "delete", "function", function.Name, "--namespace", function.Namespace) + }) + functionName = function.Name Eventually(functionNotDeployed(functionName, functionNamespace), 2*time.Minute).Should(Succeed()) @@ -435,13 +432,6 @@ var _ = Describe("Operator", func() { AfterEach(func() { logFailedTestDetails(functionName, functionNamespace) - - // Cleanup function resource - if functionName != "" { - cmd := exec.Command("kubectl", "delete", "function", functionName, "-n", functionNamespace, "--ignore-not-found") - _, err := utils.Run(cmd) - Expect(err).NotTo(HaveOccurred()) - } }) Context("using token authentication", func() { @@ -481,6 +471,10 @@ var _ = Describe("Operator", func() { err = k8sClient.Create(ctx, function) Expect(err).NotTo(HaveOccurred()) + utils.DeferCleanupOnSuccess(func() { + _, _ = utils.RunCmd("kubectl", "delete", "function", function.Name, "--namespace", function.Namespace) + }) + functionName = function.Name Eventually(functionBecomesReady(functionName, functionNamespace)).Should(Succeed()) @@ -504,6 +498,10 @@ var _ = Describe("Operator", func() { err := k8sClient.Create(ctx, function) Expect(err).NotTo(HaveOccurred()) + utils.DeferCleanupOnSuccess(func() { + _, _ = utils.RunCmd("kubectl", "delete", "function", function.Name, "--namespace", function.Namespace) + }) + functionName = function.Name Eventually(functionNotReadyWithAuthError(functionName, functionNamespace), 2*time.Minute).Should(Succeed()) @@ -548,6 +546,10 @@ var _ = Describe("Operator", func() { err = k8sClient.Create(ctx, function) Expect(err).NotTo(HaveOccurred()) + utils.DeferCleanupOnSuccess(func() { + _, _ = utils.RunCmd("kubectl", "delete", "function", function.Name, "--namespace", function.Namespace) + }) + functionName = function.Name Eventually(functionBecomesReady(functionName, functionNamespace)).Should(Succeed()) @@ -571,6 +573,10 @@ var _ = Describe("Operator", func() { err := k8sClient.Create(ctx, function) Expect(err).NotTo(HaveOccurred()) + utils.DeferCleanupOnSuccess(func() { + _, _ = utils.RunCmd("kubectl", "delete", "function", function.Name, "--namespace", function.Namespace) + }) + functionName = function.Name Eventually(functionNotReadyWithAuthError(functionName, functionNamespace), 2*time.Minute).Should(Succeed()) @@ -636,12 +642,6 @@ var _ = Describe("Operator", func() { AfterEach(func() { logFailedTestDetails(functionName, functionNamespace) - - if functionName != "" { - cmd := exec.Command("kubectl", "delete", "function", functionName, "-n", functionNamespace, "--ignore-not-found") - _, err := utils.Run(cmd) - Expect(err).NotTo(HaveOccurred()) - } }) It("should mark the function as ready with SSH key auth", func() { @@ -714,12 +714,6 @@ var _ = Describe("Operator", func() { AfterEach(func() { logFailedTestDetails(functionName, functionNamespace) - - if functionName != "" { - cmd := exec.Command("kubectl", "delete", "function", functionName, "-n", functionNamespace, "--ignore-not-found") - _, err := utils.Run(cmd) - Expect(err).NotTo(HaveOccurred()) - } }) It("should mark the function as ready when SSH key authSecretRef is provided", func() { @@ -743,6 +737,10 @@ var _ = Describe("Operator", func() { err := k8sClient.Create(ctx, function) Expect(err).NotTo(HaveOccurred()) + utils.DeferCleanupOnSuccess(func() { + _, _ = utils.RunCmd("kubectl", "delete", "function", function.Name, "--namespace", function.Namespace) + }) + functionName = function.Name Eventually(functionNotReadyWithAuthError(functionName, functionNamespace), 2*time.Minute).Should(Succeed()) diff --git a/test/e2e/func_middleware_update_test.go b/test/e2e/func_middleware_update_test.go index bca973e..3e92724 100644 --- a/test/e2e/func_middleware_update_test.go +++ b/test/e2e/func_middleware_update_test.go @@ -97,13 +97,6 @@ var _ = Describe("Middleware Update", func() { AfterEach(func() { logFailedTestDetails(functionName, functionNamespace) - - // Cleanup function resource - if functionName != "" { - cmd := exec.Command("kubectl", "delete", "function", functionName, "-n", functionNamespace, "--ignore-not-found") - _, err := utils.Run(cmd) - Expect(err).NotTo(HaveOccurred()) - } }) It("should update the middleware and mark the function as ready", func() { @@ -188,6 +181,10 @@ var _ = Describe("Middleware Update", func() { err = k8sClient.Create(ctx, fn) Expect(err).NotTo(HaveOccurred()) + utils.DeferCleanupOnSuccess(func() { + _, _ = utils.RunCmd("kubectl", "delete", "function", fn.Name, "--namespace", fn.Namespace) + }) + functionName = fn.Name Eventually(functionBecomesReady(functionName, functionNamespace)).Should(Succeed()) @@ -335,13 +332,6 @@ var _ = Describe("Middleware Update", func() { AfterEach(func() { logFailedTestDetails(functionName, functionNamespace) - - // Cleanup function resource - if functionName != "" { - cmd := exec.Command("kubectl", "delete", "function", functionName, "-n", functionNamespace, "--ignore-not-found") - _, err := utils.Run(cmd) - Expect(err).NotTo(HaveOccurred()) - } }) It("should reconcile functions without explicit autoUpdateMiddleware when ConfigMap changes", func() { @@ -379,6 +369,11 @@ var _ = Describe("Middleware Update", func() { err = k8sClient.Create(ctx, fn) Expect(err).NotTo(HaveOccurred()) + + utils.DeferCleanupOnSuccess(func() { + _, _ = utils.RunCmd("kubectl", "delete", "function", fn.Name, "--namespace", fn.Namespace) + }) + functionName = fn.Name By("Waiting for Function to become ready with middleware updates disabled") @@ -492,6 +487,9 @@ var _ = Describe("Middleware Update", func() { err = k8sClient.Create(ctx, fn) Expect(err).NotTo(HaveOccurred()) + utils.DeferCleanupOnSuccess(func() { + _, _ = utils.RunCmd("kubectl", "delete", "function", fn.Name, "--namespace", fn.Namespace) + }) functionName = fn.Name By("Waiting for Function to become ready") diff --git a/test/utils/utils.go b/test/utils/utils.go index 40dadd0..6defed0 100644 --- a/test/utils/utils.go +++ b/test/utils/utils.go @@ -47,6 +47,12 @@ func Run(cmd *exec.Cmd) (string, error) { return string(output), nil } +func RunCmd(cmd string, args ...string) (string, error) { + c := exec.Command(cmd, args...) + + return Run(c) +} + // GetNonEmptyLines converts given command output string into individual objects // according to line breakers, and ignores the empty elements in it. func GetNonEmptyLines(output string) []string { From 1de181d40d009a369744473e21489a5a8e583bf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christoph=20St=C3=A4bler?= Date: Thu, 30 Apr 2026 10:08:25 +0200 Subject: [PATCH 2/2] Add missing func cleanup --- test/e2e/bundle_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/test/e2e/bundle_test.go b/test/e2e/bundle_test.go index bbf52f2..dabd111 100644 --- a/test/e2e/bundle_test.go +++ b/test/e2e/bundle_test.go @@ -367,6 +367,9 @@ func createNamespaceAndDeployFunction() TestNamespace { out, err := utils.RunFuncDeploy(repoDir, utils.WithNamespace(ns)) Expect(err).NotTo(HaveOccurred()) _, _ = fmt.Fprint(GinkgoWriter, out) + DeferCleanup(func() { + _, _ = utils.RunFunc("delete", "--path", repoDir, "--namespace", ns) + }) // Push updated func.yaml back to repo err = utils.CommitAndPush(repoDir, "Update func.yaml after deploy", "func.yaml")