Skip to content

Commit 15585ff

Browse files
Add regression test
Signed-off-by: Piyush Sharma <piyushsharma04321@gmail.com>
1 parent 30b4821 commit 15585ff

1 file changed

Lines changed: 70 additions & 0 deletions

File tree

pkg/query/remote_engine_test.go

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@ import (
1515
"github.com/pkg/errors"
1616
"github.com/prometheus/prometheus/model/labels"
1717
"google.golang.org/grpc"
18+
"google.golang.org/grpc/metadata"
1819

1920
"github.com/thanos-io/promql-engine/logicalplan"
2021
"github.com/thanos-io/promql-engine/query"
2122
"github.com/thanos-io/thanos/pkg/api/query/querypb"
2223
"github.com/thanos-io/thanos/pkg/extpromql"
2324
"github.com/thanos-io/thanos/pkg/info/infopb"
2425
"github.com/thanos-io/thanos/pkg/store/labelpb"
26+
"github.com/thanos-io/thanos/pkg/tenancy"
2527
)
2628

2729
func TestRemoteEngine_Warnings(t *testing.T) {
@@ -269,6 +271,49 @@ func TestRemoteEngine_MinT(t *testing.T) {
269271
}
270272
}
271273

274+
func TestRemoteEngine_Tenancy(t *testing.T) {
275+
t.Parallel()
276+
277+
mock := &tenantCheckClient{}
278+
engine := NewRemoteEngine(
279+
log.NewNopLogger(),
280+
NewClient(mock, "testclient", nil),
281+
Opts{
282+
Timeout: time.Second,
283+
},
284+
)
285+
286+
expr, err := extpromql.ParseExpr("up")
287+
testutil.Ok(t, err)
288+
plan, err := logicalplan.NewFromAST(expr, &query.Options{
289+
Start: time.Now(),
290+
End: time.Now(),
291+
}, logicalplan.PlanOptions{})
292+
testutil.Ok(t, err)
293+
294+
ctx := context.WithValue(context.Background(), tenancy.TenantKey, "my-tenant")
295+
296+
t.Run("instant_query", func(t *testing.T) {
297+
mock.tenant = ""
298+
qry, err := engine.NewInstantQuery(ctx, nil, plan.Root(), time.Unix(0, 0))
299+
testutil.Ok(t, err)
300+
301+
res := qry.Exec(ctx)
302+
testutil.Ok(t, res.Err)
303+
testutil.Equals(t, "my-tenant", mock.tenant)
304+
})
305+
306+
t.Run("range_query", func(t *testing.T) {
307+
mock.tenant = ""
308+
qry, err := engine.NewRangeQuery(ctx, nil, plan.Root(), time.Unix(0, 0), time.Unix(10, 0), time.Second)
309+
testutil.Ok(t, err)
310+
311+
res := qry.Exec(ctx)
312+
testutil.Ok(t, res.Err)
313+
testutil.Equals(t, "my-tenant", mock.tenant)
314+
})
315+
}
316+
272317
func zLabelSetFromStrings(ss ...string) labelpb.ZLabelSet {
273318
return labelpb.ZLabelSet{
274319
Labels: labelpb.ZLabelsFromPromLabels(labels.FromStrings(ss...)),
@@ -350,3 +395,28 @@ func (m *queryErrClient) Recv() (*querypb.QueryResponse, error) {
350395
m.errSent = true
351396
return nil, errors.New("error")
352397
}
398+
399+
type tenantCheckClient struct {
400+
warnClient
401+
tenant string
402+
}
403+
404+
func (m *tenantCheckClient) Query(ctx context.Context, req *querypb.QueryRequest, opts ...grpc.CallOption) (querypb.Query_QueryClient, error) {
405+
if md, ok := metadata.FromOutgoingContext(ctx); ok {
406+
vals := md.Get(tenancy.DefaultTenantHeader)
407+
if len(vals) > 0 {
408+
m.tenant = vals[0]
409+
}
410+
}
411+
return m.warnClient.Query(ctx, req, opts...)
412+
}
413+
414+
func (m *tenantCheckClient) QueryRange(ctx context.Context, req *querypb.QueryRangeRequest, opts ...grpc.CallOption) (querypb.Query_QueryRangeClient, error) {
415+
if md, ok := metadata.FromOutgoingContext(ctx); ok {
416+
vals := md.Get(tenancy.DefaultTenantHeader)
417+
if len(vals) > 0 {
418+
m.tenant = vals[0]
419+
}
420+
}
421+
return m.warnClient.QueryRange(ctx, req, opts...)
422+
}

0 commit comments

Comments
 (0)