Merge pull request #83664 from RainbowMango/pr_refactor_kubelet_ut_with_metrics_testutil

Refactor kubelet ut with metrics testutil
This commit is contained in:
Kubernetes Prow Robot 2019-11-10 19:43:42 -08:00 committed by GitHub
commit 9646bd9736
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 43 additions and 19 deletions

View File

@ -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())

View File

@ -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",
],
)

View File

@ -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)
}
})
}
}