Refactor TestWBLReplay to use scenarios
Signed-off-by: Carrie Edwards <edwrdscarrie@gmail.com> Co-authored by: Fiona Liao <fiona.liao@grafana.com>:
This commit is contained in:
parent
7e020bb4e9
commit
79b53bd3de
|
@ -4730,6 +4730,14 @@ func TestChunkSnapshotTakenAfterIncompleteSnapshot(t *testing.T) {
|
||||||
|
|
||||||
// TestWBLReplay checks the replay at a low level.
|
// TestWBLReplay checks the replay at a low level.
|
||||||
func TestWBLReplay(t *testing.T) {
|
func TestWBLReplay(t *testing.T) {
|
||||||
|
for name, scenario := range sampleTypeScenarios {
|
||||||
|
t.Run(name, func(t *testing.T) {
|
||||||
|
testWBLReplay(t, scenario)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func testWBLReplay(t *testing.T, scenario sampleTypeScenario) {
|
||||||
dir := t.TempDir()
|
dir := t.TempDir()
|
||||||
wal, err := wlog.NewSize(nil, nil, filepath.Join(dir, "wal"), 32768, wlog.CompressionSnappy)
|
wal, err := wlog.NewSize(nil, nil, filepath.Join(dir, "wal"), 32768, wlog.CompressionSnappy)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
@ -4745,11 +4753,11 @@ func TestWBLReplay(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NoError(t, h.Init(0))
|
require.NoError(t, h.Init(0))
|
||||||
|
|
||||||
var expOOOSamples []sample
|
var expOOOSamples []chunks.Sample
|
||||||
l := labels.FromStrings("foo", "bar")
|
l := labels.FromStrings("foo", "bar")
|
||||||
appendSample := func(mins int64, isOOO bool) {
|
appendSample := func(mins int64, val float64, isOOO bool) {
|
||||||
app := h.Appender(context.Background())
|
app := h.Appender(context.Background())
|
||||||
ts, v := mins*time.Minute.Milliseconds(), float64(mins)
|
ts, v := mins*time.Minute.Milliseconds(), val
|
||||||
_, err := app.Append(0, l, ts, v)
|
_, err := app.Append(0, l, ts, v)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NoError(t, app.Commit())
|
require.NoError(t, app.Commit())
|
||||||
|
@ -4760,15 +4768,15 @@ func TestWBLReplay(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// In-order sample.
|
// In-order sample.
|
||||||
appendSample(60, false)
|
appendSample(60, 60, false)
|
||||||
|
|
||||||
// Out of order samples.
|
// Out of order samples.
|
||||||
appendSample(40, true)
|
appendSample(40, 40, true)
|
||||||
appendSample(35, true)
|
appendSample(35, 35, true)
|
||||||
appendSample(50, true)
|
appendSample(50, 50, true)
|
||||||
appendSample(55, true)
|
appendSample(55, 55, true)
|
||||||
appendSample(59, true)
|
appendSample(59, 59, true)
|
||||||
appendSample(31, true)
|
appendSample(31, 31, true)
|
||||||
|
|
||||||
// Check that Head's time ranges are set properly.
|
// Check that Head's time ranges are set properly.
|
||||||
require.Equal(t, 60*time.Minute.Milliseconds(), h.MinTime())
|
require.Equal(t, 60*time.Minute.Milliseconds(), h.MinTime())
|
||||||
|
@ -4796,20 +4804,19 @@ func TestWBLReplay(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, chks, 1)
|
require.Len(t, chks, 1)
|
||||||
|
|
||||||
xor := chks[0].chunk.(*chunkenc.XORChunk)
|
it := chks[0].chunk.Iterator(nil)
|
||||||
it := xor.Iterator(nil)
|
actOOOSamples, err := storage.ExpandSamples(it, nil)
|
||||||
actOOOSamples := make([]sample, 0, len(expOOOSamples))
|
require.NoError(t, err)
|
||||||
for it.Next() == chunkenc.ValFloat {
|
|
||||||
ts, v := it.At()
|
|
||||||
actOOOSamples = append(actOOOSamples, sample{t: ts, f: v})
|
|
||||||
}
|
|
||||||
|
|
||||||
// OOO chunk will be sorted. Hence sort the expected samples.
|
// OOO chunk will be sorted. Hence sort the expected samples.
|
||||||
sort.Slice(expOOOSamples, func(i, j int) bool {
|
sort.Slice(expOOOSamples, func(i, j int) bool {
|
||||||
return expOOOSamples[i].t < expOOOSamples[j].t
|
return expOOOSamples[i].T() < expOOOSamples[j].T()
|
||||||
})
|
})
|
||||||
|
|
||||||
require.Equal(t, expOOOSamples, actOOOSamples)
|
// Passing in true for the 'ignoreCounterResets' parameter prevents differences in counter reset headers
|
||||||
|
// from being factored in to the sample comparison
|
||||||
|
// TODO(fionaliao): understand counter reset behaviour, might want to modify this later
|
||||||
|
requireEqualSamples(t, l.String(), expOOOSamples, actOOOSamples, true)
|
||||||
|
|
||||||
require.NoError(t, h.Close())
|
require.NoError(t, h.Close())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue