diff --git a/pkg/controller/resourceclaim/controller_test.go b/pkg/controller/resourceclaim/controller_test.go index b7a98ffa13ec8..bb0a5af6c99b6 100644 --- a/pkg/controller/resourceclaim/controller_test.go +++ b/pkg/controller/resourceclaim/controller_test.go @@ -293,6 +293,19 @@ func TestSyncHandler(t *testing.T) { }(), expectedMetrics: expectedMetrics{0, 0}, }, + { + name: "clear-reserved-delayed-allocation-structured", + pods: []*v1.Pod{}, + key: claimKey(testClaimReserved), + claims: []*resourcev1alpha2.ResourceClaim{structuredParameters(testClaimReserved)}, + expectedClaims: func() []resourcev1alpha2.ResourceClaim { + claim := testClaimAllocated.DeepCopy() + claim.Finalizers = []string{} + claim.Status.Allocation = nil + return []resourcev1alpha2.ResourceClaim{*claim} + }(), + expectedMetrics: expectedMetrics{0, 0}, + }, { name: "clear-reserved-immediate-allocation", pods: []*v1.Pod{}, @@ -309,6 +322,62 @@ func TestSyncHandler(t *testing.T) { }(), expectedMetrics: expectedMetrics{0, 0}, }, + { + name: "clear-reserved-immediate-allocation-structured", + pods: []*v1.Pod{}, + key: claimKey(testClaimReserved), + claims: func() []*resourcev1alpha2.ResourceClaim { + claim := structuredParameters(testClaimReserved.DeepCopy()) + claim.Spec.AllocationMode = resourcev1alpha2.AllocationModeImmediate + return []*resourcev1alpha2.ResourceClaim{claim} + }(), + expectedClaims: func() []resourcev1alpha2.ResourceClaim { + claim := structuredParameters(testClaimAllocated.DeepCopy()) + claim.Spec.AllocationMode = resourcev1alpha2.AllocationModeImmediate + return []resourcev1alpha2.ResourceClaim{*claim} + }(), + expectedMetrics: expectedMetrics{0, 0}, + }, + { + name: "clear-reserved-immediate-allocation-structured-deleted", + pods: []*v1.Pod{}, + key: claimKey(testClaimReserved), + claims: func() []*resourcev1alpha2.ResourceClaim { + claim := structuredParameters(testClaimReserved.DeepCopy()) + claim.Spec.AllocationMode = resourcev1alpha2.AllocationModeImmediate + claim.DeletionTimestamp = &metav1.Time{} + return []*resourcev1alpha2.ResourceClaim{claim} + }(), + expectedClaims: func() []resourcev1alpha2.ResourceClaim { + claim := structuredParameters(testClaimAllocated.DeepCopy()) + claim.Spec.AllocationMode = resourcev1alpha2.AllocationModeImmediate + claim.DeletionTimestamp = &metav1.Time{} + claim.Finalizers = []string{} + claim.Status.Allocation = nil + return []resourcev1alpha2.ResourceClaim{*claim} + }(), + expectedMetrics: expectedMetrics{0, 0}, + }, + { + name: "immediate-allocation-structured-deleted", + pods: []*v1.Pod{}, + key: claimKey(testClaimReserved), + claims: func() []*resourcev1alpha2.ResourceClaim { + claim := structuredParameters(testClaimAllocated.DeepCopy()) + claim.Spec.AllocationMode = resourcev1alpha2.AllocationModeImmediate + claim.DeletionTimestamp = &metav1.Time{} + return []*resourcev1alpha2.ResourceClaim{claim} + }(), + expectedClaims: func() []resourcev1alpha2.ResourceClaim { + claim := structuredParameters(testClaimAllocated.DeepCopy()) + claim.Spec.AllocationMode = resourcev1alpha2.AllocationModeImmediate + claim.DeletionTimestamp = &metav1.Time{} + claim.Finalizers = []string{} + claim.Status.Allocation = nil + return []resourcev1alpha2.ResourceClaim{*claim} + }(), + expectedMetrics: expectedMetrics{0, 0}, + }, { name: "clear-reserved-when-done-delayed-allocation", pods: func() []*v1.Pod { @@ -546,6 +615,14 @@ func allocateClaim(claim *resourcev1alpha2.ResourceClaim) *resourcev1alpha2.Reso return claim } +func structuredParameters(claim *resourcev1alpha2.ResourceClaim) *resourcev1alpha2.ResourceClaim { + claim = claim.DeepCopy() + // As far the controller is concerned, a claim was allocated by us if it has + // this finalizer. For testing we don't need to update the allocation result. + claim.Finalizers = append(claim.Finalizers, resourcev1alpha2.Finalizer) + return claim +} + func reserveClaim(claim *resourcev1alpha2.ResourceClaim, pod *v1.Pod) *resourcev1alpha2.ResourceClaim { claim = claim.DeepCopy() claim.Status.ReservedFor = append(claim.Status.ReservedFor,