|
|
|
|
@ -851,3 +851,62 @@ func TestSeriesIterator(t *testing.T) { |
|
|
|
|
|
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestPopulatedCSReturnsValidChunkSlice(t *testing.T) { |
|
|
|
|
lbls := []labels.Labels{labels.New(labels.Label{"a", "b"})} |
|
|
|
|
chunkMetas := [][]*ChunkMeta{ |
|
|
|
|
{ |
|
|
|
|
{MinTime: 1, MaxTime: 2, Ref: 1}, |
|
|
|
|
{MinTime: 3, MaxTime: 4, Ref: 2}, |
|
|
|
|
{MinTime: 10, MaxTime: 12, Ref: 3}, |
|
|
|
|
}, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
cr := mockChunkReader( |
|
|
|
|
map[uint64]chunks.Chunk{ |
|
|
|
|
1: chunks.NewXORChunk(), |
|
|
|
|
2: chunks.NewXORChunk(), |
|
|
|
|
3: chunks.NewXORChunk(), |
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
m := &mockChunkSeriesSet{l: lbls, cm: chunkMetas, i: -1} |
|
|
|
|
p := &populatedChunkSeries{ |
|
|
|
|
set: m, |
|
|
|
|
chunks: cr, |
|
|
|
|
|
|
|
|
|
mint: 0, |
|
|
|
|
maxt: 0, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
require.False(t, p.Next()) |
|
|
|
|
|
|
|
|
|
p.mint = 6 |
|
|
|
|
p.maxt = 9 |
|
|
|
|
require.False(t, p.Next()) |
|
|
|
|
|
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
type mockChunkSeriesSet struct { |
|
|
|
|
l []labels.Labels |
|
|
|
|
cm [][]*ChunkMeta |
|
|
|
|
|
|
|
|
|
i int |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (m *mockChunkSeriesSet) Next() bool { |
|
|
|
|
if len(m.l) != len(m.cm) { |
|
|
|
|
return false |
|
|
|
|
} |
|
|
|
|
m.i++ |
|
|
|
|
return m.i < len(m.l) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (m *mockChunkSeriesSet) At() (labels.Labels, []*ChunkMeta) { |
|
|
|
|
return m.l[m.i], m.cm[m.i] |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (m *mockChunkSeriesSet) Err() error { |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|