use test utils in index_test

This commit is contained in:
Callum Styan 2017-12-06 16:27:21 -08:00
parent a1a91ea96a
commit 945b6b01aa

View file

@ -24,7 +24,6 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"github.com/prometheus/tsdb/chunks" "github.com/prometheus/tsdb/chunks"
"github.com/prometheus/tsdb/labels" "github.com/prometheus/tsdb/labels"
"github.com/stretchr/testify/require"
) )
type series struct { type series struct {
@ -151,35 +150,35 @@ func (m mockIndex) LabelIndices() ([][]string, error) {
func TestIndexRW_Create_Open(t *testing.T) { func TestIndexRW_Create_Open(t *testing.T) {
dir, err := ioutil.TempDir("", "test_index_create") dir, err := ioutil.TempDir("", "test_index_create")
require.NoError(t, err) Ok(t, err)
defer os.RemoveAll(dir) defer os.RemoveAll(dir)
// An empty index must still result in a readable file. // An empty index must still result in a readable file.
iw, err := newIndexWriter(dir) iw, err := newIndexWriter(dir)
require.NoError(t, err, "create index writer") Ok(t, err)
require.NoError(t, iw.Close(), "close index writer") Ok(t, iw.Close())
ir, err := NewFileIndexReader(filepath.Join(dir, "index")) ir, err := NewFileIndexReader(filepath.Join(dir, "index"))
require.NoError(t, err, "open index reader") Ok(t, err)
require.NoError(t, ir.Close(), "close index reader") Ok(t, ir.Close())
// Modify magic header must cause open to fail. // Modify magic header must cause open to fail.
f, err := os.OpenFile(filepath.Join(dir, "index"), os.O_WRONLY, 0666) f, err := os.OpenFile(filepath.Join(dir, "index"), os.O_WRONLY, 0666)
require.NoError(t, err) Ok(t, err)
_, err = f.WriteAt([]byte{0, 0}, 0) _, err = f.WriteAt([]byte{0, 0}, 0)
require.NoError(t, err) Ok(t, err)
_, err = NewFileIndexReader(dir) _, err = NewFileIndexReader(dir)
require.Error(t, err) NotOk(t, err)
} }
func TestIndexRW_Postings(t *testing.T) { func TestIndexRW_Postings(t *testing.T) {
dir, err := ioutil.TempDir("", "test_index_postings") dir, err := ioutil.TempDir("", "test_index_postings")
require.NoError(t, err) Ok(t, err)
defer os.RemoveAll(dir) defer os.RemoveAll(dir)
iw, err := newIndexWriter(dir) iw, err := newIndexWriter(dir)
require.NoError(t, err, "create index writer") Ok(t, err)
series := []labels.Labels{ series := []labels.Labels{
labels.FromStrings("a", "1", "b", "1"), labels.FromStrings("a", "1", "b", "1"),
@ -196,25 +195,25 @@ func TestIndexRW_Postings(t *testing.T) {
"3": struct{}{}, "3": struct{}{},
"4": struct{}{}, "4": struct{}{},
}) })
require.NoError(t, err) Ok(t, err)
// Postings lists are only written if a series with the respective // Postings lists are only written if a series with the respective
// reference was added before. // reference was added before.
require.NoError(t, iw.AddSeries(1, series[0])) Ok(t, iw.AddSeries(1, series[0]))
require.NoError(t, iw.AddSeries(2, series[1])) Ok(t, iw.AddSeries(2, series[1]))
require.NoError(t, iw.AddSeries(3, series[2])) Ok(t, iw.AddSeries(3, series[2]))
require.NoError(t, iw.AddSeries(4, series[3])) Ok(t, iw.AddSeries(4, series[3]))
err = iw.WritePostings("a", "1", newListPostings([]uint64{1, 2, 3, 4})) err = iw.WritePostings("a", "1", newListPostings([]uint64{1, 2, 3, 4}))
require.NoError(t, err) Ok(t, err)
require.NoError(t, iw.Close()) Ok(t, iw.Close())
ir, err := NewFileIndexReader(filepath.Join(dir, "index")) ir, err := NewFileIndexReader(filepath.Join(dir, "index"))
require.NoError(t, err, "open index reader") Ok(t, err)
p, err := ir.Postings("a", "1") p, err := ir.Postings("a", "1")
require.NoError(t, err) Ok(t, err)
var l labels.Labels var l labels.Labels
var c []ChunkMeta var c []ChunkMeta
@ -222,22 +221,22 @@ func TestIndexRW_Postings(t *testing.T) {
for i := 0; p.Next(); i++ { for i := 0; p.Next(); i++ {
err := ir.Series(p.At(), &l, &c) err := ir.Series(p.At(), &l, &c)
require.NoError(t, err) Ok(t, err)
require.Equal(t, 0, len(c)) Equals(t, 0, len(c))
require.Equal(t, series[i], l) Equals(t, series[i], l)
} }
require.NoError(t, p.Err()) Ok(t, p.Err())
require.NoError(t, ir.Close()) Ok(t, ir.Close())
} }
func TestPersistence_index_e2e(t *testing.T) { func TestPersistence_index_e2e(t *testing.T) {
dir, err := ioutil.TempDir("", "test_persistence_e2e") dir, err := ioutil.TempDir("", "test_persistence_e2e")
require.NoError(t, err) Ok(t, err)
defer os.RemoveAll(dir) defer os.RemoveAll(dir)
lbls, err := readPrometheusLabels("testdata/20k.series", 20000) lbls, err := readPrometheusLabels("testdata/20k.series", 20000)
require.NoError(t, err) Ok(t, err)
// Sort labels as the index writer expects series in sorted order. // Sort labels as the index writer expects series in sorted order.
sort.Sort(labels.Slice(lbls)) sort.Sort(labels.Slice(lbls))
@ -271,9 +270,9 @@ func TestPersistence_index_e2e(t *testing.T) {
} }
iw, err := newIndexWriter(dir) iw, err := newIndexWriter(dir)
require.NoError(t, err) Ok(t, err)
require.NoError(t, iw.AddSymbols(symbols)) Ok(t, iw.AddSymbols(symbols))
// Population procedure as done by compaction. // Population procedure as done by compaction.
var ( var (
@ -286,7 +285,7 @@ func TestPersistence_index_e2e(t *testing.T) {
for i, s := range input { for i, s := range input {
err = iw.AddSeries(uint64(i), s.labels, s.chunks...) err = iw.AddSeries(uint64(i), s.labels, s.chunks...)
require.NoError(t, err) Ok(t, err)
mi.AddSeries(uint64(i), s.labels, s.chunks...) mi.AddSeries(uint64(i), s.labels, s.chunks...)
for _, l := range s.labels { for _, l := range s.labels {
@ -304,8 +303,8 @@ func TestPersistence_index_e2e(t *testing.T) {
for k, v := range values { for k, v := range values {
vals := v.slice() vals := v.slice()
require.NoError(t, iw.WriteLabelIndex([]string{k}, vals)) Ok(t, iw.WriteLabelIndex([]string{k}, vals))
require.NoError(t, mi.WriteLabelIndex([]string{k}, vals)) Ok(t, mi.WriteLabelIndex([]string{k}, vals))
} }
all := make([]uint64, len(lbls)) all := make([]uint64, len(lbls))
@ -313,24 +312,24 @@ func TestPersistence_index_e2e(t *testing.T) {
all[i] = uint64(i) all[i] = uint64(i)
} }
err = iw.WritePostings("", "", newListPostings(all)) err = iw.WritePostings("", "", newListPostings(all))
require.NoError(t, err) Ok(t, err)
mi.WritePostings("", "", newListPostings(all)) mi.WritePostings("", "", newListPostings(all))
for l := range postings.m { for l := range postings.m {
err = iw.WritePostings(l.Name, l.Value, postings.get(l.Name, l.Value)) err = iw.WritePostings(l.Name, l.Value, postings.get(l.Name, l.Value))
require.NoError(t, err) Ok(t, err)
mi.WritePostings(l.Name, l.Value, postings.get(l.Name, l.Value)) mi.WritePostings(l.Name, l.Value, postings.get(l.Name, l.Value))
} }
err = iw.Close() err = iw.Close()
require.NoError(t, err) Ok(t, err)
ir, err := NewFileIndexReader(filepath.Join(dir, "index")) ir, err := NewFileIndexReader(filepath.Join(dir, "index"))
require.NoError(t, err) Ok(t, err)
for p := range mi.postings.m { for p := range mi.postings.m {
gotp, err := ir.Postings(p.Name, p.Value) gotp, err := ir.Postings(p.Name, p.Value)
require.NoError(t, err) Ok(t, err)
expp, err := mi.Postings(p.Name, p.Value) expp, err := mi.Postings(p.Name, p.Value)
@ -338,39 +337,39 @@ func TestPersistence_index_e2e(t *testing.T) {
var chks, expchks []ChunkMeta var chks, expchks []ChunkMeta
for gotp.Next() { for gotp.Next() {
require.True(t, expp.Next()) Assert(t, expp.Next() == true, "")
ref := gotp.At() ref := gotp.At()
err := ir.Series(ref, &lset, &chks) err := ir.Series(ref, &lset, &chks)
require.NoError(t, err) Ok(t, err)
err = mi.Series(expp.At(), &explset, &expchks) err = mi.Series(expp.At(), &explset, &expchks)
require.Equal(t, explset, lset) Equals(t, explset, lset)
require.Equal(t, expchks, chks) Equals(t, expchks, chks)
} }
require.False(t, expp.Next()) Assert(t, expp.Next() == false, "")
require.NoError(t, gotp.Err()) Ok(t, gotp.Err())
} }
for k, v := range mi.labelIndex { for k, v := range mi.labelIndex {
tplsExp, err := newStringTuples(v, 1) tplsExp, err := newStringTuples(v, 1)
require.NoError(t, err) Ok(t, err)
tplsRes, err := ir.LabelValues(k) tplsRes, err := ir.LabelValues(k)
require.NoError(t, err) Ok(t, err)
require.Equal(t, tplsExp.Len(), tplsRes.Len()) Equals(t, tplsExp.Len(), tplsRes.Len())
for i := 0; i < tplsExp.Len(); i++ { for i := 0; i < tplsExp.Len(); i++ {
strsExp, err := tplsExp.At(i) strsExp, err := tplsExp.At(i)
require.NoError(t, err) Ok(t, err)
strsRes, err := tplsRes.At(i) strsRes, err := tplsRes.At(i)
require.NoError(t, err) Ok(t, err)
require.Equal(t, strsExp, strsRes) Equals(t, strsExp, strsRes)
} }
} }
require.NoError(t, ir.Close()) Ok(t, ir.Close())
} }