@@ -40,3 +40,127 @@ func TestShard_SpaceFor(t *testing.T) {
40
40
})
41
41
}
42
42
}
43
+
44
+ func TestQueryPatternsRequest_GetSampleQuery (t * testing.T ) {
45
+ tests := []struct {
46
+ name string
47
+ query string
48
+ step int64
49
+ expected string
50
+ expectedError bool
51
+ }{
52
+ {
53
+ name : "simple selector with service_name" ,
54
+ query : `{service_name="test-service"}` ,
55
+ step : 60000 , // 1 minute in milliseconds
56
+ expected : `sum by (decoded_pattern, detected_level) (sum_over_time({__pattern__="test-service"} | logfmt | ` +
57
+ "label_format decoded_pattern=`{{urldecode .detected_pattern}}` " +
58
+ `| unwrap count [1m0s]))` ,
59
+ },
60
+ {
61
+ name : "selector with service_name and additional labels" ,
62
+ query : `{service_name="test-service", env="prod", cluster="us-east-1"}` ,
63
+ step : 300000 , // 5 minutes in milliseconds
64
+ expected : `sum by (decoded_pattern, detected_level) (sum_over_time({__pattern__="test-service"} | logfmt | ` +
65
+ "env=\" prod\" | cluster=\" us-east-1\" | " +
66
+ "label_format decoded_pattern=`{{urldecode .detected_pattern}}` " +
67
+ `| unwrap count [5m0s]))` ,
68
+ },
69
+ {
70
+ name : "selector with service_name and additional labels and match types" ,
71
+ query : `{service_name="test-service", env=~"prod", cluster!="us-east-1", foo!~"bar"}` ,
72
+ step : 300000 , // 5 minutes in milliseconds
73
+ expected : `sum by (decoded_pattern, detected_level) (sum_over_time({__pattern__="test-service"} | logfmt | ` +
74
+ "env=~\" prod\" | cluster!=\" us-east-1\" | foo!~\" bar\" | " +
75
+ "label_format decoded_pattern=`{{urldecode .detected_pattern}}` " +
76
+ `| unwrap count [5m0s]))` ,
77
+ },
78
+ {
79
+ name : "small step gets minimum 10s window" ,
80
+ query : `{service_name="test-service"}` ,
81
+ step : 5000 , // 5 seconds in milliseconds
82
+ expected : `sum by (decoded_pattern, detected_level) (sum_over_time({__pattern__="test-service"} | logfmt | ` +
83
+ "label_format decoded_pattern=`{{urldecode .detected_pattern}}` " +
84
+ `| unwrap count [10s]))` ,
85
+ },
86
+ {
87
+ name : "simple regex selector with service_name" ,
88
+ query : `{service_name=~"test-service"}` ,
89
+ step : 10000 , // 10 seconds in milliseconds
90
+ expected : `sum by (decoded_pattern, detected_level) (sum_over_time({__pattern__=~"test-service"} | logfmt | ` +
91
+ "label_format decoded_pattern=`{{urldecode .detected_pattern}}` " +
92
+ `| unwrap count [10s]))` ,
93
+ },
94
+ }
95
+
96
+ for _ , tc := range tests {
97
+ t .Run (tc .name , func (t * testing.T ) {
98
+ req := & QueryPatternsRequest {
99
+ Query : tc .query ,
100
+ Step : tc .step ,
101
+ }
102
+
103
+ result , err := req .GetSampleQuery ()
104
+
105
+ if tc .expectedError {
106
+ require .Error (t , err )
107
+ } else {
108
+ require .NoError (t , err )
109
+ require .Equal (t , tc .expected , result )
110
+ }
111
+ })
112
+ }
113
+ }
114
+
115
+ func TestQueryPatternsRequest_GetSampleQuery_NoServiceName (t * testing.T ) {
116
+ tests := []struct {
117
+ name string
118
+ query string
119
+ expected string
120
+ expectedError bool
121
+ }{
122
+ {
123
+ name : "no service_name label" ,
124
+ query : `{env="prod", cluster="us-east-1"}` ,
125
+ expected : `sum by (decoded_pattern, detected_level) (sum_over_time({__pattern__=~".+"} | logfmt | ` +
126
+ "env=\" prod\" | cluster=\" us-east-1\" | " +
127
+ "label_format decoded_pattern=`{{urldecode .detected_pattern}}` " +
128
+ `| unwrap count [1m0s]))` ,
129
+ },
130
+ {
131
+ name : "no service_name label, mixed match types" ,
132
+ query : `{env!="prod", cluster=~"us-east-1", app!~"foo"}` ,
133
+ expected : `sum by (decoded_pattern, detected_level) (sum_over_time({__pattern__=~".+"} | logfmt | ` +
134
+ "env!=\" prod\" | cluster=~\" us-east-1\" | app!~\" foo\" | " +
135
+ "label_format decoded_pattern=`{{urldecode .detected_pattern}}` " +
136
+ `| unwrap count [1m0s]))` ,
137
+ },
138
+ }
139
+
140
+ for _ , tc := range tests {
141
+ t .Run (tc .name , func (t * testing.T ) {
142
+ req := & QueryPatternsRequest {
143
+ Query : tc .query ,
144
+ Step : 60000 ,
145
+ }
146
+
147
+ result , err := req .GetSampleQuery ()
148
+ if tc .expectedError {
149
+ require .Error (t , err )
150
+ } else {
151
+ require .NoError (t , err )
152
+ require .Equal (t , tc .expected , result )
153
+ }
154
+ })
155
+ }
156
+ }
157
+
158
+ func TestQueryPatternsRequest_GetSampleQuery_InvalidQuery (t * testing.T ) {
159
+ req := & QueryPatternsRequest {
160
+ Query : `{invalid query syntax` ,
161
+ Step : 60000 ,
162
+ }
163
+
164
+ _ , err := req .GetSampleQuery ()
165
+ require .Error (t , err )
166
+ }
0 commit comments