Refactor TestRunningPodAndContainerCount with metrics testutil

This commit is contained in:
RainbowMango 2019-10-09 14:50:45 +08:00
parent 057609cf93
commit debe2f7b43
2 changed files with 42 additions and 18 deletions

View File

@ -530,6 +530,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. // SinceInMicroseconds gets the time since the specified start in microseconds.
func SinceInMicroseconds(start time.Time) float64 { func SinceInMicroseconds(start time.Time) float64 {
return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds())

View File

@ -21,14 +21,16 @@ import (
"fmt" "fmt"
"reflect" "reflect"
"sort" "sort"
"strings"
"testing" "testing"
"time" "time"
dto "github.com/prometheus/client_model/go"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/clock" "k8s.io/apimachinery/pkg/util/clock"
"k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/diff"
"k8s.io/component-base/metrics/testutil"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
containertest "k8s.io/kubernetes/pkg/kubelet/container/testing" containertest "k8s.io/kubernetes/pkg/kubelet/container/testing"
"k8s.io/kubernetes/pkg/kubelet/metrics" "k8s.io/kubernetes/pkg/kubelet/metrics"
@ -672,22 +674,39 @@ func TestRunningPodAndContainerCount(t *testing.T) {
pleg.relist() pleg.relist()
// assert for container count with label "running" tests := []struct {
actualMetricRunningContainerCount := &dto.Metric{} name string
expectedMetricRunningContainerCount := float64(1) metricsName string
metrics.RunningContainerCount.WithLabelValues(string(kubecontainer.ContainerStateRunning)).Write(actualMetricRunningContainerCount) wants string
assert.Equal(t, expectedMetricRunningContainerCount, actualMetricRunningContainerCount.GetGauge().GetValue()) }{
{
// assert for container count with label "unknown" name: "test container count",
actualMetricUnknownContainerCount := &dto.Metric{} metricsName: "kubelet_running_container_count",
expectedMetricUnknownContainerCount := float64(2) wants: `
metrics.RunningContainerCount.WithLabelValues(string(kubecontainer.ContainerStateUnknown)).Write(actualMetricUnknownContainerCount) # HELP kubelet_running_container_count [ALPHA] Number of containers currently running
assert.Equal(t, expectedMetricUnknownContainerCount, actualMetricUnknownContainerCount.GetGauge().GetValue()) # TYPE kubelet_running_container_count gauge
kubelet_running_container_count{container_state="exited"} 1
// assert for running pod count kubelet_running_container_count{container_state="running"} 1
actualMetricRunningPodCount := &dto.Metric{} kubelet_running_container_count{container_state="unknown"} 2
metrics.RunningPodCount.Write(actualMetricRunningPodCount) `,
expectedMetricRunningPodCount := float64(2) },
assert.Equal(t, expectedMetricRunningPodCount, actualMetricRunningPodCount.GetGauge().GetValue()) {
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)
}
})
}
} }