@@ -65,15 +65,17 @@ func TestEngine_LogsRateUnwrap(t *testing.T) {
65
65
{newSeries (testSize , offset (46 , constantValue (1 )), `{app="foo"}` )},
66
66
},
67
67
[]SelectSampleParams {
68
- {& logproto.SampleQueryRequest {
69
- Start : time .Unix (30 , 0 ),
70
- End : time .Unix (60 , 0 ),
71
- Selector : `rate({app="foo"} | unwrap foo[30s])` ,
72
- Plan : & plan.QueryPlan {
73
- AST : syntax .MustParseExpr (`rate({app="foo"} | unwrap foo[30s])` ),
68
+ {
69
+ & logproto.SampleQueryRequest {
70
+ Start : time .Unix (30 , 0 ),
71
+ End : time .Unix (60 , 0 ),
72
+ Selector : `rate({app="foo"} | unwrap foo[30s])` ,
73
+ Plan : & plan.QueryPlan {
74
+ AST : syntax .MustParseExpr (`rate({app="foo"} | unwrap foo[30s])` ),
75
+ },
74
76
},
75
77
},
76
- } },
78
+ },
77
79
// there are 15 samples (from 47 to 61) matched from the generated series
78
80
// SUM(n=47, 61, 1) = 15
79
81
// 15 / 30 = 0.5
@@ -955,7 +957,6 @@ func TestEngine_InstantQuery(t *testing.T) {
955
957
} {
956
958
test := test
957
959
t .Run (fmt .Sprintf ("%s %s" , test .qs , test .direction ), func (t * testing.T ) {
958
-
959
960
eng := NewEngine (EngineOpts {}, newQuerierRecorder (t , test .data , test .params ), NoLimits , log .NewNopLogger ())
960
961
961
962
params , err := NewLiteralParams (test .qs , test .ts , test .ts , 0 , 0 , test .direction , test .limit , nil , nil )
@@ -1590,10 +1591,12 @@ func TestEngine_RangeQuery(t *testing.T) {
1590
1591
promql.Series {
1591
1592
// vector result
1592
1593
Metric : labels .Labels (nil ),
1593
- Floats : []promql.FPoint {{T : 60000 , F : 0 }, {T : 80000 , F : 0 }, {T : 100000 , F : 0 }, {T : 120000 , F : 0 }, {T : 140000 , F : 0 }, {T : 160000 , F : 0 }, {T : 180000 , F : 0 }}},
1594
+ Floats : []promql.FPoint {{T : 60000 , F : 0 }, {T : 80000 , F : 0 }, {T : 100000 , F : 0 }, {T : 120000 , F : 0 }, {T : 140000 , F : 0 }, {T : 160000 , F : 0 }, {T : 180000 , F : 0 }},
1595
+ },
1594
1596
promql.Series {
1595
1597
Metric : labels .FromStrings ("app" , "foo" ),
1596
- Floats : []promql.FPoint {{T : 60000 , F : 0.03333333333333333 }, {T : 80000 , F : 0.06666666666666667 }, {T : 100000 , F : 0.06666666666666667 }, {T : 120000 , F : 0.03333333333333333 }, {T : 180000 , F : 0.03333333333333333 }}},
1598
+ Floats : []promql.FPoint {{T : 60000 , F : 0.03333333333333333 }, {T : 80000 , F : 0.06666666666666667 }, {T : 100000 , F : 0.06666666666666667 }, {T : 120000 , F : 0.03333333333333333 }, {T : 180000 , F : 0.03333333333333333 }},
1599
+ },
1597
1600
},
1598
1601
},
1599
1602
{
@@ -2635,6 +2638,31 @@ func TestHashingStability(t *testing.T) {
2635
2638
}
2636
2639
}
2637
2640
2641
+ func TestUnexpectedEmptyResults (t * testing.T ) {
2642
+ ctx := user .InjectOrgID (context .Background (), "fake" )
2643
+
2644
+ mock := & mockEvaluatorFactory {SampleEvaluatorFunc (func (context.Context , SampleEvaluatorFactory , syntax.SampleExpr , Params ) (StepEvaluator , error ) {
2645
+ return EmptyEvaluator [SampleVector ]{value : nil }, nil
2646
+ })}
2647
+
2648
+ eng := NewEngine (EngineOpts {}, nil , NoLimits , log .NewNopLogger ())
2649
+ params , err := NewLiteralParams (`first_over_time({a=~".+"} | logfmt | unwrap value [1s])` , time .Now (), time .Now (), 0 , 0 , logproto .BACKWARD , 0 , nil , nil )
2650
+ require .NoError (t , err )
2651
+ q := eng .Query (params ).(* query )
2652
+ q .evaluator = mock
2653
+
2654
+ _ , err = q .Exec (ctx )
2655
+ require .Error (t , err )
2656
+ }
2657
+
2658
+ type mockEvaluatorFactory struct {
2659
+ SampleEvaluatorFactory
2660
+ }
2661
+
2662
+ func (* mockEvaluatorFactory ) NewIterator (context.Context , syntax.LogSelectorExpr , Params ) (iter.EntryIterator , error ) {
2663
+ return nil , errors .New ("unimplemented mock EntryEvaluatorFactory" )
2664
+ }
2665
+
2638
2666
func getLocalQuerier (size int64 ) Querier {
2639
2667
return & querierRecorder {
2640
2668
series : map [string ][]logproto.Series {
0 commit comments