mirror of
https://github.com/prometheus/prometheus.git
synced 2025-01-26 13:11:11 -08:00
Add tests according to code review
Signed-off-by: Jeanette Tan <jeanette.tan@grafana.com>
This commit is contained in:
parent
2ad39baa72
commit
dfabc69303
|
@ -1742,18 +1742,24 @@ func TestScrapeLoop_HistogramBucketLimit(t *testing.T) {
|
|||
require.NoError(t, err)
|
||||
beforeMetricValue := metric.GetCounter().GetValue()
|
||||
|
||||
nativeHistogram := prometheus.NewHistogram(prometheus.HistogramOpts{
|
||||
Namespace: "testing",
|
||||
Name: "example_native_histogram",
|
||||
Help: "This is used for testing",
|
||||
ConstLabels: map[string]string{"some": "value"},
|
||||
NativeHistogramBucketFactor: 1.1, // 10% increase from bucket to bucket
|
||||
NativeHistogramMaxBucketNumber: 100, // intentionally higher than the limit we'll use in the scraper
|
||||
})
|
||||
nativeHistogram := prometheus.NewHistogramVec(
|
||||
prometheus.HistogramOpts{
|
||||
Namespace: "testing",
|
||||
Name: "example_native_histogram",
|
||||
Help: "This is used for testing",
|
||||
ConstLabels: map[string]string{"some": "value"},
|
||||
NativeHistogramBucketFactor: 1.1, // 10% increase from bucket to bucket
|
||||
NativeHistogramMaxBucketNumber: 100, // intentionally higher than the limit we'll use in the scraper
|
||||
},
|
||||
[]string{"size"},
|
||||
)
|
||||
registry := prometheus.NewRegistry()
|
||||
registry.Register(nativeHistogram)
|
||||
nativeHistogram.Observe(1.0)
|
||||
nativeHistogram.Observe(10.0) // in different bucket since > 1*1.1
|
||||
nativeHistogram.WithLabelValues("S").Observe(1.0)
|
||||
nativeHistogram.WithLabelValues("M").Observe(1.0)
|
||||
nativeHistogram.WithLabelValues("L").Observe(1.0)
|
||||
nativeHistogram.WithLabelValues("M").Observe(10.0)
|
||||
nativeHistogram.WithLabelValues("L").Observe(10.0) // in different bucket since > 1*1.1
|
||||
|
||||
gathered, err := registry.Gather()
|
||||
require.NoError(t, err)
|
||||
|
@ -1766,9 +1772,9 @@ func TestScrapeLoop_HistogramBucketLimit(t *testing.T) {
|
|||
now := time.Now()
|
||||
total, added, seriesAdded, err := sl.append(app, msg, "application/vnd.google.protobuf", now)
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, 1, total)
|
||||
require.Equal(t, 1, added)
|
||||
require.Equal(t, 1, seriesAdded)
|
||||
require.Equal(t, 3, total)
|
||||
require.Equal(t, 3, added)
|
||||
require.Equal(t, 3, seriesAdded)
|
||||
|
||||
err = targetScrapeNativeHistogramBucketLimit.Write(&metric)
|
||||
require.NoError(t, err)
|
||||
|
@ -1776,7 +1782,7 @@ func TestScrapeLoop_HistogramBucketLimit(t *testing.T) {
|
|||
require.Equal(t, beforeMetricValue, metricValue)
|
||||
beforeMetricValue = metricValue
|
||||
|
||||
nativeHistogram.Observe(100.0) // in different bucket since > 10*1.1
|
||||
nativeHistogram.WithLabelValues("L").Observe(100.0) // in different bucket since > 10*1.1
|
||||
|
||||
gathered, err = registry.Gather()
|
||||
require.NoError(t, err)
|
||||
|
@ -1792,8 +1798,8 @@ func TestScrapeLoop_HistogramBucketLimit(t *testing.T) {
|
|||
t.Fatalf("Did not see expected histogram bucket limit error: %s", err)
|
||||
}
|
||||
require.NoError(t, app.Rollback())
|
||||
require.Equal(t, 1, total)
|
||||
require.Equal(t, 1, added)
|
||||
require.Equal(t, 3, total)
|
||||
require.Equal(t, 3, added)
|
||||
require.Equal(t, 0, seriesAdded)
|
||||
|
||||
err = targetScrapeNativeHistogramBucketLimit.Write(&metric)
|
||||
|
|
|
@ -31,6 +31,7 @@ import (
|
|||
|
||||
"github.com/prometheus/prometheus/config"
|
||||
"github.com/prometheus/prometheus/discovery/targetgroup"
|
||||
"github.com/prometheus/prometheus/model/histogram"
|
||||
"github.com/prometheus/prometheus/model/labels"
|
||||
)
|
||||
|
||||
|
@ -488,3 +489,63 @@ scrape_configs:
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestBucketLimitAppender(t *testing.T) {
|
||||
example := histogram.Histogram{
|
||||
Schema: 0,
|
||||
Count: 21,
|
||||
Sum: 33,
|
||||
ZeroThreshold: 0.001,
|
||||
ZeroCount: 3,
|
||||
PositiveSpans: []histogram.Span{
|
||||
{Offset: 0, Length: 3},
|
||||
},
|
||||
PositiveBuckets: []int64{3, 0, 0},
|
||||
NegativeSpans: []histogram.Span{
|
||||
{Offset: 0, Length: 3},
|
||||
},
|
||||
NegativeBuckets: []int64{3, 0, 0},
|
||||
}
|
||||
|
||||
cases := []struct {
|
||||
h histogram.Histogram
|
||||
limit int
|
||||
expectError bool
|
||||
}{
|
||||
{
|
||||
h: example,
|
||||
limit: 3,
|
||||
expectError: true,
|
||||
},
|
||||
{
|
||||
h: example,
|
||||
limit: 10,
|
||||
expectError: false,
|
||||
},
|
||||
}
|
||||
|
||||
resApp := &collectResultAppender{}
|
||||
|
||||
for _, c := range cases {
|
||||
for _, floatHisto := range []bool{true, false} {
|
||||
t.Run(fmt.Sprintf("floatHistogram=%t", floatHisto), func(t *testing.T) {
|
||||
app := &bucketLimitAppender{Appender: resApp, limit: c.limit}
|
||||
ts := int64(10 * time.Minute / time.Millisecond)
|
||||
h := c.h
|
||||
lbls := labels.FromStrings("__name__", "sparse_histogram_series")
|
||||
var err error
|
||||
if floatHisto {
|
||||
_, err = app.AppendHistogram(0, lbls, ts, nil, h.Copy().ToFloat())
|
||||
} else {
|
||||
_, err = app.AppendHistogram(0, lbls, ts, h.Copy(), nil)
|
||||
}
|
||||
if c.expectError {
|
||||
require.Error(t, err)
|
||||
} else {
|
||||
require.NoError(t, err)
|
||||
}
|
||||
require.NoError(t, app.Commit())
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue