@@ -988,7 +988,7 @@ func Test_MergeBinOpVectors_Filter(t *testing.T) {
988
988
require .Equal (t , & promql.Sample {F : 2 }, res )
989
989
}
990
990
991
- func TestFilterReodering (t * testing.T ) {
991
+ func TestFilterReordering (t * testing.T ) {
992
992
t .Run ("it makes sure line filters are as early in the pipeline stages as possible" , func (t * testing.T ) {
993
993
logExpr := `{container_name="app"} |= "foo" |= "next" | logfmt |="bar" |="baz" | line_format "{{.foo}}" |="1" |="2" | logfmt |="3"`
994
994
l , err := ParseExpr (logExpr )
@@ -1008,6 +1008,36 @@ func TestFilterReodering(t *testing.T) {
1008
1008
require .Len (t , stages , 5 )
1009
1009
require .Equal (t , `|= "06497595" | unpack != "message" | json | line_format "new log: {{.foo}}"` , MultiStageExpr (stages ).String ())
1010
1010
})
1011
+
1012
+ t .Run ("it makes sure label filter order is kept" , func (t * testing.T ) {
1013
+ logExpr := `{container_name="app"} | bar="next" |= "foo" | logfmt |="bar" |="baz" | line_format "{{.foo}}" |="1" |="2" | logfmt |="3"`
1014
+ l , err := ParseExpr (logExpr )
1015
+ require .NoError (t , err )
1016
+
1017
+ stages := l .(* PipelineExpr ).MultiStages .reorderStages ()
1018
+ require .Len (t , stages , 6 )
1019
+ require .Equal (t , `| bar="next" |= "foo" |= "bar" |= "baz" | logfmt | line_format "{{.foo}}" |= "1" |= "2" |= "3" | logfmt` , MultiStageExpr (stages ).String ())
1020
+ })
1021
+
1022
+ t .Run ("it makes sure line filters before labels filters keeps correct ordering" , func (t * testing.T ) {
1023
+ logExpr := `{container_name="app"} |= "foo" |bar="next"`
1024
+ l , err := ParseExpr (logExpr )
1025
+ require .NoError (t , err )
1026
+
1027
+ stages := l .(* PipelineExpr ).MultiStages .reorderStages ()
1028
+ require .Len (t , stages , 2 )
1029
+ require .Equal (t , `|= "foo" | bar="next"` , MultiStageExpr (stages ).String ())
1030
+ })
1031
+
1032
+ t .Run ("it makes sure json before label filter keeps correct ordering" , func (t * testing.T ) {
1033
+ logExpr := `{container_name="app"} | json | bar="next"`
1034
+ l , err := ParseExpr (logExpr )
1035
+ require .NoError (t , err )
1036
+
1037
+ stages := l .(* PipelineExpr ).MultiStages .reorderStages ()
1038
+ require .Len (t , stages , 2 )
1039
+ require .Equal (t , `| json | bar="next"` , MultiStageExpr (stages ).String ())
1040
+ })
1011
1041
}
1012
1042
1013
1043
var result bool
0 commit comments