From 81abfca4078fee860e7bb744989df01f955905e6 Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Wed, 19 Jul 2023 13:45:58 +0300 Subject: [PATCH 1/2] Add a haveKeys() helper function to match multiple keys Signed-off-by: Itamar Holder --- test/e2e_node/resource_metrics_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/e2e_node/resource_metrics_test.go b/test/e2e_node/resource_metrics_test.go index edb0808f646..20812a02461 100644 --- a/test/e2e_node/resource_metrics_test.go +++ b/test/e2e_node/resource_metrics_test.go @@ -165,3 +165,18 @@ func boundedSample(lower, upper interface{}) types.GomegaMatcher { "Histogram": gstruct.Ignore(), })) } + +func haveKeys(keys ...string) types.GomegaMatcher { + gomega.ExpectWithOffset(1, keys).ToNot(gomega.BeEmpty()) + matcher := gomega.HaveKey(keys[0]) + + if len(keys) == 1 { + return matcher + } + + for _, key := range keys[1:] { + matcher = gomega.And(matcher, gomega.HaveKey(key)) + } + + return matcher +} From ee82654e398a8adc82b775c47d5f6535ae82ed39 Mon Sep 17 00:00:00 2001 From: Itamar Holder Date: Wed, 19 Jul 2023 13:46:38 +0300 Subject: [PATCH 2/2] Add pod_swap_usage_bytes as an expected metric in e2e test Use haveKeys() matcher from previous commit to ensure required keys exist. Signed-off-by: Itamar Holder --- test/e2e_node/resource_metrics_test.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/test/e2e_node/resource_metrics_test.go b/test/e2e_node/resource_metrics_test.go index 20812a02461..ce44735ee2c 100644 --- a/test/e2e_node/resource_metrics_test.go +++ b/test/e2e_node/resource_metrics_test.go @@ -73,7 +73,7 @@ var _ = SIGDescribe("ResourceMetricsAPI [NodeFeature:ResourceMetrics]", func() { memoryCapacity := node.Status.Capacity["memory"] memoryLimit := memoryCapacity.Value() - matchResourceMetrics := gstruct.MatchAllKeys(gstruct.Keys{ + matchResourceMetrics := gomega.And(gstruct.MatchKeys(gstruct.IgnoreMissing, gstruct.Keys{ "scrape_error": gstruct.Ignore(), "node_cpu_usage_seconds_total": gstruct.MatchAllElements(nodeID, gstruct.Elements{ "": boundedSample(1, 1e6), @@ -106,7 +106,15 @@ var _ = SIGDescribe("ResourceMetricsAPI [NodeFeature:ResourceMetrics]", func() { fmt.Sprintf("%s::%s", f.Namespace.Name, pod0): boundedSample(10*e2evolume.Kb, 80*e2evolume.Mb), fmt.Sprintf("%s::%s", f.Namespace.Name, pod1): boundedSample(10*e2evolume.Kb, 80*e2evolume.Mb), }), - }) + + "pod_swap_usage_bytes": gstruct.MatchElements(podID, gstruct.IgnoreExtras, gstruct.Elements{ + fmt.Sprintf("%s::%s", f.Namespace.Name, pod0): boundedSample(0*e2evolume.Kb, 80*e2evolume.Mb), + fmt.Sprintf("%s::%s", f.Namespace.Name, pod1): boundedSample(0*e2evolume.Kb, 80*e2evolume.Mb), + }), + }), + haveKeys("scrape_error", "node_cpu_usage_seconds_total", "node_memory_working_set_bytes", "container_cpu_usage_seconds_total", + "container_memory_working_set_bytes", "container_start_time_seconds", "pod_cpu_usage_seconds_total", "pod_memory_working_set_bytes"), + ) ginkgo.By("Giving pods a minute to start up and produce metrics") gomega.Eventually(ctx, getResourceMetrics, 1*time.Minute, 15*time.Second).Should(matchResourceMetrics) ginkgo.By("Ensuring the metrics match the expectations a few more times")