Fix sample_and_watermark_test.go for bad luck, repeated test

Kubernetes-commit: 06e17165b16a4706ecf86b089de2bc1c0faea264
This commit is contained in:
Mike Spreitzer 2021-11-10 15:30:50 -05:00 committed by Kubernetes Publisher
parent f20611e89e
commit 8c46c2c1d9
1 changed files with 16 additions and 15 deletions

View File

@ -17,13 +17,13 @@ limitations under the License.
package metrics
import (
"errors"
"fmt"
"math/rand"
"testing"
"time"
compbasemetrics "k8s.io/component-base/metrics"
"k8s.io/component-base/metrics/legacyregistry"
"k8s.io/klog/v2"
testclock "k8s.io/utils/clock/testing"
)
@ -36,6 +36,8 @@ const (
numIterations = 100
)
var errMetricNotFound = errors.New("not found")
/* TestSampler does a rough behavioral test of the sampling in a
SampleAndWatermarkHistograms. The test creates one and exercises
it, checking that the count in the sampling histogram is correct at
@ -59,9 +61,10 @@ func TestSampler(t *testing.T) {
&compbasemetrics.HistogramOpts{Name: "marks", Buckets: buckets},
[]string{})
saw := gen.Generate(0, 1, []string{})
regs := gen.metrics()
for _, reg := range regs {
legacyregistry.MustRegister(reg)
toRegister := gen.metrics()
registry := compbasemetrics.NewKubeRegistry()
for _, reg := range toRegister {
registry.MustRegister(reg)
}
// `dt` is the admitted cumulative difference in fake time
// since the start of the test. "admitted" means this is
@ -83,8 +86,8 @@ func TestSampler(t *testing.T) {
clk.SetTime(t1)
saw.Observe(1)
expectedCount := int64(dt / samplingPeriod)
actualCount, err := getHistogramCount(regs, samplesHistName)
if err != nil {
actualCount, err := getHistogramCount(registry, samplesHistName)
if err != nil && !(err == errMetricNotFound && expectedCount == 0) {
t.Fatalf("For t0=%s, t1=%s, failed to getHistogramCount: %#+v", t0, t1, err)
}
t.Logf("For i=%d, ddt=%s, t1=%s, diff=%s, dt=%s, count=%d", i, ddt, t1, diff, dt, actualCount)
@ -94,28 +97,26 @@ func TestSampler(t *testing.T) {
}
}
/* getHistogramCount returns the count of the named histogram */
func getHistogramCount(regs Registerables, metricName string) (int64, error) {
considered := []string{}
mfs, err := legacyregistry.DefaultGatherer.Gather()
/* getHistogramCount returns the count of the named histogram or an error (if any) */
func getHistogramCount(registry compbasemetrics.KubeRegistry, metricName string) (int64, error) {
mfs, err := registry.Gather()
if err != nil {
return 0, fmt.Errorf("failed to gather metrics: %s", err)
return 0, fmt.Errorf("failed to gather metrics: %w", err)
}
for _, mf := range mfs {
thisName := mf.GetName()
if thisName != metricName {
considered = append(considered, thisName)
continue
}
metric := mf.GetMetric()[0]
hist := metric.GetHistogram()
if hist == nil {
return 0, fmt.Errorf("dto.Metric has nil Histogram")
return 0, errors.New("dto.Metric has nil Histogram")
}
if hist.SampleCount == nil {
return 0, fmt.Errorf("dto.Histogram has nil SampleCount")
return 0, errors.New("dto.Histogram has nil SampleCount")
}
return int64(*hist.SampleCount), nil
}
return 0, fmt.Errorf("not found, considered=%#+v", considered)
return 0, errMetricNotFound
}