From 4d61ba787d5e0cf303ef454431619b078990c5d9 Mon Sep 17 00:00:00 2001 From: yongruilin Date: Fri, 10 Oct 2025 17:58:26 +0000 Subject: [PATCH] test(validation): Add tests for status.ReservedFor maxItems validation --- .../declarative_validation_test.go | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/pkg/registry/resource/resourceclaim/declarative_validation_test.go b/pkg/registry/resource/resourceclaim/declarative_validation_test.go index 83be68c25c0..f5fa1004650 100644 --- a/pkg/registry/resource/resourceclaim/declarative_validation_test.go +++ b/pkg/registry/resource/resourceclaim/declarative_validation_test.go @@ -632,6 +632,21 @@ func TestValidateStatusUpdateForDeclarative(t *testing.T) { field.Duplicate(field.NewPath("status", "reservedFor").Index(4), ""), }, }, + "invalid status.ReservedFor, too many": { + old: mkValidResourceClaim(), + update: mkResourceClaimWithStatus( + tweakStatusReservedFor(generateResourceClaimReferences(257)...), + ), + expectedErrs: field.ErrorList{ + field.TooMany(field.NewPath("status", "reservedFor"), 257, 256).WithOrigin("maxItems"), + }, + }, + "valid status.ReservedFor, max items": { + old: mkValidResourceClaim(), + update: mkResourceClaimWithStatus( + tweakStatusReservedFor(generateResourceClaimReferences(256)...), + ), + }, } for k, tc := range testCases { t.Run(k, func(t *testing.T) { @@ -777,6 +792,18 @@ func resourceClaimReference(uid string) resource.ResourceClaimConsumerReference } } +func generateResourceClaimReferences(count int) []resource.ResourceClaimConsumerReference { + refs := make([]resource.ResourceClaimConsumerReference, count) + for i := 0; i < count; i++ { + refs[i] = resource.ResourceClaimConsumerReference{ + Resource: "pods", + Name: fmt.Sprintf("pod-%d", i), + UID: types.UID(uuid.New().String()), + } + } + return refs +} + func tweakStatusReservedFor(refs ...resource.ResourceClaimConsumerReference) func(rc *resource.ResourceClaim) { return func(rc *resource.ResourceClaim) { rc.Status.ReservedFor = refs