From 711cef90c820cd9d24693ebc7bf2a5f1f2b163c3 Mon Sep 17 00:00:00 2001 From: Corentin Pitrel <33176298+CorentinPtrl@users.noreply.github.com> Date: Mon, 8 Dec 2025 09:37:19 +0100 Subject: [PATCH] fix(e2e): resourcepool condition (#1773) Signed-off-by: CorentinPtrl --- e2e/resourcepool_test.go | 85 +++++++++++++++++++++++++++++++++++++--- 1 file changed, 79 insertions(+), 6 deletions(-) diff --git a/e2e/resourcepool_test.go b/e2e/resourcepool_test.go index a30e2816..9eb65437 100644 --- a/e2e/resourcepool_test.go +++ b/e2e/resourcepool_test.go @@ -5,6 +5,8 @@ package e2e import ( "context" + "slices" + "strings" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -832,7 +834,13 @@ var _ = Describe("ResourcePool Tests", Label("resourcepool"), func() { err = k8sClient.Get(context.TODO(), client.ObjectKey{Name: claim.Name, Namespace: claim.Namespace}, claim) Expect(err).Should(Succeed()) - Expect(claim.Status.Condition.Message).To(Equal("requested: requests.cpu=4, available: requests.cpu=2"), "Actual message"+claim.Status.Condition.Message) + conditions := extractResourcePoolMessage(claim.Status.Condition.Message) + expected := []string{ + "requested.requests.cpu=4", + "available.requests.cpu=2", + } + + Expect(containsAll(conditions, expected)).To(BeTrue(), "Actual message"+claim.Status.Condition.Message) Expect(claim.Status.Condition.Reason).To(Equal(meta.PoolExhaustedReason)) Expect(claim.Status.Condition.Status).To(Equal(metav1.ConditionFalse)) Expect(claim.Status.Condition.Type).To(Equal(meta.BoundCondition)) @@ -934,7 +942,13 @@ var _ = Describe("ResourcePool Tests", Label("resourcepool"), func() { err = k8sClient.Get(context.TODO(), client.ObjectKey{Name: claim.Name, Namespace: claim.Namespace}, claim) Expect(err).Should(Succeed()) - Expect(claim.Status.Condition.Message).To(Equal("requested: requests.cpu=4, available: requests.cpu=0"), "Actual message"+claim.Status.Condition.Message) + conditions := extractResourcePoolMessage(claim.Status.Condition.Message) + expected := []string{ + "requested.requests.cpu=4", + "available.requests.cpu=0", + } + + Expect(containsAll(conditions, expected)).To(BeTrue(), "Actual message"+claim.Status.Condition.Message) Expect(claim.Status.Condition.Reason).To(Equal(meta.PoolExhaustedReason)) Expect(claim.Status.Condition.Status).To(Equal(metav1.ConditionFalse)) Expect(claim.Status.Condition.Type).To(Equal(meta.BoundCondition)) @@ -1090,7 +1104,13 @@ var _ = Describe("ResourcePool Tests", Label("resourcepool"), func() { err = k8sClient.Get(context.TODO(), client.ObjectKey{Name: claim.Name, Namespace: claim.Namespace}, claim) Expect(err).Should(Succeed()) - Expect(claim.Status.Condition.Message).To(Equal("requested: requests.cpu=4, available: requests.cpu=2"), "Actual message"+claim.Status.Condition.Message) + conditions := extractResourcePoolMessage(claim.Status.Condition.Message) + expected := []string{ + "requested.requests.cpu=4", + "available.requests.cpu=2", + } + + Expect(containsAll(conditions, expected)).To(BeTrue(), "Actual message"+claim.Status.Condition.Message) Expect(claim.Status.Condition.Reason).To(Equal(meta.PoolExhaustedReason)) Expect(claim.Status.Condition.Status).To(Equal(metav1.ConditionFalse)) Expect(claim.Status.Condition.Type).To(Equal(meta.BoundCondition)) @@ -1117,7 +1137,13 @@ var _ = Describe("ResourcePool Tests", Label("resourcepool"), func() { err = k8sClient.Get(context.TODO(), client.ObjectKey{Name: claim.Name, Namespace: claim.Namespace}, claim) Expect(err).Should(Succeed()) - Expect(claim.Status.Condition.Message).To(Equal("requested: limits.cpu=4, available: limits.cpu=2"), "Actual message"+claim.Status.Condition.Message) + conditions := extractResourcePoolMessage(claim.Status.Condition.Message) + expected := []string{ + "requested.limits.cpu=4", + "available.limits.cpu=2", + } + + Expect(containsAll(conditions, expected)).To(BeTrue(), "Actual message"+claim.Status.Condition.Message) Expect(claim.Status.Condition.Reason).To(Equal(meta.PoolExhaustedReason)) Expect(claim.Status.Condition.Status).To(Equal(metav1.ConditionFalse)) Expect(claim.Status.Condition.Type).To(Equal(meta.BoundCondition)) @@ -1145,7 +1171,15 @@ var _ = Describe("ResourcePool Tests", Label("resourcepool"), func() { err = k8sClient.Get(context.TODO(), client.ObjectKey{Name: claim.Name, Namespace: claim.Namespace}, claim) Expect(err).Should(Succeed()) - Expect(claim.Status.Condition.Message).To(Equal("requested: limits.cpu=2, queued: limits.cpu=4; requested: requests.cpu=2, queued: requests.cpu=4"), "Actual message"+claim.Status.Condition.Message) + conditions := extractResourcePoolMessage(claim.Status.Condition.Message) + expected := []string{ + "requested.limits.cpu=2", + "queued.limits.cpu=4", + "requested.requests.cpu=2", + "queued.requests.cpu=4", + } + + Expect(containsAll(conditions, expected)).To(BeTrue(), "Actual message"+claim.Status.Condition.Message) Expect(claim.Status.Condition.Reason).To(Equal(meta.QueueExhaustedReason)) Expect(claim.Status.Condition.Status).To(Equal(metav1.ConditionFalse)) Expect(claim.Status.Condition.Type).To(Equal(meta.BoundCondition)) @@ -1275,8 +1309,15 @@ var _ = Describe("ResourcePool Tests", Label("resourcepool"), func() { err = k8sClient.Get(context.TODO(), client.ObjectKey{Name: claim.Name, Namespace: claim.Namespace}, claim) Expect(err).Should(Succeed()) + conditions := extractResourcePoolMessage(claim.Status.Condition.Message) + expected := []string{ + "requested.limits.cpu=2", + "available.limits.cpu=0", + "requested.requests.cpu=2", + "available.requests.cpu=0", + } - Expect(claim.Status.Condition.Message).To(Equal("requested: limits.cpu=2, available: limits.cpu=0; requested: requests.cpu=2, available: requests.cpu=0"), "Actual message "+claim.Status.Condition.Message) + Expect(containsAll(conditions, expected)).To(BeTrue(), "Actual message"+claim.Status.Condition.Message) Expect(claim.Status.Condition.Reason).To(Equal(meta.PoolExhaustedReason)) Expect(claim.Status.Condition.Status).To(Equal(metav1.ConditionFalse)) Expect(claim.Status.Condition.Type).To(Equal(meta.BoundCondition)) @@ -2024,3 +2065,35 @@ func isBoundToPool(pool *capsulev1beta2.ResourcePool, claim *capsulev1beta2.Reso return true } + +func containsAll[T comparable](haystack []T, needles []T) bool { + for _, n := range needles { + if !slices.Contains(haystack, n) { + return false + } + } + return true +} + +func extractResourcePoolMessage(msg string) []string { + var out []string + + parts := strings.FieldsFunc(msg, func(r rune) bool { + return r == ',' || r == ';' + }) + + for _, p := range parts { + p = strings.TrimSpace(p) + + kv := strings.SplitN(p, ": ", 2) + if len(kv) != 2 { + continue + } + + kind := kv[0] + value := kv[1] + + out = append(out, kind+"."+value) + } + return out +}