Skip to content
This repository was archived by the owner on Apr 2, 2024. It is now read-only.

Commit d92751e

Browse files
committed
Fix tests in promql package
This makes tests support the new pushdown interface.
1 parent 959b4eb commit d92751e

File tree

4 files changed

+69
-14
lines changed

4 files changed

+69
-14
lines changed

pkg/promql/bench_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,10 @@ import (
2323

2424
"github.com/prometheus/prometheus/pkg/labels"
2525
"github.com/prometheus/prometheus/promql/parser"
26-
"github.com/prometheus/prometheus/util/teststorage"
2726
)
2827

2928
func BenchmarkRangeQuery(b *testing.B) {
30-
storage := teststorage.New(b)
29+
storage := NewTestStorage(b)
3130
defer storage.Close()
3231
opts := EngineOpts{
3332
Logger: nil,

pkg/promql/engine_test.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ import (
3131
"github.com/prometheus/prometheus/util/testutil"
3232
)
3333

34+
type QueryableFunc func(ctx context.Context, mint, maxt int64) (Querier, error)
35+
36+
// Querier calls f() with the given parameters.
37+
func (f QueryableFunc) Querier(ctx context.Context, mint, maxt int64) (Querier, error) {
38+
return f(ctx, mint, maxt)
39+
}
40+
3441
func TestQueryConcurrency(t *testing.T) {
3542
maxConcurrency := 10
3643

@@ -175,8 +182,8 @@ type errQuerier struct {
175182
err error
176183
}
177184

178-
func (q *errQuerier) Select(bool, *storage.SelectHints, ...*labels.Matcher) (storage.SeriesSet, storage.Warnings, error) {
179-
return errSeriesSet{err: q.err}, nil, q.err
185+
func (q *errQuerier) Select(bool, *storage.SelectHints, []parser.Node, ...*labels.Matcher) (storage.SeriesSet, parser.Node, storage.Warnings, error) {
186+
return errSeriesSet{err: q.err}, nil, nil, q.err
180187
}
181188
func (*errQuerier) LabelValues(string) ([]string, storage.Warnings, error) { return nil, nil, nil }
182189
func (*errQuerier) LabelNames() ([]string, storage.Warnings, error) { return nil, nil, nil }
@@ -200,7 +207,7 @@ func TestQueryError(t *testing.T) {
200207
}
201208
engine := NewEngine(opts)
202209
errStorage := ErrStorage{errors.New("storage error")}
203-
queryable := storage.QueryableFunc(func(ctx context.Context, mint, maxt int64) (storage.Querier, error) {
210+
queryable := QueryableFunc(func(ctx context.Context, mint, maxt int64) (Querier, error) {
204211
return &errQuerier{err: errStorage}, nil
205212
})
206213
ctx, cancelCtx := context.WithCancel(context.Background())
@@ -234,15 +241,15 @@ type hintCheckerQuerier struct {
234241
t *testing.T
235242
}
236243

237-
func (q *hintCheckerQuerier) Select(_ bool, sp *storage.SelectHints, _ ...*labels.Matcher) (storage.SeriesSet, storage.Warnings, error) {
244+
func (q *hintCheckerQuerier) Select(_ bool, sp *storage.SelectHints, _ []parser.Node, _ ...*labels.Matcher) (storage.SeriesSet, parser.Node, storage.Warnings, error) {
238245
testutil.Equals(q.t, q.start, sp.Start)
239246
testutil.Equals(q.t, q.end, sp.End)
240247
testutil.Equals(q.t, q.grouping, sp.Grouping)
241248
testutil.Equals(q.t, q.by, sp.By)
242249
testutil.Equals(q.t, q.selRange, sp.Range)
243250
testutil.Equals(q.t, q.function, sp.Func)
244251

245-
return errSeriesSet{err: nil}, nil, nil
252+
return errSeriesSet{err: nil}, nil, nil, nil
246253
}
247254
func (*hintCheckerQuerier) LabelValues(string) ([]string, storage.Warnings, error) {
248255
return nil, nil, nil
@@ -428,7 +435,7 @@ func TestParamsSetCorrectly(t *testing.T) {
428435

429436
for _, tc := range cases {
430437
engine := NewEngine(opts)
431-
queryable := storage.QueryableFunc(func(ctx context.Context, mint, maxt int64) (storage.Querier, error) {
438+
queryable := QueryableFunc(func(ctx context.Context, mint, maxt int64) (Querier, error) {
432439
return &hintCheckerQuerier{start: tc.paramStart * 1000, end: tc.paramEnd * 1000, grouping: tc.paramGrouping, by: tc.paramBy, selRange: tc.paramRange, function: tc.paramFunc, t: t}, nil
433440
})
434441

pkg/promql/functions_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,14 @@ import (
2222
"github.com/prometheus/prometheus/pkg/labels"
2323
"github.com/prometheus/prometheus/pkg/timestamp"
2424
"github.com/prometheus/prometheus/promql/parser"
25-
"github.com/prometheus/prometheus/util/teststorage"
2625
"github.com/prometheus/prometheus/util/testutil"
2726
)
2827

2928
func TestDeriv(t *testing.T) {
3029
// https://github.com/prometheus/prometheus/issues/2674#issuecomment-315439393
3130
// This requires more precision than the usual test system offers,
3231
// so we test it by hand.
33-
storage := teststorage.New(t)
32+
storage := NewTestStorage(t)
3433
defer storage.Close()
3534
opts := EngineOpts{
3635
Logger: nil,

pkg/promql/test.go

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"fmt"
1919
"io/ioutil"
2020
"math"
21+
"os"
2122
"regexp"
2223
"strconv"
2324
"strings"
@@ -47,14 +48,63 @@ const (
4748

4849
var testStartTime = time.Unix(0, 0).UTC()
4950

51+
// New returns a new TestStorage for testing purposes
52+
// that removes all associated files on closing.
53+
func NewTestStorage(t testutil.T) *TestStorage {
54+
dir, err := ioutil.TempDir("", "test_storage")
55+
if err != nil {
56+
t.Fatalf("Opening test dir failed: %s", err)
57+
}
58+
59+
// Tests just load data for a series sequentially. Thus we
60+
// need a long appendable window.
61+
opts := tsdb.DefaultOptions()
62+
opts.MinBlockDuration = int64(24 * time.Hour / time.Millisecond)
63+
opts.MaxBlockDuration = int64(24 * time.Hour / time.Millisecond)
64+
db, err := tsdb.Open(dir, nil, nil, opts)
65+
if err != nil {
66+
t.Fatalf("Opening test storage failed: %s", err)
67+
}
68+
return &TestStorage{DB: db, dir: dir}
69+
}
70+
71+
type TestStorage struct {
72+
*tsdb.DB
73+
dir string
74+
}
75+
76+
type QuerierWrapper struct {
77+
storage.Querier
78+
}
79+
80+
func (t *QuerierWrapper) Select(b bool, sh *storage.SelectHints, _ []parser.Node, m ...*labels.Matcher) (storage.SeriesSet, parser.Node, storage.Warnings, error) {
81+
ss, w, err := t.Querier.Select(b, sh, m...)
82+
return ss, nil, w, err
83+
}
84+
85+
func (db *TestStorage) Querier(ctx context.Context, mint, maxt int64) (Querier, error) {
86+
q, err := db.DB.Querier(ctx, mint, maxt)
87+
if err != nil {
88+
return nil, err
89+
}
90+
return &QuerierWrapper{q}, err
91+
}
92+
93+
func (s TestStorage) Close() error {
94+
if err := s.DB.Close(); err != nil {
95+
return err
96+
}
97+
return os.RemoveAll(s.dir)
98+
}
99+
50100
// Test is a sequence of read and write commands that are run
51101
// against a test storage.
52102
type Test struct {
53103
testutil.T
54104

55105
cmds []testCommand
56106

57-
storage *teststorage.TestStorage
107+
storage *TestStorage
58108

59109
queryEngine *Engine
60110
context context.Context
@@ -87,7 +137,7 @@ func (t *Test) QueryEngine() *Engine {
87137
}
88138

89139
// Queryable allows querying the test data.
90-
func (t *Test) Queryable() storage.Queryable {
140+
func (t *Test) Queryable() Queryable {
91141
return t.storage
92142
}
93143

@@ -98,7 +148,7 @@ func (t *Test) Context() context.Context {
98148

99149
// Storage returns the test's storage.
100150
func (t *Test) Storage() storage.Storage {
101-
return t.storage
151+
return t.storage.DB
102152
}
103153

104154
// TSDB returns test's TSDB.
@@ -515,7 +565,7 @@ func (t *Test) clear() {
515565
if t.cancelCtx != nil {
516566
t.cancelCtx()
517567
}
518-
t.storage = teststorage.New(t)
568+
t.storage = NewTestStorage(t)
519569

520570
opts := EngineOpts{
521571
Logger: nil,

0 commit comments

Comments
 (0)