diff --git a/pkg/kubelet/metrics/metrics.go b/pkg/kubelet/metrics/metrics.go index 3806c47f658..3ee8ae26bb2 100644 --- a/pkg/kubelet/metrics/metrics.go +++ b/pkg/kubelet/metrics/metrics.go @@ -545,6 +545,11 @@ func Register(containerCache kubecontainer.RuntimeCache, collectors ...metrics.C }) } +// GetGather returns the gatherer. It used by test case outside current package. +func GetGather() metrics.Gatherer { + return legacyregistry.DefaultGatherer +} + // SinceInMicroseconds gets the time since the specified start in microseconds. func SinceInMicroseconds(start time.Time) float64 { return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) diff --git a/pkg/kubelet/pleg/BUILD b/pkg/kubelet/pleg/BUILD index c6bf885ce8a..1f3a3be0fdd 100644 --- a/pkg/kubelet/pleg/BUILD +++ b/pkg/kubelet/pleg/BUILD @@ -37,7 +37,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/clock:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", - "//vendor/github.com/prometheus/client_model/go:go_default_library", + "//staging/src/k8s.io/component-base/metrics/testutil:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", ], ) diff --git a/pkg/kubelet/pleg/generic_test.go b/pkg/kubelet/pleg/generic_test.go index 46da6e39ed7..0107dfd4be6 100644 --- a/pkg/kubelet/pleg/generic_test.go +++ b/pkg/kubelet/pleg/generic_test.go @@ -21,14 +21,16 @@ import ( "fmt" "reflect" "sort" + "strings" "testing" "time" - dto "github.com/prometheus/client_model/go" "github.com/stretchr/testify/assert" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/diff" + "k8s.io/component-base/metrics/testutil" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" "k8s.io/kubernetes/pkg/kubelet/metrics" @@ -672,22 +674,39 @@ func TestRunningPodAndContainerCount(t *testing.T) { pleg.relist() - // assert for container count with label "running" - actualMetricRunningContainerCount := &dto.Metric{} - expectedMetricRunningContainerCount := float64(1) - metrics.RunningContainerCount.WithLabelValues(string(kubecontainer.ContainerStateRunning)).Write(actualMetricRunningContainerCount) - assert.Equal(t, expectedMetricRunningContainerCount, actualMetricRunningContainerCount.GetGauge().GetValue()) - - // assert for container count with label "unknown" - actualMetricUnknownContainerCount := &dto.Metric{} - expectedMetricUnknownContainerCount := float64(2) - metrics.RunningContainerCount.WithLabelValues(string(kubecontainer.ContainerStateUnknown)).Write(actualMetricUnknownContainerCount) - assert.Equal(t, expectedMetricUnknownContainerCount, actualMetricUnknownContainerCount.GetGauge().GetValue()) - - // assert for running pod count - actualMetricRunningPodCount := &dto.Metric{} - metrics.RunningPodCount.Write(actualMetricRunningPodCount) - expectedMetricRunningPodCount := float64(2) - assert.Equal(t, expectedMetricRunningPodCount, actualMetricRunningPodCount.GetGauge().GetValue()) + tests := []struct { + name string + metricsName string + wants string + }{ + { + name: "test container count", + metricsName: "kubelet_running_container_count", + wants: ` +# HELP kubelet_running_container_count [ALPHA] Number of containers currently running +# TYPE kubelet_running_container_count gauge +kubelet_running_container_count{container_state="exited"} 1 +kubelet_running_container_count{container_state="running"} 1 +kubelet_running_container_count{container_state="unknown"} 2 +`, + }, + { + name: "test pod count", + metricsName: "kubelet_running_pod_count", + wants: ` +# HELP kubelet_running_pod_count [ALPHA] Number of pods currently running +# TYPE kubelet_running_pod_count gauge +kubelet_running_pod_count 2 +`, + }, + } + for _, test := range tests { + tc := test + t.Run(tc.name, func(t *testing.T) { + if err := testutil.GatherAndCompare(metrics.GetGather(), strings.NewReader(tc.wants), tc.metricsName); err != nil { + t.Fatal(err) + } + }) + } }