histograms: Modify test to expose bug #12552
Signed-off-by: beorn7 <beorn@grafana.com>
This commit is contained in:
parent
162612ea86
commit
1c3bd04bea
|
@ -408,6 +408,61 @@ metric: <
|
||||||
>
|
>
|
||||||
>
|
>
|
||||||
|
|
||||||
|
`,
|
||||||
|
`name: "test_histogram_family"
|
||||||
|
help: "Test histogram metric family with two very simple histograms."
|
||||||
|
type: HISTOGRAM
|
||||||
|
metric: <
|
||||||
|
label: <
|
||||||
|
name: "foo"
|
||||||
|
value: "bar"
|
||||||
|
>
|
||||||
|
histogram: <
|
||||||
|
sample_count: 5
|
||||||
|
sample_sum: 12.1
|
||||||
|
bucket: <
|
||||||
|
cumulative_count: 2
|
||||||
|
upper_bound: 1.1
|
||||||
|
>
|
||||||
|
bucket: <
|
||||||
|
cumulative_count: 3
|
||||||
|
upper_bound: 2.2
|
||||||
|
>
|
||||||
|
schema: 3
|
||||||
|
positive_span: <
|
||||||
|
offset: 8
|
||||||
|
length: 2
|
||||||
|
>
|
||||||
|
positive_delta: 2
|
||||||
|
positive_delta: 1
|
||||||
|
>
|
||||||
|
>
|
||||||
|
metric: <
|
||||||
|
label: <
|
||||||
|
name: "foo"
|
||||||
|
value: "baz"
|
||||||
|
>
|
||||||
|
histogram: <
|
||||||
|
sample_count: 6
|
||||||
|
sample_sum: 13.1
|
||||||
|
bucket: <
|
||||||
|
cumulative_count: 1
|
||||||
|
upper_bound: 1.1
|
||||||
|
>
|
||||||
|
bucket: <
|
||||||
|
cumulative_count: 5
|
||||||
|
upper_bound: 2.2
|
||||||
|
>
|
||||||
|
schema: 3
|
||||||
|
positive_span: <
|
||||||
|
offset: 8
|
||||||
|
length: 2
|
||||||
|
>
|
||||||
|
positive_delta: 1
|
||||||
|
positive_delta: 4
|
||||||
|
>
|
||||||
|
>
|
||||||
|
|
||||||
`,
|
`,
|
||||||
`name: "rpc_durations_seconds"
|
`name: "rpc_durations_seconds"
|
||||||
help: "RPC latency distributions."
|
help: "RPC latency distributions."
|
||||||
|
@ -751,6 +806,50 @@ func TestProtobufParse(t *testing.T) {
|
||||||
"le", "+Inf",
|
"le", "+Inf",
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
m: "test_histogram_family",
|
||||||
|
help: "Test histogram metric family with two very simple histograms.",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
m: "test_histogram_family",
|
||||||
|
typ: MetricTypeHistogram,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
m: "test_histogram_family\xfffoo\xffbar",
|
||||||
|
shs: &histogram.Histogram{
|
||||||
|
CounterResetHint: histogram.UnknownCounterReset,
|
||||||
|
Count: 5,
|
||||||
|
Sum: 12.1,
|
||||||
|
Schema: 3,
|
||||||
|
PositiveSpans: []histogram.Span{
|
||||||
|
{Offset: 8, Length: 2},
|
||||||
|
},
|
||||||
|
NegativeSpans: []histogram.Span{},
|
||||||
|
PositiveBuckets: []int64{2, 1},
|
||||||
|
},
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family",
|
||||||
|
"foo", "bar",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
m: "test_histogram_family\xfffoo\xffbaz",
|
||||||
|
shs: &histogram.Histogram{
|
||||||
|
CounterResetHint: histogram.UnknownCounterReset,
|
||||||
|
Count: 6,
|
||||||
|
Sum: 13.1,
|
||||||
|
Schema: 3,
|
||||||
|
PositiveSpans: []histogram.Span{
|
||||||
|
{Offset: 8, Length: 2},
|
||||||
|
},
|
||||||
|
NegativeSpans: []histogram.Span{},
|
||||||
|
PositiveBuckets: []int64{1, 4},
|
||||||
|
},
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family",
|
||||||
|
"foo", "baz",
|
||||||
|
),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
m: "rpc_durations_seconds",
|
m: "rpc_durations_seconds",
|
||||||
help: "RPC latency distributions.",
|
help: "RPC latency distributions.",
|
||||||
|
@ -1321,14 +1420,144 @@ func TestProtobufParse(t *testing.T) {
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
{ // 53
|
{ // 53
|
||||||
|
m: "test_histogram_family",
|
||||||
|
help: "Test histogram metric family with two very simple histograms.",
|
||||||
|
},
|
||||||
|
{ // 54
|
||||||
|
m: "test_histogram_family",
|
||||||
|
typ: MetricTypeHistogram,
|
||||||
|
},
|
||||||
|
{ // 55
|
||||||
|
m: "test_histogram_family\xfffoo\xffbar",
|
||||||
|
shs: &histogram.Histogram{
|
||||||
|
CounterResetHint: histogram.UnknownCounterReset,
|
||||||
|
Count: 5,
|
||||||
|
Sum: 12.1,
|
||||||
|
Schema: 3,
|
||||||
|
PositiveSpans: []histogram.Span{
|
||||||
|
{Offset: 8, Length: 2},
|
||||||
|
},
|
||||||
|
NegativeSpans: []histogram.Span{},
|
||||||
|
PositiveBuckets: []int64{2, 1},
|
||||||
|
},
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family",
|
||||||
|
"foo", "bar",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{ // 56
|
||||||
|
m: "test_histogram_family_count\xfffoo\xffbar",
|
||||||
|
v: 5,
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family_count",
|
||||||
|
"foo", "bar",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{ // 57
|
||||||
|
m: "test_histogram_family_sum\xfffoo\xffbar",
|
||||||
|
v: 12.1,
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family_sum",
|
||||||
|
"foo", "bar",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{ // 58
|
||||||
|
m: "test_histogram_family_bucket\xfffoo\xffbar\xffle\xff1.1",
|
||||||
|
v: 2,
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family_bucket",
|
||||||
|
"foo", "bar",
|
||||||
|
"le", "1.1",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{ // 59
|
||||||
|
m: "test_histogram_family_bucket\xfffoo\xffbar\xffle\xff2.2",
|
||||||
|
v: 3,
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family_bucket",
|
||||||
|
"foo", "bar",
|
||||||
|
"le", "2.2",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{ // 60
|
||||||
|
m: "test_histogram_family_bucket\xfffoo\xffbar\xffle\xff+Inf",
|
||||||
|
v: 5,
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family_bucket",
|
||||||
|
"foo", "bar",
|
||||||
|
"le", "+Inf",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{ // 61
|
||||||
|
m: "test_histogram_family\xfffoo\xffbaz",
|
||||||
|
shs: &histogram.Histogram{
|
||||||
|
CounterResetHint: histogram.UnknownCounterReset,
|
||||||
|
Count: 6,
|
||||||
|
Sum: 13.1,
|
||||||
|
Schema: 3,
|
||||||
|
PositiveSpans: []histogram.Span{
|
||||||
|
{Offset: 8, Length: 2},
|
||||||
|
},
|
||||||
|
NegativeSpans: []histogram.Span{},
|
||||||
|
PositiveBuckets: []int64{1, 4},
|
||||||
|
},
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family",
|
||||||
|
"foo", "baz",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{ // 62
|
||||||
|
m: "test_histogram_family_count\xfffoo\xffbaz",
|
||||||
|
v: 6,
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family_count",
|
||||||
|
"foo", "baz",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{ // 63
|
||||||
|
m: "test_histogram_family_sum\xfffoo\xffbaz",
|
||||||
|
v: 13.1,
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family_sum",
|
||||||
|
"foo", "baz",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{ // 64
|
||||||
|
m: "test_histogram_family_bucket\xfffoo\xffbaz\xffle\xff1.1",
|
||||||
|
v: 1,
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family_bucket",
|
||||||
|
"foo", "baz",
|
||||||
|
"le", "1.1",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{ // 65
|
||||||
|
m: "test_histogram_family_bucket\xfffoo\xffbaz\xffle\xff2.2",
|
||||||
|
v: 5,
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family_bucket",
|
||||||
|
"foo", "baz",
|
||||||
|
"le", "2.2",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{ // 66
|
||||||
|
m: "test_histogram_family_bucket\xfffoo\xffbaz\xffle\xff+Inf",
|
||||||
|
v: 6,
|
||||||
|
lset: labels.FromStrings(
|
||||||
|
"__name__", "test_histogram_family_bucket",
|
||||||
|
"foo", "baz",
|
||||||
|
"le", "+Inf",
|
||||||
|
),
|
||||||
|
},
|
||||||
|
{ // 67
|
||||||
m: "rpc_durations_seconds",
|
m: "rpc_durations_seconds",
|
||||||
help: "RPC latency distributions.",
|
help: "RPC latency distributions.",
|
||||||
},
|
},
|
||||||
{ // 54
|
{ // 68
|
||||||
m: "rpc_durations_seconds",
|
m: "rpc_durations_seconds",
|
||||||
typ: MetricTypeSummary,
|
typ: MetricTypeSummary,
|
||||||
},
|
},
|
||||||
{ // 55
|
{ // 69
|
||||||
m: "rpc_durations_seconds_count\xffservice\xffexponential",
|
m: "rpc_durations_seconds_count\xffservice\xffexponential",
|
||||||
v: 262,
|
v: 262,
|
||||||
lset: labels.FromStrings(
|
lset: labels.FromStrings(
|
||||||
|
@ -1336,7 +1565,7 @@ func TestProtobufParse(t *testing.T) {
|
||||||
"service", "exponential",
|
"service", "exponential",
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
{ // 56
|
{ // 70
|
||||||
m: "rpc_durations_seconds_sum\xffservice\xffexponential",
|
m: "rpc_durations_seconds_sum\xffservice\xffexponential",
|
||||||
v: 0.00025551262820703587,
|
v: 0.00025551262820703587,
|
||||||
lset: labels.FromStrings(
|
lset: labels.FromStrings(
|
||||||
|
@ -1344,7 +1573,7 @@ func TestProtobufParse(t *testing.T) {
|
||||||
"service", "exponential",
|
"service", "exponential",
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
{ // 57
|
{ // 71
|
||||||
m: "rpc_durations_seconds\xffservice\xffexponential\xffquantile\xff0.5",
|
m: "rpc_durations_seconds\xffservice\xffexponential\xffquantile\xff0.5",
|
||||||
v: 6.442786329648548e-07,
|
v: 6.442786329648548e-07,
|
||||||
lset: labels.FromStrings(
|
lset: labels.FromStrings(
|
||||||
|
@ -1353,7 +1582,7 @@ func TestProtobufParse(t *testing.T) {
|
||||||
"service", "exponential",
|
"service", "exponential",
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
{ // 58
|
{ // 72
|
||||||
m: "rpc_durations_seconds\xffservice\xffexponential\xffquantile\xff0.9",
|
m: "rpc_durations_seconds\xffservice\xffexponential\xffquantile\xff0.9",
|
||||||
v: 1.9435742936658396e-06,
|
v: 1.9435742936658396e-06,
|
||||||
lset: labels.FromStrings(
|
lset: labels.FromStrings(
|
||||||
|
@ -1362,7 +1591,7 @@ func TestProtobufParse(t *testing.T) {
|
||||||
"service", "exponential",
|
"service", "exponential",
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
{ // 59
|
{ // 73
|
||||||
m: "rpc_durations_seconds\xffservice\xffexponential\xffquantile\xff0.99",
|
m: "rpc_durations_seconds\xffservice\xffexponential\xffquantile\xff0.99",
|
||||||
v: 4.0471608667037015e-06,
|
v: 4.0471608667037015e-06,
|
||||||
lset: labels.FromStrings(
|
lset: labels.FromStrings(
|
||||||
|
@ -1371,22 +1600,22 @@ func TestProtobufParse(t *testing.T) {
|
||||||
"service", "exponential",
|
"service", "exponential",
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
{ // 60
|
{ // 74
|
||||||
m: "without_quantiles",
|
m: "without_quantiles",
|
||||||
help: "A summary without quantiles.",
|
help: "A summary without quantiles.",
|
||||||
},
|
},
|
||||||
{ // 61
|
{ // 75
|
||||||
m: "without_quantiles",
|
m: "without_quantiles",
|
||||||
typ: MetricTypeSummary,
|
typ: MetricTypeSummary,
|
||||||
},
|
},
|
||||||
{ // 62
|
{ // 76
|
||||||
m: "without_quantiles_count",
|
m: "without_quantiles_count",
|
||||||
v: 42,
|
v: 42,
|
||||||
lset: labels.FromStrings(
|
lset: labels.FromStrings(
|
||||||
"__name__", "without_quantiles_count",
|
"__name__", "without_quantiles_count",
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
{ // 63
|
{ // 77
|
||||||
m: "without_quantiles_sum",
|
m: "without_quantiles_sum",
|
||||||
v: 1.234,
|
v: 1.234,
|
||||||
lset: labels.FromStrings(
|
lset: labels.FromStrings(
|
||||||
|
@ -1420,61 +1649,61 @@ func TestProtobufParse(t *testing.T) {
|
||||||
var e exemplar.Exemplar
|
var e exemplar.Exemplar
|
||||||
p.Metric(&res)
|
p.Metric(&res)
|
||||||
found := p.Exemplar(&e)
|
found := p.Exemplar(&e)
|
||||||
require.Equal(t, exp[i].m, string(m))
|
require.Equal(t, exp[i].m, string(m), "i: %d", i)
|
||||||
if ts != nil {
|
if ts != nil {
|
||||||
require.Equal(t, exp[i].t, *ts)
|
require.Equal(t, exp[i].t, *ts, "i: %d", i)
|
||||||
} else {
|
} else {
|
||||||
require.Equal(t, exp[i].t, int64(0))
|
require.Equal(t, exp[i].t, int64(0), "i: %d", i)
|
||||||
}
|
}
|
||||||
require.Equal(t, exp[i].v, v)
|
require.Equal(t, exp[i].v, v, "i: %d", i)
|
||||||
require.Equal(t, exp[i].lset, res)
|
require.Equal(t, exp[i].lset, res, "i: %d", i)
|
||||||
if len(exp[i].e) == 0 {
|
if len(exp[i].e) == 0 {
|
||||||
require.Equal(t, false, found)
|
require.Equal(t, false, found, "i: %d", i)
|
||||||
} else {
|
} else {
|
||||||
require.Equal(t, true, found)
|
require.Equal(t, true, found, "i: %d", i)
|
||||||
require.Equal(t, exp[i].e[0], e)
|
require.Equal(t, exp[i].e[0], e, "i: %d", i)
|
||||||
}
|
}
|
||||||
|
|
||||||
case EntryHistogram:
|
case EntryHistogram:
|
||||||
m, ts, shs, fhs := p.Histogram()
|
m, ts, shs, fhs := p.Histogram()
|
||||||
p.Metric(&res)
|
p.Metric(&res)
|
||||||
require.Equal(t, exp[i].m, string(m))
|
require.Equal(t, exp[i].m, string(m), "i: %d", i)
|
||||||
if ts != nil {
|
if ts != nil {
|
||||||
require.Equal(t, exp[i].t, *ts)
|
require.Equal(t, exp[i].t, *ts, "i: %d", i)
|
||||||
} else {
|
} else {
|
||||||
require.Equal(t, exp[i].t, int64(0))
|
require.Equal(t, exp[i].t, int64(0), "i: %d", i)
|
||||||
}
|
}
|
||||||
require.Equal(t, exp[i].lset, res)
|
require.Equal(t, exp[i].lset, res, "i: %d", i)
|
||||||
require.Equal(t, exp[i].m, string(m))
|
require.Equal(t, exp[i].m, string(m), "i: %d", i)
|
||||||
if shs != nil {
|
if shs != nil {
|
||||||
require.Equal(t, exp[i].shs, shs)
|
require.Equal(t, exp[i].shs, shs, "i: %d", i)
|
||||||
} else {
|
} else {
|
||||||
require.Equal(t, exp[i].fhs, fhs)
|
require.Equal(t, exp[i].fhs, fhs, "i: %d", i)
|
||||||
}
|
}
|
||||||
j := 0
|
j := 0
|
||||||
for e := (exemplar.Exemplar{}); p.Exemplar(&e); j++ {
|
for e := (exemplar.Exemplar{}); p.Exemplar(&e); j++ {
|
||||||
require.Equal(t, exp[i].e[j], e)
|
require.Equal(t, exp[i].e[j], e, "i: %d", i)
|
||||||
e = exemplar.Exemplar{}
|
e = exemplar.Exemplar{}
|
||||||
}
|
}
|
||||||
require.Equal(t, len(exp[i].e), j, "not enough exemplars found")
|
require.Equal(t, len(exp[i].e), j, "not enough exemplars found, i: %d", i)
|
||||||
|
|
||||||
case EntryType:
|
case EntryType:
|
||||||
m, typ := p.Type()
|
m, typ := p.Type()
|
||||||
require.Equal(t, exp[i].m, string(m))
|
require.Equal(t, exp[i].m, string(m), "i: %d", i)
|
||||||
require.Equal(t, exp[i].typ, typ)
|
require.Equal(t, exp[i].typ, typ, "i: %d", i)
|
||||||
|
|
||||||
case EntryHelp:
|
case EntryHelp:
|
||||||
m, h := p.Help()
|
m, h := p.Help()
|
||||||
require.Equal(t, exp[i].m, string(m))
|
require.Equal(t, exp[i].m, string(m), "i: %d", i)
|
||||||
require.Equal(t, exp[i].help, string(h))
|
require.Equal(t, exp[i].help, string(h), "i: %d", i)
|
||||||
|
|
||||||
case EntryUnit:
|
case EntryUnit:
|
||||||
m, u := p.Unit()
|
m, u := p.Unit()
|
||||||
require.Equal(t, exp[i].m, string(m))
|
require.Equal(t, exp[i].m, string(m), "i: %d", i)
|
||||||
require.Equal(t, exp[i].unit, string(u))
|
require.Equal(t, exp[i].unit, string(u), "i: %d", i)
|
||||||
|
|
||||||
case EntryComment:
|
case EntryComment:
|
||||||
require.Equal(t, exp[i].comment, string(p.Comment()))
|
require.Equal(t, exp[i].comment, string(p.Comment()), "i: %d", i)
|
||||||
}
|
}
|
||||||
|
|
||||||
i++
|
i++
|
||||||
|
|
Loading…
Reference in New Issue