@@ -23,12 +23,15 @@ import (
2323 . "github.com/onsi/ginkgo/v2"
2424 . "github.com/onsi/gomega"
2525 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26+ "k8s.io/apimachinery/pkg/types"
2627 "k8s.io/apimachinery/pkg/util/intstr"
2728
29+ clusterv1beta1 "github.com/kubefleet-dev/kubefleet/apis/cluster/v1beta1"
2830 placementv1beta1 "github.com/kubefleet-dev/kubefleet/apis/placement/v1beta1"
2931 "github.com/kubefleet-dev/kubefleet/pkg/utils/condition"
3032 "github.com/kubefleet-dev/kubefleet/test/e2e/framework"
3133 testutilseviction "github.com/kubefleet-dev/kubefleet/test/utils/eviction"
34+ toolsutils "github.com/kubefleet-dev/kubefleet/tools/utils"
3235)
3336
3437var _ = Describe ("Drain cluster successfully" , Ordered , Serial , func () {
@@ -46,21 +49,7 @@ var _ = Describe("Drain cluster successfully", Ordered, Serial, func() {
4649 createWorkResources ()
4750
4851 // Create the CRP.
49- crp := & placementv1beta1.ClusterResourcePlacement {
50- ObjectMeta : metav1.ObjectMeta {
51- Name : crpName ,
52- // Add a custom finalizer; this would allow us to better observe
53- // the behavior of the controllers.
54- Finalizers : []string {customDeletionBlockerFinalizer },
55- },
56- Spec : placementv1beta1.ClusterResourcePlacementSpec {
57- Policy : & placementv1beta1.PlacementPolicy {
58- PlacementType : placementv1beta1 .PickAllPlacementType ,
59- },
60- ResourceSelectors : workResourceSelector (),
61- },
62- }
63- Expect (hubClient .Create (ctx , crp )).To (Succeed (), "Failed to create CRP %s" , crpName )
52+ createCRP (crpName )
6453 })
6554
6655 AfterAll (func () {
@@ -137,21 +126,7 @@ var _ = Describe("Drain cluster blocked - ClusterResourcePlacementDisruptionBudg
137126 createWorkResources ()
138127
139128 // Create the CRP.
140- crp := & placementv1beta1.ClusterResourcePlacement {
141- ObjectMeta : metav1.ObjectMeta {
142- Name : crpName ,
143- // Add a custom finalizer; this would allow us to better observe
144- // the behavior of the controllers.
145- Finalizers : []string {customDeletionBlockerFinalizer },
146- },
147- Spec : placementv1beta1.ClusterResourcePlacementSpec {
148- Policy : & placementv1beta1.PlacementPolicy {
149- PlacementType : placementv1beta1 .PickAllPlacementType ,
150- },
151- ResourceSelectors : workResourceSelector (),
152- },
153- }
154- Expect (hubClient .Create (ctx , crp )).To (Succeed (), "Failed to create CRP %s" , crpName )
129+ createCRP (crpName )
155130 })
156131
157132 AfterAll (func () {
@@ -210,6 +185,7 @@ var _ = Describe("Drain cluster blocked - ClusterResourcePlacementDisruptionBudg
210185 It ("should ensure cluster resource placement status remains unchanged" , func () {
211186 crpStatusUpdatedActual := crpStatusUpdatedActual (workResourceIdentifiers (), allMemberClusterNames , nil , "0" )
212187 Eventually (crpStatusUpdatedActual , eventuallyDuration , eventuallyInterval ).Should (Succeed (), "Failed to update cluster resource placement status as expected" )
188+ Consistently (crpStatusUpdatedActual , consistentlyDuration , consistentlyInterval ).Should (Succeed (), "Failed to update cluster resource placement status as expected" )
213189 })
214190
215191 It ("should still place resources on all available member clusters" , checkIfPlacedWorkResourcesOnAllMemberClusters )
@@ -237,21 +213,7 @@ var _ = Describe("Drain is allowed on one cluster, blocked on others - ClusterRe
237213 createWorkResources ()
238214
239215 // Create the CRP.
240- crp := & placementv1beta1.ClusterResourcePlacement {
241- ObjectMeta : metav1.ObjectMeta {
242- Name : crpName ,
243- // Add a custom finalizer; this would allow us to better observe
244- // the behavior of the controllers.
245- Finalizers : []string {customDeletionBlockerFinalizer },
246- },
247- Spec : placementv1beta1.ClusterResourcePlacementSpec {
248- Policy : & placementv1beta1.PlacementPolicy {
249- PlacementType : placementv1beta1 .PickAllPlacementType ,
250- },
251- ResourceSelectors : workResourceSelector (),
252- },
253- }
254- Expect (hubClient .Create (ctx , crp )).To (Succeed (), "Failed to create CRP %s" , crpName )
216+ createCRP (crpName )
255217 })
256218
257219 AfterAll (func () {
@@ -393,3 +355,35 @@ func fetchDrainEvictions() ([]placementv1beta1.ClusterResourcePlacementEviction,
393355 }
394356 return evictionList .Items , nil
395357}
358+
359+ func memberClusterCordonTaintAddedActual (mcName string ) func () error {
360+ return func () error {
361+ var mc clusterv1beta1.MemberCluster
362+ if err := hubClient .Get (ctx , types.NamespacedName {Name : mcName }, & mc ); err != nil {
363+ return fmt .Errorf ("failed to get member cluster %s: %w" , mcName , err )
364+ }
365+
366+ for _ , taint := range mc .Spec .Taints {
367+ if taint == toolsutils .CordonTaint {
368+ return nil
369+ }
370+ }
371+ return fmt .Errorf ("cordon taint not found on member cluster %s" , mcName )
372+ }
373+ }
374+
375+ func memberClusterCordonTaintRemovedActual (mcName string ) func () error {
376+ return func () error {
377+ var mc clusterv1beta1.MemberCluster
378+ if err := hubClient .Get (ctx , types.NamespacedName {Name : mcName }, & mc ); err != nil {
379+ return fmt .Errorf ("failed to get member cluster %s: %w" , mcName , err )
380+ }
381+
382+ for _ , taint := range mc .Spec .Taints {
383+ if taint == toolsutils .CordonTaint {
384+ return fmt .Errorf ("cordon taint found on member cluster %s" , mcName )
385+ }
386+ }
387+ return nil
388+ }
389+ }
0 commit comments