mirror of
https://github.com/prometheus/prometheus.git
synced 2024-12-24 21:24:05 -08:00
scrape tests: check NaN values directly
Normally, a NaN value is never equal to any other value. Compare sample values via `Float64bits` so that NaN values which are exactly the same will compare equal. Signed-off-by: Bryan Boreham <bjboreham@gmail.com>
This commit is contained in:
parent
5a6c8f9c15
commit
d0dee51aac
|
@ -18,6 +18,7 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
@ -71,6 +72,11 @@ type floatSample struct {
|
||||||
f float64
|
f float64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func equalFloatSamples(a, b floatSample) bool {
|
||||||
|
// Compare Float64bits so NaN values which are exactly the same will compare equal.
|
||||||
|
return labels.Equal(a.metric, b.metric) && a.t == b.t && math.Float64bits(a.f) == math.Float64bits(b.f)
|
||||||
|
}
|
||||||
|
|
||||||
type histogramSample struct {
|
type histogramSample struct {
|
||||||
t int64
|
t int64
|
||||||
h *histogram.Histogram
|
h *histogram.Histogram
|
||||||
|
|
|
@ -1342,7 +1342,7 @@ func TestScrapeLoopAppend(t *testing.T) {
|
||||||
scrapeLabels: `metric NaN`,
|
scrapeLabels: `metric NaN`,
|
||||||
discoveryLabels: nil,
|
discoveryLabels: nil,
|
||||||
expLset: labels.FromStrings("__name__", "metric"),
|
expLset: labels.FromStrings("__name__", "metric"),
|
||||||
expValue: float64(value.NormalNaN),
|
expValue: math.Float64frombits(value.NormalNaN),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1376,13 +1376,6 @@ func TestScrapeLoopAppend(t *testing.T) {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
// When the expected value is NaN
|
|
||||||
// DeepEqual will report NaNs as being different,
|
|
||||||
// so replace it with the expected one.
|
|
||||||
if test.expValue == float64(value.NormalNaN) {
|
|
||||||
app.resultFloats[0].f = expected[0].f
|
|
||||||
}
|
|
||||||
|
|
||||||
t.Logf("Test:%s", test.title)
|
t.Logf("Test:%s", test.title)
|
||||||
requireEqual(t, expected, app.resultFloats)
|
requireEqual(t, expected, app.resultFloats)
|
||||||
}
|
}
|
||||||
|
@ -1390,7 +1383,7 @@ func TestScrapeLoopAppend(t *testing.T) {
|
||||||
|
|
||||||
func requireEqual(t *testing.T, expected, actual interface{}, msgAndArgs ...interface{}) {
|
func requireEqual(t *testing.T, expected, actual interface{}, msgAndArgs ...interface{}) {
|
||||||
testutil.RequireEqualWithOptions(t, expected, actual,
|
testutil.RequireEqualWithOptions(t, expected, actual,
|
||||||
[]cmp.Option{cmp.AllowUnexported(floatSample{}), cmp.AllowUnexported(histogramSample{})},
|
[]cmp.Option{cmp.Comparer(equalFloatSamples), cmp.AllowUnexported(histogramSample{})},
|
||||||
msgAndArgs...)
|
msgAndArgs...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1691,7 +1684,6 @@ func TestScrapeLoop_ChangingMetricString(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NoError(t, slApp.Commit())
|
require.NoError(t, slApp.Commit())
|
||||||
|
|
||||||
// DeepEqual will report NaNs as being different, so replace with a different value.
|
|
||||||
want := []floatSample{
|
want := []floatSample{
|
||||||
{
|
{
|
||||||
metric: labels.FromStrings("__name__", "metric_a", "a", "1", "b", "1"),
|
metric: labels.FromStrings("__name__", "metric_a", "a", "1", "b", "1"),
|
||||||
|
@ -1723,11 +1715,6 @@ func TestScrapeLoopAppendStaleness(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NoError(t, slApp.Commit())
|
require.NoError(t, slApp.Commit())
|
||||||
|
|
||||||
ingestedNaN := math.Float64bits(app.resultFloats[1].f)
|
|
||||||
require.Equal(t, value.StaleNaN, ingestedNaN, "Appended stale sample wasn't as expected")
|
|
||||||
|
|
||||||
// DeepEqual will report NaNs as being different, so replace with a different value.
|
|
||||||
app.resultFloats[1].f = 42
|
|
||||||
want := []floatSample{
|
want := []floatSample{
|
||||||
{
|
{
|
||||||
metric: labels.FromStrings(model.MetricNameLabel, "metric_a"),
|
metric: labels.FromStrings(model.MetricNameLabel, "metric_a"),
|
||||||
|
@ -1737,10 +1724,10 @@ func TestScrapeLoopAppendStaleness(t *testing.T) {
|
||||||
{
|
{
|
||||||
metric: labels.FromStrings(model.MetricNameLabel, "metric_a"),
|
metric: labels.FromStrings(model.MetricNameLabel, "metric_a"),
|
||||||
t: timestamp.FromTime(now.Add(time.Second)),
|
t: timestamp.FromTime(now.Add(time.Second)),
|
||||||
f: 42,
|
f: math.Float64frombits(value.StaleNaN),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
require.Equal(t, want, app.resultFloats, "Appended samples not as expected:\n%s", appender)
|
requireEqual(t, want, app.resultFloats, "Appended samples not as expected:\n%s", appender)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestScrapeLoopAppendNoStalenessIfTimestamp(t *testing.T) {
|
func TestScrapeLoopAppendNoStalenessIfTimestamp(t *testing.T) {
|
||||||
|
@ -1783,8 +1770,6 @@ func TestScrapeLoopAppendStalenessIfTrackTimestampStaleness(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NoError(t, slApp.Commit())
|
require.NoError(t, slApp.Commit())
|
||||||
|
|
||||||
// DeepEqual will report NaNs as being different, so replace with a different value.
|
|
||||||
app.resultFloats[1].f = 42
|
|
||||||
want := []floatSample{
|
want := []floatSample{
|
||||||
{
|
{
|
||||||
metric: labels.FromStrings(model.MetricNameLabel, "metric_a"),
|
metric: labels.FromStrings(model.MetricNameLabel, "metric_a"),
|
||||||
|
@ -1794,10 +1779,10 @@ func TestScrapeLoopAppendStalenessIfTrackTimestampStaleness(t *testing.T) {
|
||||||
{
|
{
|
||||||
metric: labels.FromStrings(model.MetricNameLabel, "metric_a"),
|
metric: labels.FromStrings(model.MetricNameLabel, "metric_a"),
|
||||||
t: timestamp.FromTime(now.Add(time.Second)),
|
t: timestamp.FromTime(now.Add(time.Second)),
|
||||||
f: 42,
|
f: math.Float64frombits(value.StaleNaN),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
require.Equal(t, want, app.resultFloats, "Appended samples not as expected:\n%s", appender)
|
requireEqual(t, want, app.resultFloats, "Appended samples not as expected:\n%s", appender)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestScrapeLoopAppendExemplar(t *testing.T) {
|
func TestScrapeLoopAppendExemplar(t *testing.T) {
|
||||||
|
|
Loading…
Reference in a new issue