From 159163247e1f54e08ab3389b1cbe3bb7f36cdadd Mon Sep 17 00:00:00 2001 From: RainbowMango Date: Mon, 30 Sep 2019 10:17:32 +0800 Subject: [PATCH] Introduce testutil package to support metrics testing. --- .../metrics/legacyregistry/registry.go | 2 +- .../metrics/testutil/testutil.go | 33 +++++++++++++++++++ .../k8s.io/component-base/metrics/wrappers.go | 6 ++++ 3 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 staging/src/k8s.io/component-base/metrics/testutil/testutil.go diff --git a/staging/src/k8s.io/component-base/metrics/legacyregistry/registry.go b/staging/src/k8s.io/component-base/metrics/legacyregistry/registry.go index bc08e3c8904..fb963ad3200 100644 --- a/staging/src/k8s.io/component-base/metrics/legacyregistry/registry.go +++ b/staging/src/k8s.io/component-base/metrics/legacyregistry/registry.go @@ -26,7 +26,7 @@ import ( var ( defaultRegistry = metrics.NewKubeRegistry() // DefaultGatherer exposes the global registry gatherer - DefaultGatherer prometheus.Gatherer = defaultRegistry + DefaultGatherer metrics.Gatherer = defaultRegistry ) func init() { diff --git a/staging/src/k8s.io/component-base/metrics/testutil/testutil.go b/staging/src/k8s.io/component-base/metrics/testutil/testutil.go new file mode 100644 index 00000000000..69e2e630fa2 --- /dev/null +++ b/staging/src/k8s.io/component-base/metrics/testutil/testutil.go @@ -0,0 +1,33 @@ +/* +Copyright 2019 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package testutil + +import ( + "io" + + "github.com/prometheus/client_golang/prometheus/testutil" + + "k8s.io/component-base/metrics" +) + +// GatherAndCompare gathers all metrics from the provided Gatherer and compares +// it to an expected output read from the provided Reader in the Prometheus text +// exposition format. If any metricNames are provided, only metrics with those +// names are compared. +func GatherAndCompare(g metrics.Gatherer, expected io.Reader, metricNames ...string) error { + return testutil.GatherAndCompare(g, expected, metricNames...) +} diff --git a/staging/src/k8s.io/component-base/metrics/wrappers.go b/staging/src/k8s.io/component-base/metrics/wrappers.go index fa40314dc6e..f41dacd1169 100644 --- a/staging/src/k8s.io/component-base/metrics/wrappers.go +++ b/staging/src/k8s.io/component-base/metrics/wrappers.go @@ -79,3 +79,9 @@ type PromRegistry interface { Unregister(prometheus.Collector) bool Gather() ([]*dto.MetricFamily, error) } + +// Gatherer is the interface for the part of a registry in charge of gathering +// the collected metrics into a number of MetricFamilies. +type Gatherer interface { + prometheus.Gatherer +}