mirror of
https://github.com/prometheus/prometheus.git
synced 2024-11-14 17:44:06 -08:00
update tests
Signed-off-by: Callum Styan <callumstyan@gmail.com> Signed-off-by: Nicolás Pazos <npazosmendez@gmail.com>
This commit is contained in:
parent
2eac37aea6
commit
fbdbf2ccbd
|
@ -127,6 +127,39 @@ var writeRequestWithRefsFixture = &prompb.WriteRequestWithRefs{
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var st = newRwSymbolTable()
|
||||||
|
|
||||||
|
// writeRequestMinimizedFixture represents the same request as writeRequestFixture, but using the minimized representation.
|
||||||
|
var writeRequestMinimizedFixture = &prompb.MinimizedWriteRequest{
|
||||||
|
Timeseries: []prompb.MinimizedTimeSeries{
|
||||||
|
{
|
||||||
|
LabelSymbols: []uint32{
|
||||||
|
st.Ref("__name__"), st.Ref("test_metric1"),
|
||||||
|
st.Ref("b"), st.Ref("c"),
|
||||||
|
st.Ref("baz"), st.Ref("qux"),
|
||||||
|
st.Ref("d"), st.Ref("e"),
|
||||||
|
st.Ref("foo"), st.Ref("bar"),
|
||||||
|
},
|
||||||
|
Samples: []prompb.Sample{{Value: 1, Timestamp: 0}},
|
||||||
|
Exemplars: []prompb.Exemplar{{Labels: []prompb.Label{{Name: "f", Value: "g"}}, Value: 1, Timestamp: 0}},
|
||||||
|
Histograms: []prompb.Histogram{HistogramToHistogramProto(0, &testHistogram), FloatHistogramToHistogramProto(1, testHistogram.ToFloat())},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
LabelSymbols: []uint32{
|
||||||
|
st.Ref("__name__"), st.Ref("test_metric1"),
|
||||||
|
st.Ref("b"), st.Ref("c"),
|
||||||
|
st.Ref("baz"), st.Ref("qux"),
|
||||||
|
st.Ref("d"), st.Ref("e"),
|
||||||
|
st.Ref("foo"), st.Ref("bar"),
|
||||||
|
},
|
||||||
|
Samples: []prompb.Sample{{Value: 2, Timestamp: 1}},
|
||||||
|
Exemplars: []prompb.Exemplar{{Labels: []prompb.Label{{Name: "h", Value: "i"}}, Value: 2, Timestamp: 1}},
|
||||||
|
Histograms: []prompb.Histogram{HistogramToHistogramProto(2, &testHistogram), FloatHistogramToHistogramProto(3, testHistogram.ToFloat())},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Symbols: st.LabelsString(),
|
||||||
|
}
|
||||||
|
|
||||||
func TestValidateLabelsAndMetricName(t *testing.T) {
|
func TestValidateLabelsAndMetricName(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
input []prompb.Label
|
input []prompb.Label
|
||||||
|
@ -588,6 +621,16 @@ func TestDecodeReducedWriteRequest(t *testing.T) {
|
||||||
require.Equal(t, writeRequestWithRefsFixture, actual)
|
require.Equal(t, writeRequestWithRefsFixture, actual)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDecodeMinWriteRequest(t *testing.T) {
|
||||||
|
buf, _, err := buildMinimizedWriteRequest(writeRequestMinimizedFixture.Timeseries, writeRequestMinimizedFixture.Symbols, nil, nil)
|
||||||
|
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
actual, err := DecodeMinimizedWriteRequest(bytes.NewReader(buf))
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, writeRequestMinimizedFixture, actual)
|
||||||
|
}
|
||||||
|
|
||||||
func TestReducedWriteRequestToWriteRequest(t *testing.T) {
|
func TestReducedWriteRequestToWriteRequest(t *testing.T) {
|
||||||
actual, err := ReducedWriteRequestToWriteRequest(writeRequestWithRefsFixture)
|
actual, err := ReducedWriteRequestToWriteRequest(writeRequestWithRefsFixture)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
|
@ -62,12 +62,13 @@ func newHighestTimestampMetric() *maxTimestamp {
|
||||||
|
|
||||||
func TestSampleDelivery(t *testing.T) {
|
func TestSampleDelivery(t *testing.T) {
|
||||||
testcases := []struct {
|
testcases := []struct {
|
||||||
name string
|
name string
|
||||||
samples bool
|
samples bool
|
||||||
exemplars bool
|
exemplars bool
|
||||||
histograms bool
|
histograms bool
|
||||||
floatHistograms bool
|
floatHistograms bool
|
||||||
remoteWrite11 bool
|
remoteWrite11 bool
|
||||||
|
remoteWrite11Min bool
|
||||||
}{
|
}{
|
||||||
{samples: true, exemplars: false, histograms: false, floatHistograms: false, name: "samples only"},
|
{samples: true, exemplars: false, histograms: false, floatHistograms: false, name: "samples only"},
|
||||||
{samples: true, exemplars: true, histograms: true, floatHistograms: true, name: "samples, exemplars, and histograms"},
|
{samples: true, exemplars: true, histograms: true, floatHistograms: true, name: "samples, exemplars, and histograms"},
|
||||||
|
@ -80,6 +81,12 @@ func TestSampleDelivery(t *testing.T) {
|
||||||
{remoteWrite11: true, samples: false, exemplars: true, histograms: false, name: "interned exemplars only"},
|
{remoteWrite11: true, samples: false, exemplars: true, histograms: false, name: "interned exemplars only"},
|
||||||
{remoteWrite11: true, samples: false, exemplars: false, histograms: true, name: "interned histograms only"},
|
{remoteWrite11: true, samples: false, exemplars: false, histograms: true, name: "interned histograms only"},
|
||||||
{remoteWrite11: true, samples: false, exemplars: false, histograms: false, floatHistograms: true, name: "interned float histograms only"},
|
{remoteWrite11: true, samples: false, exemplars: false, histograms: false, floatHistograms: true, name: "interned float histograms only"},
|
||||||
|
|
||||||
|
{remoteWrite11Min: true, samples: true, exemplars: false, histograms: false, name: "interned samples only"},
|
||||||
|
{remoteWrite11Min: true, samples: true, exemplars: true, histograms: true, floatHistograms: true, name: "interned samples, exemplars, and histograms"},
|
||||||
|
{remoteWrite11Min: true, samples: false, exemplars: true, histograms: false, name: "interned exemplars only"},
|
||||||
|
{remoteWrite11Min: true, samples: false, exemplars: false, histograms: true, name: "interned histograms only"},
|
||||||
|
{remoteWrite11Min: true, samples: false, exemplars: false, histograms: false, floatHistograms: true, name: "interned float histograms only"},
|
||||||
}
|
}
|
||||||
|
|
||||||
// Let's create an even number of send batches so we don't run into the
|
// Let's create an even number of send batches so we don't run into the
|
||||||
|
@ -106,7 +113,7 @@ func TestSampleDelivery(t *testing.T) {
|
||||||
for _, tc := range testcases {
|
for _, tc := range testcases {
|
||||||
t.Run(tc.name, func(t *testing.T) {
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
dir := t.TempDir()
|
dir := t.TempDir()
|
||||||
s := NewStorage(nil, nil, nil, dir, defaultFlushDeadline, nil, tc.remoteWrite11, false)
|
s := NewStorage(nil, nil, nil, dir, defaultFlushDeadline, nil, tc.remoteWrite11, tc.remoteWrite11Min)
|
||||||
defer s.Close()
|
defer s.Close()
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -83,6 +83,104 @@ func TestRemoteWriteHandler(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRemoteWriteHandlerReducedFormat(t *testing.T) {
|
||||||
|
buf, _, err := buildReducedWriteRequest(writeRequestWithRefsFixture.Timeseries, writeRequestWithRefsFixture.StringSymbolTable, nil, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
req, err := http.NewRequest("", "", bytes.NewReader(buf))
|
||||||
|
req.Header.Set(RemoteWriteVersionHeader, RemoteWriteVersion11HeaderValue)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
appendable := &mockAppendable{}
|
||||||
|
handler := NewWriteHandler(nil, nil, appendable, true, false)
|
||||||
|
|
||||||
|
recorder := httptest.NewRecorder()
|
||||||
|
handler.ServeHTTP(recorder, req)
|
||||||
|
|
||||||
|
resp := recorder.Result()
|
||||||
|
require.Equal(t, http.StatusNoContent, resp.StatusCode)
|
||||||
|
|
||||||
|
i := 0
|
||||||
|
j := 0
|
||||||
|
k := 0
|
||||||
|
// the reduced write request is equivalent to the write request fixture.
|
||||||
|
// we can use it for
|
||||||
|
for _, ts := range writeRequestFixture.Timeseries {
|
||||||
|
labels := labelProtosToLabels(ts.Labels)
|
||||||
|
for _, s := range ts.Samples {
|
||||||
|
require.Equal(t, mockSample{labels, s.Timestamp, s.Value}, appendable.samples[i])
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, e := range ts.Exemplars {
|
||||||
|
exemplarLabels := labelProtosToLabels(e.Labels)
|
||||||
|
require.Equal(t, mockExemplar{labels, exemplarLabels, e.Timestamp, e.Value}, appendable.exemplars[j])
|
||||||
|
j++
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, hp := range ts.Histograms {
|
||||||
|
if hp.IsFloatHistogram() {
|
||||||
|
fh := FloatHistogramProtoToFloatHistogram(hp)
|
||||||
|
require.Equal(t, mockHistogram{labels, hp.Timestamp, nil, fh}, appendable.histograms[k])
|
||||||
|
} else {
|
||||||
|
h := HistogramProtoToHistogram(hp)
|
||||||
|
require.Equal(t, mockHistogram{labels, hp.Timestamp, h, nil}, appendable.histograms[k])
|
||||||
|
}
|
||||||
|
|
||||||
|
k++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestRemoteWriteHandlerMinimizedFormat(t *testing.T) {
|
||||||
|
buf, _, err := buildMinimizedWriteRequest(writeRequestMinimizedFixture.Timeseries, writeRequestMinimizedFixture.Symbols, nil, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
req, err := http.NewRequest("", "", bytes.NewReader(buf))
|
||||||
|
req.Header.Set(RemoteWriteVersionHeader, RemoteWriteVersion11HeaderValue)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
appendable := &mockAppendable{}
|
||||||
|
handler := NewWriteHandler(nil, nil, appendable, false, true)
|
||||||
|
|
||||||
|
recorder := httptest.NewRecorder()
|
||||||
|
handler.ServeHTTP(recorder, req)
|
||||||
|
|
||||||
|
resp := recorder.Result()
|
||||||
|
require.Equal(t, http.StatusNoContent, resp.StatusCode)
|
||||||
|
|
||||||
|
i := 0
|
||||||
|
j := 0
|
||||||
|
k := 0
|
||||||
|
// the reduced write request is equivalent to the write request fixture.
|
||||||
|
// we can use it for
|
||||||
|
for _, ts := range writeRequestFixture.Timeseries {
|
||||||
|
ls := labelProtosToLabels(ts.Labels)
|
||||||
|
for _, s := range ts.Samples {
|
||||||
|
require.Equal(t, mockSample{ls, s.Timestamp, s.Value}, appendable.samples[i])
|
||||||
|
i++
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, e := range ts.Exemplars {
|
||||||
|
exemplarLabels := labelProtosToLabels(e.Labels)
|
||||||
|
require.Equal(t, mockExemplar{ls, exemplarLabels, e.Timestamp, e.Value}, appendable.exemplars[j])
|
||||||
|
j++
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, hp := range ts.Histograms {
|
||||||
|
if hp.IsFloatHistogram() {
|
||||||
|
fh := FloatHistogramProtoToFloatHistogram(hp)
|
||||||
|
require.Equal(t, mockHistogram{ls, hp.Timestamp, nil, fh}, appendable.histograms[k])
|
||||||
|
} else {
|
||||||
|
h := HistogramProtoToHistogram(hp)
|
||||||
|
require.Equal(t, mockHistogram{ls, hp.Timestamp, h, nil}, appendable.histograms[k])
|
||||||
|
}
|
||||||
|
|
||||||
|
k++
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestOutOfOrderSample(t *testing.T) {
|
func TestOutOfOrderSample(t *testing.T) {
|
||||||
buf, _, err := buildWriteRequest([]prompb.TimeSeries{{
|
buf, _, err := buildWriteRequest([]prompb.TimeSeries{{
|
||||||
Labels: []prompb.Label{{Name: "__name__", Value: "test_metric"}},
|
Labels: []prompb.Label{{Name: "__name__", Value: "test_metric"}},
|
||||||
|
@ -294,55 +392,6 @@ func genSeriesWithSample(numSeries int, ts int64) []prompb.TimeSeries {
|
||||||
return series
|
return series
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRemoteWriteHandlerReducedProtocol(t *testing.T) {
|
|
||||||
buf, _, err := buildReducedWriteRequest(writeRequestWithRefsFixture.Timeseries, writeRequestWithRefsFixture.StringSymbolTable, nil, nil)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
req, err := http.NewRequest("", "", bytes.NewReader(buf))
|
|
||||||
req.Header.Set(RemoteWriteVersionHeader, RemoteWriteVersion11HeaderValue)
|
|
||||||
require.NoError(t, err)
|
|
||||||
|
|
||||||
appendable := &mockAppendable{}
|
|
||||||
handler := NewWriteHandler(nil, nil, appendable, true, false)
|
|
||||||
|
|
||||||
recorder := httptest.NewRecorder()
|
|
||||||
handler.ServeHTTP(recorder, req)
|
|
||||||
|
|
||||||
resp := recorder.Result()
|
|
||||||
require.Equal(t, http.StatusNoContent, resp.StatusCode)
|
|
||||||
|
|
||||||
i := 0
|
|
||||||
j := 0
|
|
||||||
k := 0
|
|
||||||
// the reduced write request is equivalent to the write request fixture.
|
|
||||||
// we can use it for
|
|
||||||
for _, ts := range writeRequestFixture.Timeseries {
|
|
||||||
labels := labelProtosToLabels(ts.Labels)
|
|
||||||
for _, s := range ts.Samples {
|
|
||||||
require.Equal(t, mockSample{labels, s.Timestamp, s.Value}, appendable.samples[i])
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, e := range ts.Exemplars {
|
|
||||||
exemplarLabels := labelProtosToLabels(e.Labels)
|
|
||||||
require.Equal(t, mockExemplar{labels, exemplarLabels, e.Timestamp, e.Value}, appendable.exemplars[j])
|
|
||||||
j++
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, hp := range ts.Histograms {
|
|
||||||
if hp.IsFloatHistogram() {
|
|
||||||
fh := FloatHistogramProtoToFloatHistogram(hp)
|
|
||||||
require.Equal(t, mockHistogram{labels, hp.Timestamp, nil, fh}, appendable.histograms[k])
|
|
||||||
} else {
|
|
||||||
h := HistogramProtoToHistogram(hp)
|
|
||||||
require.Equal(t, mockHistogram{labels, hp.Timestamp, h, nil}, appendable.histograms[k])
|
|
||||||
}
|
|
||||||
|
|
||||||
k++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
type mockAppendable struct {
|
type mockAppendable struct {
|
||||||
latestSample int64
|
latestSample int64
|
||||||
samples []mockSample
|
samples []mockSample
|
||||||
|
|
Loading…
Reference in a new issue