From 90521734cd02b34e9d8d8abe69bc951f123b5589 Mon Sep 17 00:00:00 2001 From: Arvind Thirumurugan Date: Mon, 17 Oct 2022 11:52:20 -0700 Subject: [PATCH] Address comments --- Makefile | 4 +- test/e2e/e2e_test.go | 2 +- test/e2e/join_leave_placement_test.go | 39 ++++++------- test/e2e/utils/helper.go | 8 --- test/e2e/utils/workload_test_utils.go | 8 --- test/e2e/work_api_e2e_test.go | 3 +- test/e2e/work_load_test.go | 82 ++++++++++++--------------- 7 files changed, 62 insertions(+), 84 deletions(-) diff --git a/Makefile b/Makefile index 71ff850be..848cb333b 100644 --- a/Makefile +++ b/Makefile @@ -178,7 +178,7 @@ run-e2e: build-e2e creat-kind-cluster: create-hub-kind-cluster create-member-kind-cluster install-helm .PHONY: install-helm -install-helm: docker-build-hub-agent docker-build-member-agent docker-build-refresh-token load-hub-docker-image load-member-docker-image install-member-agent-helm +install-helm: load-hub-docker-image load-member-docker-image install-member-agent-helm .PHONY: e2e-tests e2e-tests: creat-kind-cluster run-e2e @@ -227,7 +227,7 @@ run-memberagent: manifests generate fmt vet ## Run a controllers from your host. ## Images ## -------------------------------------- -OUTPUT_TYPE ?= type=docker +OUTPUT_TYPE ?= type=registry BUILDX_BUILDER_NAME ?= img-builder QEMU_VERSION ?= 5.2.0-2 diff --git a/test/e2e/e2e_test.go b/test/e2e/e2e_test.go index adfe96511..3ecaf95ea 100644 --- a/test/e2e/e2e_test.go +++ b/test/e2e/e2e_test.go @@ -71,7 +71,7 @@ var ( sortOption, } crpStatusCmpOptions = []cmp.Option{ - cmpopts.IgnoreFields(metav1.Condition{}, "ObservedGeneration", "LastTransitionTime"), + cmpopts.IgnoreFields(metav1.Condition{}, "ObservedGeneration", "LastTransitionTime", "Message"), sortOption, } diff --git a/test/e2e/join_leave_placement_test.go b/test/e2e/join_leave_placement_test.go index 5543c3966..ee2066bb6 100644 --- a/test/e2e/join_leave_placement_test.go +++ b/test/e2e/join_leave_placement_test.go @@ -17,7 +17,7 @@ import ( "k8s.io/apimachinery/pkg/types" "go.goms.io/fleet/apis/v1alpha1" - testutils "go.goms.io/fleet/test/e2e/utils" + "go.goms.io/fleet/test/e2e/utils" ) // Serial - Ginkgo will guarantee that these specs will never run in parallel with other specs. @@ -50,7 +50,7 @@ var _ = Describe("workload orchestration testing with join/leave", Serial, func( AgentStatus: imcLeftAgentStatus, Conditions: mcLeftConditions, } - testutils.CheckMemberClusterStatus(ctx, *HubCluster, &types.NamespacedName{Name: mc.Name}, wantMCStatus, mcStatusCmpOptions) + utils.CheckMemberClusterStatus(ctx, *HubCluster, &types.NamespacedName{Name: mc.Name}, wantMCStatus, mcStatusCmpOptions) By("create the resources to be propagated") cr := &rbacv1.ClusterRole{ @@ -86,12 +86,12 @@ var _ = Describe("workload orchestration testing with join/leave", Serial, func( }, }, } - testutils.CreateClusterResourcePlacement(ctx, *HubCluster, crp) + Expect(HubCluster.KubeClient.Create(ctx, crp)).Should(Succeed(), "Failed to create cluster resource placement %s in %s cluster", crp.Name, HubCluster.ClusterName) By("verify the resource is not propagated to member cluster") Consistently(func() bool { return apierrors.IsNotFound(MemberCluster.KubeClient.Get(ctx, types.NamespacedName{Name: cr.Name}, cr)) - }, testutils.PollTimeout, testutils.PollInterval).Should(BeTrue(), "Failed to verify cluster role %s is not propagated to %s cluster", cr.Name, MemberCluster.ClusterName) + }, utils.PollTimeout, utils.PollInterval).Should(BeTrue(), "Failed to verify cluster role %s is not propagated to %s cluster", cr.Name, MemberCluster.ClusterName) By("update member cluster in the hub cluster to join") Expect(HubCluster.KubeClient.Get(ctx, types.NamespacedName{Name: mc.Name}, mc)).Should(Succeed(), "Failed to retrieve member cluster %s in %s cluster", mc.Name, HubCluster.ClusterName) @@ -103,22 +103,20 @@ var _ = Describe("workload orchestration testing with join/leave", Serial, func( AgentStatus: imcJoinedAgentStatus, Conditions: mcJoinedConditions, } - testutils.CheckMemberClusterStatus(ctx, *HubCluster, &types.NamespacedName{Name: mc.Name}, wantMCStatus, mcStatusCmpOptions) + utils.CheckMemberClusterStatus(ctx, *HubCluster, &types.NamespacedName{Name: mc.Name}, wantMCStatus, mcStatusCmpOptions) By("verify that the cluster resource placement is applied") crpStatus := v1alpha1.ClusterResourcePlacementStatus{ Conditions: []metav1.Condition{ { - Message: "Successfully scheduled resources for placement", - Reason: "ScheduleSucceeded", - Status: metav1.ConditionTrue, - Type: string(v1alpha1.ResourcePlacementConditionTypeScheduled), + Reason: "ScheduleSucceeded", + Status: metav1.ConditionTrue, + Type: string(v1alpha1.ResourcePlacementConditionTypeScheduled), }, { - Message: "Successfully applied resources to member clusters", - Reason: "ApplySucceeded", - Status: metav1.ConditionTrue, - Type: string(v1alpha1.ResourcePlacementStatusConditionTypeApplied), + Reason: "ApplySucceeded", + Status: metav1.ConditionTrue, + Type: string(v1alpha1.ResourcePlacementStatusConditionTypeApplied), }, }, SelectedResources: []v1alpha1.ResourceIdentifier{ @@ -131,7 +129,7 @@ var _ = Describe("workload orchestration testing with join/leave", Serial, func( }, TargetClusters: []string{"kind-member-testing"}, } - testutils.WaitCreateClusterResourcePlacementStatus(ctx, *HubCluster, &types.NamespacedName{Name: crp.Name}, crpStatus, crpStatusCmpOptions, 3*testutils.PollTimeout) + utils.WaitCreateClusterResourcePlacementStatus(ctx, *HubCluster, &types.NamespacedName{Name: crp.Name}, crpStatus, crpStatusCmpOptions, 3*utils.PollTimeout) By("verify the resource is propagated to member cluster") Expect(MemberCluster.KubeClient.Get(ctx, types.NamespacedName{Name: cr.Name}, cr)).Should(Succeed(), "Failed to verify cluster role %s is propagated to %s cluster", cr.Name, MemberCluster.ClusterName) @@ -146,24 +144,27 @@ var _ = Describe("workload orchestration testing with join/leave", Serial, func( AgentStatus: imcLeftAgentStatus, Conditions: mcLeftConditions, } - testutils.CheckMemberClusterStatus(ctx, *HubCluster, &types.NamespacedName{Name: mc.Name}, wantMCStatus, mcStatusCmpOptions) + utils.CheckMemberClusterStatus(ctx, *HubCluster, &types.NamespacedName{Name: mc.Name}, wantMCStatus, mcStatusCmpOptions) By("verify that the resource is still on the member cluster") Consistently(func() error { return MemberCluster.KubeClient.Get(ctx, types.NamespacedName{Name: cr.Name}, cr) - }, testutils.PollTimeout, testutils.PollInterval).Should(Succeed(), "Failed to verify cluster role %s is still on %s cluster", cr.Name, MemberCluster.ClusterName) + }, utils.PollTimeout, utils.PollInterval).Should(Succeed(), "Failed to verify cluster role %s is still on %s cluster", cr.Name, MemberCluster.ClusterName) By("delete the crp from the hub") - testutils.DeleteClusterResourcePlacement(ctx, *HubCluster, crp) + utils.DeleteClusterResourcePlacement(ctx, *HubCluster, crp) By("verify that the resource is still on the member cluster") Consistently(func() error { return MemberCluster.KubeClient.Get(ctx, types.NamespacedName{Name: cr.Name, Namespace: ""}, cr) - }, testutils.PollTimeout, testutils.PollInterval).Should(Succeed(), "Failed to verify cluster role %s is still on %s cluster", cr.Name, MemberCluster.ClusterName) + }, utils.PollTimeout, utils.PollInterval).Should(Succeed(), "Failed to verify cluster role %s is still on %s cluster", cr.Name, MemberCluster.ClusterName) By("delete cluster role on hub cluster") Expect(HubCluster.KubeClient.Delete(ctx, cr)).Should(Succeed(), "Failed to delete cluster role %s in %s cluster", cr.Name, HubCluster.ClusterName) + By("delete cluster role on member cluster") + Expect(MemberCluster.KubeClient.Delete(ctx, cr)).Should(Succeed(), "Failed to delete cluster role %s in %s cluster", cr.Name, MemberCluster.ClusterName) + By("update member cluster in the hub cluster to join") Expect(HubCluster.KubeClient.Get(ctx, types.NamespacedName{Name: mc.Name}, mc)).Should(Succeed(), "Failed to retrieve member cluster %s in %s cluster", mc.Name, HubCluster.ClusterName) mc.Spec.State = v1alpha1.ClusterStateJoin @@ -174,6 +175,6 @@ var _ = Describe("workload orchestration testing with join/leave", Serial, func( AgentStatus: imcJoinedAgentStatus, Conditions: mcJoinedConditions, } - testutils.CheckMemberClusterStatus(ctx, *HubCluster, &types.NamespacedName{Name: mc.Name}, wantMCStatus, mcStatusCmpOptions) + utils.CheckMemberClusterStatus(ctx, *HubCluster, &types.NamespacedName{Name: mc.Name}, wantMCStatus, mcStatusCmpOptions) }) }) diff --git a/test/e2e/utils/helper.go b/test/e2e/utils/helper.go index a1c7565cd..34a3d691c 100644 --- a/test/e2e/utils/helper.go +++ b/test/e2e/utils/helper.go @@ -85,14 +85,6 @@ func WaitWork(ctx context.Context, cluster framework.Cluster, workName, workName }, PollTimeout, PollInterval).Should(gomega.Succeed(), "Work %s not synced", name) } -// CreateNamespace create namespace and waits for namespace to exist. -func CreateNamespace(ctx context.Context, cluster framework.Cluster, ns *corev1.Namespace) { - gomega.Expect(cluster.KubeClient.Create(ctx, ns)).Should(gomega.Succeed(), "Failed to create namespace %s in %s cluster", ns.Name, cluster.ClusterName) - gomega.Eventually(func() error { - return cluster.KubeClient.Get(ctx, types.NamespacedName{Name: ns.Name}, ns) - }, PollTimeout, PollInterval).Should(gomega.Succeed(), "Failed to wait for namespace %s to be created in %s cluster", ns.Name, cluster.ClusterName) -} - // DeleteNamespace delete namespace. func DeleteNamespace(ctx context.Context, cluster framework.Cluster, ns *corev1.Namespace) { gomega.Expect(cluster.KubeClient.Delete(context.TODO(), ns)).Should(gomega.Succeed(), "Failed to delete namespace %s in %s cluster", ns.Name, cluster.ClusterName) diff --git a/test/e2e/utils/workload_test_utils.go b/test/e2e/utils/workload_test_utils.go index f9dd221ab..3c4fe84c7 100644 --- a/test/e2e/utils/workload_test_utils.go +++ b/test/e2e/utils/workload_test_utils.go @@ -78,14 +78,6 @@ func CmpRoleBinding(ctx context.Context, cluster framework.Cluster, objectKey *t }, PollTimeout, PollInterval).Should(gomega.Succeed(), "Failed to compare actual and expected role bindings in %s cluster", cluster.ClusterName) } -// CreateClusterResourcePlacement created ClusterResourcePlacement and waits for ClusterResourcePlacement to exist in hub cluster. -func CreateClusterResourcePlacement(ctx context.Context, cluster framework.Cluster, crp *fleetv1alpha1.ClusterResourcePlacement) { - gomega.Expect(cluster.KubeClient.Create(ctx, crp)).Should(gomega.Succeed()) - gomega.Eventually(func() error { - return cluster.KubeClient.Get(ctx, types.NamespacedName{Name: crp.Name}, crp) - }, PollTimeout, PollInterval).Should(gomega.Succeed(), "Failed to create cluster resource placement %s in %s cluster", crp.Name, cluster.ClusterName) -} - // WaitCreateClusterResourcePlacementStatus waits for ClusterResourcePlacement to present on th hub cluster with a specific status. func WaitCreateClusterResourcePlacementStatus(ctx context.Context, cluster framework.Cluster, objectKey *types.NamespacedName, wantCRPStatus fleetv1alpha1.ClusterResourcePlacementStatus, crpStatusCmpOptions []cmp.Option, customTimeout time.Duration) { gotCRP := &fleetv1alpha1.ClusterResourcePlacement{} diff --git a/test/e2e/work_api_e2e_test.go b/test/e2e/work_api_e2e_test.go index 3a0d595bd..fb944c806 100644 --- a/test/e2e/work_api_e2e_test.go +++ b/test/e2e/work_api_e2e_test.go @@ -71,7 +71,8 @@ var _ = Describe("Work API Controller test", func() { Name: resourceNamespaceName, }, } - testutils.CreateNamespace(ctx, *MemberCluster, resourceNamespace) + //testutils.CreateNamespace(ctx, *MemberCluster, resourceNamespace) + Expect(MemberCluster.KubeClient.Create(ctx, resourceNamespace)).Should(Succeed(), "Failed to create namespace %s in %s cluster", resourceNamespace.Name, MemberCluster.ClusterName) }) AfterEach(func() { diff --git a/test/e2e/work_load_test.go b/test/e2e/work_load_test.go index 07e49fb1f..bbb5c4af2 100644 --- a/test/e2e/work_load_test.go +++ b/test/e2e/work_load_test.go @@ -6,22 +6,20 @@ Licensed under the MIT license. package e2e import ( - "context" - "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" corev1 "k8s.io/api/core/v1" rbacv1 "k8s.io/api/rbac/v1" - apierrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/utils/pointer" workapi "sigs.k8s.io/work-api/pkg/apis/v1alpha1" "go.goms.io/fleet/apis/v1alpha1" - testutils "go.goms.io/fleet/test/e2e/utils" + "go.goms.io/fleet/test/e2e/utils" ) var _ = Describe("workload orchestration testing", func() { @@ -70,22 +68,20 @@ var _ = Describe("workload orchestration testing", func() { Expect(HubCluster.KubeClient.Create(ctx, crp)).Should(Succeed(), "Failed to create cluster resource placement %s in %s cluster", crp.Name, HubCluster.ClusterName) By("check if work gets created for cluster resource placement") - testutils.WaitWork(ctx, *HubCluster, crp.Name, memberNamespace.Name) + utils.WaitWork(ctx, *HubCluster, crp.Name, memberNamespace.Name) By("check if cluster resource placement status is updated") crpStatus := v1alpha1.ClusterResourcePlacementStatus{ Conditions: []metav1.Condition{ { - Message: "Successfully scheduled resources for placement", - Reason: "ScheduleSucceeded", - Status: metav1.ConditionTrue, - Type: string(v1alpha1.ResourcePlacementConditionTypeScheduled), + Reason: "ScheduleSucceeded", + Status: metav1.ConditionTrue, + Type: string(v1alpha1.ResourcePlacementConditionTypeScheduled), }, { - Message: "Successfully applied resources to member clusters", - Reason: "ApplySucceeded", - Status: metav1.ConditionTrue, - Type: string(v1alpha1.ResourcePlacementStatusConditionTypeApplied), + Reason: "ApplySucceeded", + Status: metav1.ConditionTrue, + Type: string(v1alpha1.ResourcePlacementStatusConditionTypeApplied), }, }, SelectedResources: []v1alpha1.ResourceIdentifier{ @@ -98,7 +94,7 @@ var _ = Describe("workload orchestration testing", func() { }, TargetClusters: []string{"kind-member-testing"}, } - testutils.WaitCreateClusterResourcePlacementStatus(ctx, *HubCluster, &types.NamespacedName{Name: crp.Name}, crpStatus, crpStatusCmpOptions, 3*testutils.PollTimeout) + utils.WaitCreateClusterResourcePlacementStatus(ctx, *HubCluster, &types.NamespacedName{Name: crp.Name}, crpStatus, crpStatusCmpOptions, 3*utils.PollTimeout) By("check if cluster role is propagated to member cluster") ownerReferences := []metav1.OwnerReference{ @@ -111,7 +107,7 @@ var _ = Describe("workload orchestration testing", func() { } expectedClusterRole := clusterRole expectedClusterRole.OwnerReferences = ownerReferences - testutils.CmpClusterRole(ctx, *MemberCluster, &types.NamespacedName{Name: clusterRole.Name}, expectedClusterRole, resourceIgnoreOptions) + utils.CmpClusterRole(ctx, *MemberCluster, &types.NamespacedName{Name: clusterRole.Name}, expectedClusterRole, resourceIgnoreOptions) By("update cluster role in Hub cluster") rules := []rbacv1.PolicyRule{ @@ -139,21 +135,21 @@ var _ = Describe("workload orchestration testing", func() { }, Rules: rules, } - testutils.CmpClusterRole(ctx, *MemberCluster, &types.NamespacedName{Name: clusterRole.Name}, expectedClusterRole, resourceIgnoreOptions) + utils.CmpClusterRole(ctx, *MemberCluster, &types.NamespacedName{Name: clusterRole.Name}, expectedClusterRole, resourceIgnoreOptions) By("delete cluster role on hub cluster") Expect(HubCluster.KubeClient.Delete(ctx, clusterRole)).Should(Succeed(), "Failed to delete cluster role %s in %s cluster", clusterRole.Name, HubCluster.ClusterName) Eventually(func() bool { - return apierrors.IsNotFound(HubCluster.KubeClient.Get(ctx, types.NamespacedName{Name: clusterRole.Name}, clusterRole)) - }, testutils.PollTimeout, testutils.PollInterval).Should(BeTrue(), "Failed to wait for cluster role %s to be deleted in %s cluster", clusterRole.Name, HubCluster.ClusterName) + return errors.IsNotFound(HubCluster.KubeClient.Get(ctx, types.NamespacedName{Name: clusterRole.Name}, clusterRole)) + }, utils.PollTimeout, utils.PollInterval).Should(BeTrue(), "Failed to wait for cluster role %s to be deleted in %s cluster", clusterRole.Name, HubCluster.ClusterName) By("check if cluster role got deleted on member cluster") Eventually(func() bool { - return apierrors.IsNotFound(MemberCluster.KubeClient.Get(ctx, types.NamespacedName{Name: clusterRole.Name}, clusterRole)) - }, testutils.PollTimeout, testutils.PollInterval).Should(BeTrue(), "Failed to wait for cluster role %s to be deleted in %s cluster", clusterRole.Name, MemberCluster.ClusterName) + return errors.IsNotFound(MemberCluster.KubeClient.Get(ctx, types.NamespacedName{Name: clusterRole.Name}, clusterRole)) + }, utils.PollTimeout, utils.PollInterval).Should(BeTrue(), "Failed to wait for cluster role %s to be deleted in %s cluster", clusterRole.Name, MemberCluster.ClusterName) By("delete cluster resource placement on hub cluster") - testutils.DeleteClusterResourcePlacement(ctx, *HubCluster, crp) + utils.DeleteClusterResourcePlacement(ctx, *HubCluster, crp) }) It("Apply CRP selecting namespace by label and check if namespace gets propagated with role, role binding, then update existing role", func() { @@ -226,22 +222,20 @@ var _ = Describe("workload orchestration testing", func() { Expect(HubCluster.KubeClient.Create(ctx, crp)).Should(Succeed(), "Failed to create cluster resource placement %s in %s cluster", crp.Name, HubCluster.ClusterName) By("check if work gets created for cluster resource placement") - testutils.WaitWork(ctx, *HubCluster, crp.Name, memberNamespace.Name) + utils.WaitWork(ctx, *HubCluster, crp.Name, memberNamespace.Name) By("check if cluster resource placement status is updated") crpStatus := v1alpha1.ClusterResourcePlacementStatus{ Conditions: []metav1.Condition{ { - Message: "Successfully scheduled resources for placement", - Reason: "ScheduleSucceeded", - Status: metav1.ConditionTrue, - Type: string(v1alpha1.ResourcePlacementConditionTypeScheduled), + Reason: "ScheduleSucceeded", + Status: metav1.ConditionTrue, + Type: string(v1alpha1.ResourcePlacementConditionTypeScheduled), }, { - Message: "Successfully applied resources to member clusters", - Reason: "ApplySucceeded", - Status: metav1.ConditionTrue, - Type: string(v1alpha1.ResourcePlacementStatusConditionTypeApplied), + Reason: "ApplySucceeded", + Status: metav1.ConditionTrue, + Type: string(v1alpha1.ResourcePlacementStatusConditionTypeApplied), }, }, SelectedResources: []v1alpha1.ResourceIdentifier{ @@ -267,7 +261,7 @@ var _ = Describe("workload orchestration testing", func() { }, TargetClusters: []string{"kind-member-testing"}, } - testutils.WaitCreateClusterResourcePlacementStatus(ctx, *HubCluster, &types.NamespacedName{Name: crp.Name}, crpStatus, crpStatusCmpOptions, 3*testutils.PollTimeout) + utils.WaitCreateClusterResourcePlacementStatus(ctx, *HubCluster, &types.NamespacedName{Name: crp.Name}, crpStatus, crpStatusCmpOptions, 3*utils.PollTimeout) By("check if resources in namespace are propagated to member cluster") ownerReferences := []metav1.OwnerReference{ @@ -284,14 +278,14 @@ var _ = Describe("workload orchestration testing", func() { expectedNamespace.OwnerReferences = ownerReferences expectedRole.OwnerReferences = ownerReferences expectedRoleBinding.OwnerReferences = ownerReferences - testutils.CmpNamespace(ctx, *MemberCluster, &types.NamespacedName{Name: namespace1.Name}, expectedNamespace, resourceIgnoreOptions) - testutils.CmpRole(ctx, *MemberCluster, &types.NamespacedName{Name: role.Name, Namespace: role.Namespace}, expectedRole, resourceIgnoreOptions) - testutils.CmpRoleBinding(ctx, *MemberCluster, &types.NamespacedName{Name: roleBinding.Name, Namespace: roleBinding.Namespace}, expectedRoleBinding, resourceIgnoreOptions) + utils.CmpNamespace(ctx, *MemberCluster, &types.NamespacedName{Name: namespace1.Name}, expectedNamespace, resourceIgnoreOptions) + utils.CmpRole(ctx, *MemberCluster, &types.NamespacedName{Name: role.Name, Namespace: role.Namespace}, expectedRole, resourceIgnoreOptions) + utils.CmpRoleBinding(ctx, *MemberCluster, &types.NamespacedName{Name: roleBinding.Name, Namespace: roleBinding.Namespace}, expectedRoleBinding, resourceIgnoreOptions) By("check if namespace not selected by CRP doesn't exist on member cluster") Consistently(func() bool { - return apierrors.IsNotFound(MemberCluster.KubeClient.Get(ctx, types.NamespacedName{Name: namespace2.Name}, namespace2)) - }, testutils.PollTimeout, testutils.PollInterval).Should(BeTrue(), "Failed to verify namespace %s is not propagated to %s cluster", namespace2.Name, MemberCluster.ClusterName) + return errors.IsNotFound(MemberCluster.KubeClient.Get(ctx, types.NamespacedName{Name: namespace2.Name}, namespace2)) + }, utils.PollTimeout, utils.PollInterval).Should(BeTrue(), "Failed to verify namespace %s is not propagated to %s cluster", namespace2.Name, MemberCluster.ClusterName) By("update role in Hub cluster") rules := []rbacv1.PolicyRule{ @@ -312,21 +306,19 @@ var _ = Describe("workload orchestration testing", func() { expectedRole.Rules = rules By("check if role got updated in member cluster") - testutils.CmpRole(ctx, *MemberCluster, &types.NamespacedName{Name: role.Name, Namespace: role.Namespace}, expectedRole, resourceIgnoreOptions) + utils.CmpRole(ctx, *MemberCluster, &types.NamespacedName{Name: role.Name, Namespace: role.Namespace}, expectedRole, resourceIgnoreOptions) - By("delete namespace") - Expect(HubCluster.KubeClient.Delete(context.TODO(), namespace1)).Should(Succeed(), "Failed to delete namespace %s in %s cluster", namespace1.Name, HubCluster.ClusterName) - Eventually(func() bool { - return apierrors.IsNotFound(HubCluster.KubeClient.Get(ctx, types.NamespacedName{Name: namespace1.Name}, namespace1)) - }, testutils.PollTimeout, testutils.PollInterval).Should(BeTrue(), "Failed to wait for namespace %s to be deleted in %s cluster", namespace1.Name, HubCluster.ClusterName) + By("delete namespaces") + utils.DeleteNamespace(ctx, *HubCluster, namespace1) + utils.DeleteNamespace(ctx, *HubCluster, namespace2) By("check if namespace got deleted on member cluster") Eventually(func() bool { - return apierrors.IsNotFound(MemberCluster.KubeClient.Get(ctx, types.NamespacedName{Name: namespace1.Name}, namespace1)) - }, testutils.PollTimeout, testutils.PollInterval).Should(BeTrue(), "Failed to wait for cluster role %s to be deleted in %s cluster", namespace1.Name, MemberCluster.ClusterName) + return errors.IsNotFound(MemberCluster.KubeClient.Get(ctx, types.NamespacedName{Name: namespace1.Name}, namespace1)) + }, utils.PollTimeout, utils.PollInterval).Should(BeTrue(), "Failed to wait for cluster role %s to be deleted in %s cluster", namespace1.Name, MemberCluster.ClusterName) By("delete cluster resource placement on hub cluster") - testutils.DeleteClusterResourcePlacement(ctx, *HubCluster, crp) + utils.DeleteClusterResourcePlacement(ctx, *HubCluster, crp) }) }) })