Merge pull request #106289 from CatherineF-dev/fix-metrics-AlreadyRegisteredError-in-unit-test

Fix metrics AlreadyRegisteredError on TestRecordOperation and TestGetHistogramVecFromGatherer unit test
This commit is contained in:
Kubernetes Prow Robot 2021-11-16 16:36:15 -08:00 committed by GitHub
commit 42d8b2f3b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 13 deletions

View File

@ -24,15 +24,21 @@ import (
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"k8s.io/component-base/metrics/legacyregistry" compbasemetrics "k8s.io/component-base/metrics"
runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2"
"k8s.io/kubernetes/pkg/kubelet/metrics" "k8s.io/kubernetes/pkg/kubelet/metrics"
) )
func TestRecordOperation(t *testing.T) { func TestRecordOperation(t *testing.T) {
legacyregistry.MustRegister(metrics.RuntimeOperations) // Use local registry
legacyregistry.MustRegister(metrics.RuntimeOperationsDuration) var registry = compbasemetrics.NewKubeRegistry()
legacyregistry.MustRegister(metrics.RuntimeOperationsErrors) var gather compbasemetrics.Gatherer = registry
registry.MustRegister(metrics.RuntimeOperations)
registry.MustRegister(metrics.RuntimeOperationsDuration)
registry.MustRegister(metrics.RuntimeOperationsErrors)
registry.Reset()
l, err := net.Listen("tcp", "127.0.0.1:0") l, err := net.Listen("tcp", "127.0.0.1:0")
assert.NoError(t, err) assert.NoError(t, err)
@ -40,8 +46,8 @@ func TestRecordOperation(t *testing.T) {
prometheusURL := "http://" + l.Addr().String() + "/metrics" prometheusURL := "http://" + l.Addr().String() + "/metrics"
mux := http.NewServeMux() mux := http.NewServeMux()
//lint:ignore SA1019 ignore deprecated warning until we move off of global registries handler := compbasemetrics.HandlerFor(gather, compbasemetrics.HandlerOpts{})
mux.Handle("/metrics", legacyregistry.Handler()) mux.Handle("/metrics", handler)
server := &http.Server{ server := &http.Server{
Addr: l.Addr().String(), Addr: l.Addr().String(),
Handler: mux, Handler: mux,

View File

@ -20,13 +20,11 @@ import (
"fmt" "fmt"
"math" "math"
"reflect" "reflect"
"sync"
"testing" "testing"
"github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp"
dto "github.com/prometheus/client_model/go" dto "github.com/prometheus/client_model/go"
"k8s.io/component-base/metrics" "k8s.io/component-base/metrics"
"k8s.io/component-base/metrics/legacyregistry"
"k8s.io/utils/pointer" "k8s.io/utils/pointer"
) )
@ -517,7 +515,6 @@ func TestHistogramVec_Validate(t *testing.T) {
} }
func TestGetHistogramVecFromGatherer(t *testing.T) { func TestGetHistogramVecFromGatherer(t *testing.T) {
var registerMetrics sync.Once
tests := []struct { tests := []struct {
name string name string
lvMap map[string]string lvMap map[string]string
@ -576,16 +573,17 @@ func TestGetHistogramVecFromGatherer(t *testing.T) {
Buckets: buckets, Buckets: buckets,
} }
vec := metrics.NewHistogramVec(HistogramOpts, labels) vec := metrics.NewHistogramVec(HistogramOpts, labels)
registerMetrics.Do(func() { // Use local registry
legacyregistry.MustRegister(vec) var registry = metrics.NewKubeRegistry()
}) var gather metrics.Gatherer = registry
registry.MustRegister(vec)
// Observe two metrics with same value for label1 but different value of label2. // Observe two metrics with same value for label1 but different value of label2.
vec.WithLabelValues("value1-0", "value2-0").Observe(1.5) vec.WithLabelValues("value1-0", "value2-0").Observe(1.5)
vec.WithLabelValues("value1-0", "value2-1").Observe(2.5) vec.WithLabelValues("value1-0", "value2-1").Observe(2.5)
vec.WithLabelValues("value1-1", "value2-0").Observe(3.5) vec.WithLabelValues("value1-1", "value2-0").Observe(3.5)
vec.WithLabelValues("value1-1", "value2-1").Observe(4.5) vec.WithLabelValues("value1-1", "value2-1").Observe(4.5)
metricName := fmt.Sprintf("%s_%s_%s", HistogramOpts.Namespace, HistogramOpts.Subsystem, HistogramOpts.Name) metricName := fmt.Sprintf("%s_%s_%s", HistogramOpts.Namespace, HistogramOpts.Subsystem, HistogramOpts.Name)
histogramVec, _ := GetHistogramVecFromGatherer(legacyregistry.DefaultGatherer, metricName, tt.lvMap) histogramVec, _ := GetHistogramVecFromGatherer(gather, metricName, tt.lvMap)
if diff := cmp.Diff(tt.wantVec, histogramVec); diff != "" { if diff := cmp.Diff(tt.wantVec, histogramVec); diff != "" {
t.Errorf("Got unexpected HistogramVec (-want +got):\n%s", diff) t.Errorf("Got unexpected HistogramVec (-want +got):\n%s", diff)
} }