e2e metrics: skip tests when metrics grabbing is disabled

The MetricsGrabber checked whether a component supported metrics
grabbing, but then tests didn't have an API to use the result of that
check. Because metrics grabbing is an optional debug feature, tests
must skip checks that depend on metrics data or, when the entire
test is about metrics data, skip the test.

This is now supported with a special error that gets wrapped and
returned by the individual Grab functions.
This commit is contained in:
Patrick Ohly
2021-06-03 10:36:02 +02:00
parent 1d3420ca72
commit a4c7e91b59
2 changed files with 37 additions and 10 deletions

View File

@@ -18,6 +18,7 @@ package monitoring
import (
"context"
"errors"
"fmt"
"strings"
"time"
@@ -30,6 +31,7 @@ import (
"k8s.io/kubernetes/test/e2e/framework"
e2emetrics "k8s.io/kubernetes/test/e2e/framework/metrics"
e2enode "k8s.io/kubernetes/test/e2e/framework/node"
e2eskipper "k8s.io/kubernetes/test/e2e/framework/skipper"
instrumentation "k8s.io/kubernetes/test/e2e/instrumentation/common"
)
@@ -65,6 +67,9 @@ var _ = instrumentation.SIGDescribe("MetricsGrabber", func() {
ginkgo.It("should grab all metrics from API server.", func() {
ginkgo.By("Connecting to /metrics endpoint")
response, err := grabber.GrabFromAPIServer()
if errors.Is(err, e2emetrics.MetricsGrabbingDisabledError) {
e2eskipper.Skipf("%v", err)
}
framework.ExpectNoError(err)
gomega.Expect(response).NotTo(gomega.BeEmpty())
})
@@ -72,6 +77,9 @@ var _ = instrumentation.SIGDescribe("MetricsGrabber", func() {
ginkgo.It("should grab all metrics from a Kubelet.", func() {
ginkgo.By("Proxying to Node through the API server")
node, err := e2enode.GetRandomReadySchedulableNode(f.ClientSet)
if errors.Is(err, e2emetrics.MetricsGrabbingDisabledError) {
e2eskipper.Skipf("%v", err)
}
framework.ExpectNoError(err)
response, err := grabber.GrabFromKubelet(node.Name)
framework.ExpectNoError(err)
@@ -81,10 +89,13 @@ var _ = instrumentation.SIGDescribe("MetricsGrabber", func() {
ginkgo.It("should grab all metrics from a Scheduler.", func() {
ginkgo.By("Proxying to Pod through the API server")
if !masterRegistered {
framework.Logf("Master is node api.Registry. Skipping testing Scheduler metrics.")
e2eskipper.Skipf("Master is node api.Registry. Skipping testing Scheduler metrics.")
return
}
response, err := grabber.GrabFromScheduler()
if errors.Is(err, e2emetrics.MetricsGrabbingDisabledError) {
e2eskipper.Skipf("%v", err)
}
framework.ExpectNoError(err)
gomega.Expect(response).NotTo(gomega.BeEmpty())
})
@@ -92,10 +103,13 @@ var _ = instrumentation.SIGDescribe("MetricsGrabber", func() {
ginkgo.It("should grab all metrics from a ControllerManager.", func() {
ginkgo.By("Proxying to Pod through the API server")
if !masterRegistered {
framework.Logf("Master is node api.Registry. Skipping testing ControllerManager metrics.")
e2eskipper.Skipf("Master is node api.Registry. Skipping testing ControllerManager metrics.")
return
}
response, err := grabber.GrabFromControllerManager()
if errors.Is(err, e2emetrics.MetricsGrabbingDisabledError) {
e2eskipper.Skipf("%v", err)
}
framework.ExpectNoError(err)
gomega.Expect(response).NotTo(gomega.BeEmpty())
})