From 026254622c37f4984475f9b46f95ada5cea95666 Mon Sep 17 00:00:00 2001 From: Honigeintopf Date: Fri, 8 Nov 2024 10:32:23 +0100 Subject: [PATCH] update integration test --- controllers/set/status.go | 19 +++++++++--------- integration/integration_test.go | 34 ++++++++++++++++++++++++++++----- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/controllers/set/status.go b/controllers/set/status.go index ad3aa83..3ed9291 100644 --- a/controllers/set/status.go +++ b/controllers/set/status.go @@ -27,26 +27,25 @@ func (c *controller) evaluateFirewallConditions(fw *v2.Firewall) firewallConditi allConditionsMet = created && ready && connected && seedConnected && distanceConfigured ) - allocationTimestamp := pointer.SafeDeref(fw.Status.ControllerStatus).SeedUpdated.Time - timeSinceAllocation := time.Since(allocationTimestamp) + seedUpdatedTime := pointer.SafeDeref(fw.Status.ControllerStatus).SeedUpdated.Time + timeSinceReconcile := time.Since(seedUpdatedTime) if allConditionsMet { return firewallConditionStatus{IsReady: true} } - if created && timeSinceAllocation > allocationTimeout { - - // If the firewall is still creating, don't set a timeout - if fw.Status.Phase != v2.FirewallPhaseCreating { - return firewallConditionStatus{CreateTimeout: true} - } - + // duration after which a firewall in the creation phase will be recreated, exceeded + if fw.Status.Phase == v2.FirewallPhaseCreating && timeSinceReconcile > allocationTimeout { + c.log.Info("create timeout reached") + return firewallConditionStatus{CreateTimeout: true} } - if unhealthyTimeout != 0 && created && timeSinceAllocation > unhealthyTimeout { + if seedConnected && unhealthyTimeout != 0 && created && timeSinceReconcile > unhealthyTimeout { + c.log.Info("unhealthy timeout reached") return firewallConditionStatus{HealthTimeout: true} } + //if everything returns false, it is progressing return firewallConditionStatus{ IsReady: allConditionsMet, CreateTimeout: false, diff --git a/integration/integration_test.go b/integration/integration_test.go index 7d48b99..28928a5 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -15,6 +15,7 @@ import ( corev1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/client-go/util/retry" testcommon "github.com/metal-stack/firewall-controller-manager/integration/common" @@ -1936,6 +1937,7 @@ var _ = Context("integration test", Ordered, func() { }) Expect(k8sClient.Create(ctx, deployment())).To(Succeed()) + Eventually(func() error { firewallSetList := &v2.FirewallSetList{} err := k8sClient.List(ctx, firewallSetList, client.InNamespace(namespaceName)) @@ -1953,7 +1955,6 @@ var _ = Context("integration test", Ordered, func() { It("should simulate unhealthiness and trigger deletion", func() { firewallList := &v2.FirewallList{} Eventually(func() int { - err := k8sClient.List(ctx, firewallList, client.InNamespace(firewallSet.Namespace)) if err != nil { return 0 @@ -1961,13 +1962,36 @@ var _ = Context("integration test", Ordered, func() { return len(firewallList.Items) }, 15*time.Second, interval).Should(BeNumerically(">", 0), "Should have at least one firewall") - By("waiting for the firewall to be deleted") Eventually(func() bool { - for _, fw := range firewallList.Items { - err := k8sClient.Get(ctx, client.ObjectKeyFromObject(&fw), &v2.Firewall{}) - if !apierrors.IsNotFound(err) { + for _, item := range firewallList.Items { + var fw v2.Firewall + err := k8sClient.Get(ctx, client.ObjectKeyFromObject(&item), &fw) + if err != nil { + fmt.Printf("Failed to get firewall: %v\n", err) return false } + + if fw.Status.ControllerStatus == nil { + fw.Status.ControllerStatus = &v2.ControllerConnection{} + } + //add a fake concile so the unhealty firewall gets deleted + fw.Status.ControllerStatus.SeedUpdated.Time = time.Now().Add(-20 * 24 * time.Hour) + err = retry.RetryOnConflict(retry.DefaultRetry, func() error { + if err := k8sClient.Get(ctx, client.ObjectKeyFromObject(&fw), &fw); err != nil { + return err + } + if fw.Status.ControllerStatus == nil { + fw.Status.ControllerStatus = &v2.ControllerConnection{} + } + fw.Status.ControllerStatus.SeedUpdated.Time = time.Now().Add(-20 * 24 * time.Hour) + return k8sClient.Status().Update(ctx, &fw) + }) + + if err != nil { + fmt.Printf("Failed to update firewall status: %v\n", err) + return false + } + } return true }, 10*time.Second, interval).Should(BeTrue(), "All Firewalls should be deleted")