Skip to content

Commit

Permalink
more deny E2Es
Browse files Browse the repository at this point in the history
  • Loading branch information
Arvind Thirumurugan committed Jan 7, 2025
1 parent d1a898b commit e104b7d
Showing 1 changed file with 278 additions and 4 deletions.
282 changes: 278 additions & 4 deletions test/e2e/placement_eviction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,75 @@ import (
testutilseviction "go.goms.io/fleet/test/utils/eviction"
)

var _ = Describe("ClusterResourcePlacement eviction of bound binding, taint cluster before eviction - No PDB specified", Ordered, Serial, func() {
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickFixed CRP, invalid eviction denied - No PDB specified", Ordered, func() {
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())

BeforeAll(func() {
By("creating work resources")
createWorkResources()

// Create the CRP.
crp := &placementv1beta1.ClusterResourcePlacement{
ObjectMeta: metav1.ObjectMeta{
Name: crpName,
// Add a custom finalizer; this would allow us to better observe
// the behavior of the controllers.
Finalizers: []string{customDeletionBlockerFinalizer},
},
Spec: placementv1beta1.ClusterResourcePlacementSpec{
Policy: &placementv1beta1.PlacementPolicy{
PlacementType: placementv1beta1.PickFixedPlacementType,
ClusterNames: allMemberClusterNames,
},
ResourceSelectors: workResourceSelector(),
},
}
Expect(hubClient.Create(ctx, crp)).To(Succeed(), "Failed to create CRP %s", crpName)
})

AfterAll(func() {
ensureCRPEvictionDeleted(crpEvictionName)
ensureCRPAndRelatedResourcesDeleted(crpName, allMemberClusters)
})

It("should update cluster resource placement status as expected", func() {
crpStatusUpdatedActual := crpStatusUpdatedActual(workResourceIdentifiers(), allMemberClusterNames, nil, "0")
Eventually(crpStatusUpdatedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to update cluster resource placement status as expected")
})

It("should place resources on the all available member clusters", checkIfPlacedWorkResourcesOnAllMemberClusters)

It("create cluster resource placement eviction targeting member cluster 1", func() {
crpe := &placementv1alpha1.ClusterResourcePlacementEviction{
ObjectMeta: metav1.ObjectMeta{
Name: crpEvictionName,
},
Spec: placementv1alpha1.PlacementEvictionSpec{
PlacementName: crpName,
ClusterName: memberCluster1EastProdName,
},
}
Expect(hubClient.Create(ctx, crpe)).To(Succeed(), "Failed to create CRP eviction %s", crpe.Name)
})

It("should update cluster resource placement eviction status as expected", func() {
crpEvictionStatusUpdatedActual := testutilseviction.StatusUpdatedActual(
ctx, hubClient, crpEvictionName,
&testutilseviction.IsValidEviction{IsValid: false, Msg: condition.EvictionInvalidPickFixedCRPMessage},
nil)
Eventually(crpEvictionStatusUpdatedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to update cluster resource placement eviction status as expected")
})

It("should ensure cluster resource placement status is unchanged", func() {
crpStatusUpdatedActual := crpStatusUpdatedActual(workResourceIdentifiers(), allMemberClusterNames, nil, "0")
Eventually(crpStatusUpdatedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to update cluster resource placement status as expected")
})

It("should still place resources on the all available member clusters", checkIfPlacedWorkResourcesOnAllMemberClusters)
})

var _ = Describe("ClusterResourcePlacement eviction of bound binding, taint cluster before eviction - No PDB specified", Ordered, func() {
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())
var taintClusterNames, noTaintClusterNames []string
Expand Down Expand Up @@ -150,7 +218,211 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding, no taint s
It("should still place resources on the all available member clusters", checkIfPlacedWorkResourcesOnAllMemberClusters)
})

var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickAll CRP, PDB specified to protect resources on all clusters, eviction denied", Ordered, func() {
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickAll CRP, PDB with MaxUnavailable set as Integer, eviction denied due to misconfigured PDB", Ordered, func() {
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())

BeforeAll(func() {
By("creating work resources")
createWorkResources()

// Create the CRP.
createCRP(crpName)
})

AfterAll(func() {
ensureCRPEvictionDeleted(crpEvictionName)
ensureCRPAndRelatedResourcesDeleted(crpName, allMemberClusters)
})

It("should update cluster resource placement status as expected", func() {
crpStatusUpdatedActual := crpStatusUpdatedActual(workResourceIdentifiers(), allMemberClusterNames, nil, "0")
Eventually(crpStatusUpdatedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to update cluster resource placement status as expected")
})

It("should place resources on the all available member clusters", checkIfPlacedWorkResourcesOnAllMemberClusters)

It("create cluster resource placement disruption budget to block eviction", func() {
crpdb := placementv1alpha1.ClusterResourcePlacementDisruptionBudget{
ObjectMeta: metav1.ObjectMeta{
Name: crpName,
},
Spec: placementv1alpha1.PlacementDisruptionBudgetSpec{
MaxUnavailable: &intstr.IntOrString{
Type: intstr.Int,
IntVal: int32(len(allMemberClusterNames)),
},
},
}
Expect(hubClient.Create(ctx, &crpdb)).To(Succeed(), "Failed to create CRP Disruption Budget %s", crpName)
})

It("create cluster resource placement eviction targeting member cluster 1", func() {
crpe := &placementv1alpha1.ClusterResourcePlacementEviction{
ObjectMeta: metav1.ObjectMeta{
Name: crpEvictionName,
},
Spec: placementv1alpha1.PlacementEvictionSpec{
PlacementName: crpName,
ClusterName: memberCluster1EastProdName,
},
}
Expect(hubClient.Create(ctx, crpe)).To(Succeed(), "Failed to create CRP eviction %s", crpe.Name)
})

It("should update cluster resource placement eviction status as expected", func() {
crpEvictionStatusUpdatedActual := testutilseviction.StatusUpdatedActual(
ctx, hubClient, crpEvictionName,
&testutilseviction.IsValidEviction{IsValid: true, Msg: condition.EvictionValidMessage},
&testutilseviction.IsExecutedEviction{IsExecuted: false, Msg: condition.EvictionBlockedMisconfiguredPDBSpecifiedMessage})
Eventually(crpEvictionStatusUpdatedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to update cluster resource placement eviction status as expected")
})

It("should ensure cluster resource placement status is unchanged", func() {
crpStatusUpdatedActual := crpStatusUpdatedActual(workResourceIdentifiers(), allMemberClusterNames, nil, "0")
Eventually(crpStatusUpdatedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to update cluster resource placement status as expected")
})

It("should still place resources on the all available member clusters", checkIfPlacedWorkResourcesOnAllMemberClusters)
})

var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickAll CRP, PDB with MaxUnavailable set as Percentage, eviction denied due to misconfigured PDB", Ordered, func() {
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())

BeforeAll(func() {
By("creating work resources")
createWorkResources()

// Create the CRP.
createCRP(crpName)
})

AfterAll(func() {
ensureCRPEvictionDeleted(crpEvictionName)
ensureCRPAndRelatedResourcesDeleted(crpName, allMemberClusters)
})

It("should update cluster resource placement status as expected", func() {
crpStatusUpdatedActual := crpStatusUpdatedActual(workResourceIdentifiers(), allMemberClusterNames, nil, "0")
Eventually(crpStatusUpdatedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to update cluster resource placement status as expected")
})

It("should place resources on the all available member clusters", checkIfPlacedWorkResourcesOnAllMemberClusters)

It("create cluster resource placement disruption budget to block eviction", func() {
crpdb := placementv1alpha1.ClusterResourcePlacementDisruptionBudget{
ObjectMeta: metav1.ObjectMeta{
Name: crpName,
},
Spec: placementv1alpha1.PlacementDisruptionBudgetSpec{
MaxUnavailable: &intstr.IntOrString{
Type: intstr.String,
StrVal: "100%",
},
},
}
Expect(hubClient.Create(ctx, &crpdb)).To(Succeed(), "Failed to create CRP Disruption Budget %s", crpName)
})

It("create cluster resource placement eviction targeting member cluster 1", func() {
crpe := &placementv1alpha1.ClusterResourcePlacementEviction{
ObjectMeta: metav1.ObjectMeta{
Name: crpEvictionName,
},
Spec: placementv1alpha1.PlacementEvictionSpec{
PlacementName: crpName,
ClusterName: memberCluster1EastProdName,
},
}
Expect(hubClient.Create(ctx, crpe)).To(Succeed(), "Failed to create CRP eviction %s", crpe.Name)
})

It("should update cluster resource placement eviction status as expected", func() {
crpEvictionStatusUpdatedActual := testutilseviction.StatusUpdatedActual(
ctx, hubClient, crpEvictionName,
&testutilseviction.IsValidEviction{IsValid: true, Msg: condition.EvictionValidMessage},
&testutilseviction.IsExecutedEviction{IsExecuted: false, Msg: condition.EvictionBlockedMisconfiguredPDBSpecifiedMessage})
Eventually(crpEvictionStatusUpdatedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to update cluster resource placement eviction status as expected")
})

It("should ensure cluster resource placement status is unchanged", func() {
crpStatusUpdatedActual := crpStatusUpdatedActual(workResourceIdentifiers(), allMemberClusterNames, nil, "0")
Eventually(crpStatusUpdatedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to update cluster resource placement status as expected")
})

It("should still place resources on the all available member clusters", checkIfPlacedWorkResourcesOnAllMemberClusters)
})

var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickAll CRP, PDB with MinAvailable set as Percentage, eviction denied due to misconfigured PDB", Ordered, func() {
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())

BeforeAll(func() {
By("creating work resources")
createWorkResources()

// Create the CRP.
createCRP(crpName)
})

AfterAll(func() {
ensureCRPEvictionDeleted(crpEvictionName)
ensureCRPAndRelatedResourcesDeleted(crpName, allMemberClusters)
})

It("should update cluster resource placement status as expected", func() {
crpStatusUpdatedActual := crpStatusUpdatedActual(workResourceIdentifiers(), allMemberClusterNames, nil, "0")
Eventually(crpStatusUpdatedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to update cluster resource placement status as expected")
})

It("should place resources on the all available member clusters", checkIfPlacedWorkResourcesOnAllMemberClusters)

It("create cluster resource placement disruption budget to block eviction", func() {
crpdb := placementv1alpha1.ClusterResourcePlacementDisruptionBudget{
ObjectMeta: metav1.ObjectMeta{
Name: crpName,
},
Spec: placementv1alpha1.PlacementDisruptionBudgetSpec{
MinAvailable: &intstr.IntOrString{
Type: intstr.String,
StrVal: "100%",
},
},
}
Expect(hubClient.Create(ctx, &crpdb)).To(Succeed(), "Failed to create CRP Disruption Budget %s", crpName)
})

It("create cluster resource placement eviction targeting member cluster 1", func() {
crpe := &placementv1alpha1.ClusterResourcePlacementEviction{
ObjectMeta: metav1.ObjectMeta{
Name: crpEvictionName,
},
Spec: placementv1alpha1.PlacementEvictionSpec{
PlacementName: crpName,
ClusterName: memberCluster1EastProdName,
},
}
Expect(hubClient.Create(ctx, crpe)).To(Succeed(), "Failed to create CRP eviction %s", crpe.Name)
})

It("should update cluster resource placement eviction status as expected", func() {
crpEvictionStatusUpdatedActual := testutilseviction.StatusUpdatedActual(
ctx, hubClient, crpEvictionName,
&testutilseviction.IsValidEviction{IsValid: true, Msg: condition.EvictionValidMessage},
&testutilseviction.IsExecutedEviction{IsExecuted: false, Msg: condition.EvictionBlockedMisconfiguredPDBSpecifiedMessage})
Eventually(crpEvictionStatusUpdatedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to update cluster resource placement eviction status as expected")
})

It("should ensure cluster resource placement status is unchanged", func() {
crpStatusUpdatedActual := crpStatusUpdatedActual(workResourceIdentifiers(), allMemberClusterNames, nil, "0")
Eventually(crpStatusUpdatedActual, eventuallyDuration, eventuallyInterval).Should(Succeed(), "Failed to update cluster resource placement status as expected")
})

It("should still place resources on the all available member clusters", checkIfPlacedWorkResourcesOnAllMemberClusters)
})

var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickAll CRP, PDB with MinAvailable specified as Integer to protect resources on all clusters, eviction denied", Ordered, func() {
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())

Expand Down Expand Up @@ -219,7 +491,7 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickAll C
It("should still place resources on the all available member clusters", checkIfPlacedWorkResourcesOnAllMemberClusters)
})

var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickAll CRP, PDB specified to protect resources in all but one cluster, eviction allowed", Ordered, Serial, func() {
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickAll CRP, PDB with MinAvailable specified as Integer to protect resources in all but one cluster, eviction allowed", Ordered, Serial, func() {
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())
var taintClusterNames, noTaintClusterNames []string
Expand Down Expand Up @@ -311,7 +583,7 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickAll C
})
})

var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP, PDB with MaxUnavailable specified to protect resources on all clusters, eviction denied", Ordered, func() {
var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP, PDB with MaxUnavailable specified as Integer to protect resources on all clusters, eviction denied", Ordered, func() {
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())

Expand Down Expand Up @@ -502,6 +774,8 @@ var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP
})
})

// eviction allowed case for MaxUnavailable specified as percentage

var _ = Describe("ClusterResourcePlacement eviction of bound binding - PickN CRP, PDB with MaxUnavailable specified as percentage to protect resources on all clusters, eviction denied", Ordered, func() {
crpName := fmt.Sprintf(crpNameTemplate, GinkgoParallelProcess())
crpEvictionName := fmt.Sprintf(crpEvictionNameTemplate, GinkgoParallelProcess())
Expand Down

0 comments on commit e104b7d

Please sign in to comment.