Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 33 additions & 4 deletions test/e2e/actuals_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ package e2e

import (
"fmt"
"strings"
"time"

"github.com/google/go-cmp/cmp"
. "github.com/onsi/ginkgo/v2"
Expand Down Expand Up @@ -982,12 +984,39 @@ func safeRolloutWorkloadCRPStatusUpdatedActual(wantSelectedResourceIdentifiers [
}

func workNamespaceRemovedFromClusterActual(cluster *framework.Cluster) func() error {
client := cluster.KubeClient

ns := appNamespace()
return func() error {
if err := client.Get(ctx, types.NamespacedName{Name: ns.Name}, &corev1.Namespace{}); !errors.IsNotFound(err) {
return fmt.Errorf("work namespace %s still exists or an unexpected error occurred: %w", ns.Name, err)
if err := cluster.KubeClient.Get(ctx, types.NamespacedName{Name: ns.Name}, &ns); !errors.IsNotFound(err) {
if err == nil {
// List all pods and configmaps in the namespace
podList := &corev1.PodList{}
if listErr := cluster.KubeClient.List(ctx, podList, client.InNamespace(ns.Name)); listErr != nil {
return fmt.Errorf("work namespace %s still exists on cluster %s but failed to list pods: %w, ns deletion timestamp: %v, current timestamp: %v",
ns.Name, cluster.ClusterName, listErr, ns.GetDeletionTimestamp(), time.Now())
}
configMapList := &corev1.ConfigMapList{}
if listErr := cluster.KubeClient.List(ctx, configMapList, client.InNamespace(ns.Name)); listErr != nil {
return fmt.Errorf("work namespace %s still exists on cluster %s but failed to list configmaps: %w, ns deletion timestamp: %v, current timestamp: %v",
ns.Name, cluster.ClusterName, listErr, ns.GetDeletionTimestamp(), time.Now())
}

// Build resource status summary
var resourceStatus strings.Builder
resourceStatus.WriteString(fmt.Sprintf("\nList pods and configmaps in namespace %s:\n", ns.Name))
for _, item := range podList.Items {
resourceStatus.WriteString(fmt.Sprintf("- Pod: %s/%s\n", item.GetNamespace(), item.GetName()))
resourceStatus.WriteString(fmt.Sprintf(" DeletionTimestamp: %v\n", item.GetDeletionTimestamp()))
resourceStatus.WriteString(fmt.Sprintf(" Finalizers: %v\n", item.GetFinalizers()))
}
for _, item := range configMapList.Items {
resourceStatus.WriteString(fmt.Sprintf("- ConfigMap: %s/%s\n", item.GetNamespace(), item.GetName()))
resourceStatus.WriteString(fmt.Sprintf(" DeletionTimestamp: %v\n", item.GetDeletionTimestamp()))
resourceStatus.WriteString(fmt.Sprintf(" Finalizers: %v\n", item.GetFinalizers()))
}
return fmt.Errorf("work namespace %s still exists on cluster %s: deletion timestamp: %v, current timestamp: %v, resources: %s",
ns.Name, cluster.ClusterName, ns.GetDeletionTimestamp(), time.Now(), resourceStatus.String())
}
return fmt.Errorf("getting work namespace %s failed: %w", ns.Name, err)
}
return nil
}
Expand Down
30 changes: 6 additions & 24 deletions test/e2e/placement_eviction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,10 +159,7 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding, taint clus
})

It("should ensure no resources exist on evicted member cluster with taint", func() {
for _, cluster := range taintClusters {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(cluster)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to check if resources doesn't exist on member cluster")
}
checkIfRemovedWorkResourcesFromMemberClusters(taintClusters)
})

It("should update cluster resource placement status as expected", func() {
Expand Down Expand Up @@ -583,10 +580,7 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickAll C
})

It("should ensure no resources exist on evicted member cluster with taint", func() {
for _, cluster := range taintClusters {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(cluster)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to check if resources doesn't exist on member cluster")
}
checkIfRemovedWorkResourcesFromMemberClusters(taintClusters)
})

It("should update cluster resource placement status as expected", func() {
Expand Down Expand Up @@ -776,10 +770,7 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP
})

It("should ensure no resources exist on evicted member cluster with taint", func() {
for _, cluster := range taintClusters {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(cluster)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to check if resources doesn't exist on member cluster")
}
checkIfRemovedWorkResourcesFromMemberClusters(taintClusters)
})

It("should update cluster resource placement status as expected", func() {
Expand Down Expand Up @@ -885,10 +876,7 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP
})

It("should ensure no resources exist on evicted member cluster with taint", func() {
for _, cluster := range taintClusters {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(cluster)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to check if resources doesn't exist on member cluster")
}
checkIfRemovedWorkResourcesFromMemberClusters(taintClusters)
})

It("should update cluster resource placement status as expected", func() {
Expand Down Expand Up @@ -1170,10 +1158,7 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP
})

It("should ensure no resources exist on evicted member cluster with taint", func() {
for _, cluster := range taintClusters {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(cluster)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to check if resources doesn't exist on member cluster")
}
checkIfRemovedWorkResourcesFromMemberClusters(taintClusters)
})

It("should update cluster resource placement status as expected", func() {
Expand Down Expand Up @@ -1279,10 +1264,7 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP
})

It("should ensure no resources exist on evicted member cluster with taint", func() {
for _, cluster := range taintClusters {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(cluster)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to check if resources doesn't exist on member cluster")
}
checkIfRemovedWorkResourcesFromMemberClusters(taintClusters)
})

It("should update cluster resource placement status as expected", func() {
Expand Down
6 changes: 2 additions & 4 deletions test/e2e/placement_pickall_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -293,8 +293,7 @@ var _ = Describe("placing resources using a CRP of PickAll placement type", func
})

It("should remove resources on previously matched clusters", func() {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(memberCluster1EastProd)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to remove resources on previously matched clusters")
checkIfRemovedWorkResourcesFromMemberClusters([]*framework.Cluster{memberCluster1EastProd})
})

AfterAll(func() {
Expand Down Expand Up @@ -918,8 +917,7 @@ var _ = Describe("placing resources using a CRP of PickAll placement type", func
})

It("should remove resources on previously matched clusters", func() {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(memberCluster2EastCanary)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to remove resources on previously matched clusters")
checkIfRemovedWorkResourcesFromMemberClusters([]*framework.Cluster{memberCluster2EastCanary})
})

AfterAll(func() {
Expand Down
3 changes: 1 addition & 2 deletions test/e2e/placement_pickfixed_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,7 @@ var _ = Describe("placing resources using a CRP of PickFixed placement type", fu
})

It("should remove resources from previously specified clusters", func() {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(memberCluster1EastProd)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to remove resources from previously specified clusters")
checkIfRemovedWorkResourcesFromMemberClusters([]*framework.Cluster{memberCluster1EastProd})
})

AfterAll(func() {
Expand Down
11 changes: 3 additions & 8 deletions test/e2e/placement_pickn_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,7 @@ var _ = Describe("placing resources using a CRP of PickN placement", func() {
})

It("should remove resources from the downscaled clusters", func() {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(memberCluster2EastCanary)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to remove resources from the downscaled clusters")
checkIfRemovedWorkResourcesFromMemberClusters([]*framework.Cluster{memberCluster2EastCanary})
})

AfterAll(func() {
Expand Down Expand Up @@ -411,8 +410,7 @@ var _ = Describe("placing resources using a CRP of PickN placement", func() {
})

It("should remove resources from the unpicked clusters", func() {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(memberCluster2EastCanary)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to remove resources from the downscaled clusters")
checkIfRemovedWorkResourcesFromMemberClusters([]*framework.Cluster{memberCluster2EastCanary})
})

AfterAll(func() {
Expand Down Expand Up @@ -548,10 +546,7 @@ var _ = Describe("placing resources using a CRP of PickN placement", func() {

It("should remove resources from the downscaled clusters", func() {
downscaledClusters := []*framework.Cluster{memberCluster3WestProd, memberCluster2EastCanary}
for _, cluster := range downscaledClusters {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(cluster)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to remove resources from the downscaled clusters")
}
checkIfRemovedWorkResourcesFromMemberClusters(downscaledClusters)
})

It("should update CRP status as expected", func() {
Expand Down
15 changes: 3 additions & 12 deletions test/e2e/taint_toleration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,10 +114,7 @@ var _ = Describe("placing resources using a cluster resource placement with no p
})

It("should ensure no resources exist on member clusters with taint", func() {
for _, cluster := range taintClusters {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(cluster)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to check if resources doesn't exist on member cluster")
}
checkIfRemovedWorkResourcesFromMemberClusters(taintClusters)
})

It("should place resources on the selected cluster without taint", func() {
Expand Down Expand Up @@ -190,10 +187,7 @@ var _ = Describe("placing resources using a cluster resource placement with no p
})

It("should ensure no resources exist on member clusters with taint", func() {
for _, cluster := range taintClusters {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(cluster)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to check if resources doesn't exist on member cluster")
}
checkIfRemovedWorkResourcesFromMemberClusters(taintClusters)
})

It("should place resources on the selected cluster without taint", func() {
Expand Down Expand Up @@ -307,10 +301,7 @@ var _ = Describe("picking N clusters with affinities and topology spread constra
})

It("should ensure no resources exist on member clusters with untolerated taint", func() {
for _, cluster := range unSelectedClusters {
resourceRemovedActual := workNamespaceRemovedFromClusterActual(cluster)
Eventually(resourceRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to check if resources doesn't exist on member cluster")
}
checkIfRemovedWorkResourcesFromMemberClusters(unSelectedClusters)
})

AfterAll(func() {
Expand Down
2 changes: 1 addition & 1 deletion test/e2e/utils_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -754,7 +754,7 @@ func checkIfRemovedWorkResourcesFromMemberClusters(clusters []*framework.Cluster
memberCluster := clusters[idx]

workResourcesRemovedActual := workNamespaceRemovedFromClusterActual(memberCluster)
Eventually(workResourcesRemovedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to remove work resources from member cluster %s", memberCluster.ClusterName)
Eventually(workResourcesRemovedActual, workloadEventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to remove work resources from member cluster %s", memberCluster.ClusterName)
}
}

Expand Down
Loading