@@ -198,34 +198,43 @@ func TestResponse(t *testing.T) {
198198}
199199
200200func TestMergeResponse (t * testing.T ) {
201+ defaultReq := & PrometheusRequest {
202+ Query : "sum(up)" ,
203+ }
201204 for _ , tc := range []struct {
202205 name string
206+ req tripperware.Request
203207 resps []string
204208 expectedResp string
205209 expectedErr error
206210 }{
207211 {
208212 name : "empty response" ,
213+ req : defaultReq ,
209214 resps : []string {`{"status":"success","data":{"resultType":"vector","result":[]}}` },
210215 expectedResp : `{"status":"success","data":{"resultType":"vector","result":[]}}` ,
211216 },
212217 {
213218 name : "empty response with stats" ,
219+ req : defaultReq ,
214220 resps : []string {`{"status":"success","data":{"resultType":"vector","result":[],"stats":{"samples":{"totalQueryableSamples":0,"totalQueryableSamplesPerStep":[]}}}}` },
215221 expectedResp : `{"status":"success","data":{"resultType":"vector","result":[],"stats":{"samples":{"totalQueryableSamples":0,"totalQueryableSamplesPerStep":[]}}}}` ,
216222 },
217223 {
218224 name : "single response" ,
225+ req : defaultReq ,
219226 resps : []string {`{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up"},"value":[1,"1"]}]}}` },
220227 expectedResp : `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up"},"value":[1,"1"]}]}}` ,
221228 },
222229 {
223230 name : "single response with stats" ,
231+ req : defaultReq ,
224232 resps : []string {`{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up"},"value":[1,"1"]}],"stats":{"samples":{"totalQueryableSamples":10,"totalQueryableSamplesPerStep":[[1,10]]}}}}` },
225233 expectedResp : `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up"},"value":[1,"1"]}],"stats":{"samples":{"totalQueryableSamples":10,"totalQueryableSamplesPerStep":[[1,10]]}}}}` ,
226234 },
227235 {
228236 name : "duplicated response" ,
237+ req : defaultReq ,
229238 resps : []string {
230239 `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up"},"value":[1,"1"]}]}}` ,
231240 `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up"},"value":[1,"1"]}]}}` ,
@@ -234,6 +243,7 @@ func TestMergeResponse(t *testing.T) {
234243 },
235244 {
236245 name : "duplicated response with stats" ,
246+ req : defaultReq ,
237247 resps : []string {
238248 `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up"},"value":[1,"1"]}],"stats":{"samples":{"totalQueryableSamples":10,"totalQueryableSamplesPerStep":[[1,10]]}}}}` ,
239249 `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up"},"value":[1,"1"]}],"stats":{"samples":{"totalQueryableSamples":10,"totalQueryableSamplesPerStep":[[1,10]]}}}}` ,
@@ -242,14 +252,34 @@ func TestMergeResponse(t *testing.T) {
242252 },
243253 {
244254 name : "merge two responses" ,
255+ req : defaultReq ,
245256 resps : []string {
246257 `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"foo"},"value":[1,"1"]}]}}` ,
247258 `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"bar"},"value":[2,"2"]}]}}` ,
248259 },
249260 expectedResp : `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"bar"},"value":[2,"2"]},{"metric":{"__name__":"up","job":"foo"},"value":[1,"1"]}]}}` ,
250261 },
262+ {
263+ name : "merge two responses with sort" ,
264+ req : & PrometheusRequest {Query : "sort(up)" },
265+ resps : []string {
266+ `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"foo"},"value":[1,"1"]}]}}` ,
267+ `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"bar"},"value":[1,"2"]}]}}` ,
268+ },
269+ expectedResp : `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"foo"},"value":[1,"1"]},{"metric":{"__name__":"up","job":"bar"},"value":[1,"2"]}]}}` ,
270+ },
271+ {
272+ name : "merge two responses with sort_desc" ,
273+ req : & PrometheusRequest {Query : "sort_desc(up)" },
274+ resps : []string {
275+ `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"foo"},"value":[1,"1"]}]}}` ,
276+ `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"bar"},"value":[1,"2"]}]}}` ,
277+ },
278+ expectedResp : `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"bar"},"value":[1,"2"]},{"metric":{"__name__":"up","job":"foo"},"value":[1,"1"]}]}}` ,
279+ },
251280 {
252281 name : "merge two responses with stats" ,
282+ req : defaultReq ,
253283 resps : []string {
254284 `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"foo"},"value":[1,"1"]}],"stats":{"samples":{"totalQueryableSamples":10,"totalQueryableSamplesPerStep":[[1,10]]}}}}` ,
255285 `{"status":"success","data":{"resultType":"vector","result":[{"metric":{"__name__":"up","job":"bar"},"value":[2,"2"]}],"stats":{"samples":{"totalQueryableSamples":10,"totalQueryableSamplesPerStep":[[1,10]]}}}}` ,
@@ -258,6 +288,7 @@ func TestMergeResponse(t *testing.T) {
258288 },
259289 {
260290 name : "responses don't contain vector, should return an error" ,
291+ req : defaultReq ,
261292 resps : []string {
262293 `{"status":"success","data":{"resultType":"string","result":[1662682521.409,"foo"]}}` ,
263294 `{"status":"success","data":{"resultType":"string","result":[1662682521.409,"foo"]}}` ,
@@ -266,13 +297,15 @@ func TestMergeResponse(t *testing.T) {
266297 },
267298 {
268299 name : "single matrix response" ,
300+ req : defaultReq ,
269301 resps : []string {
270302 `{"status":"success","data":{"resultType":"matrix","result":[{"metric":{"__name__":"up"},"values":[[1,"1"],[2,"2"]]}]}}` ,
271303 },
272304 expectedResp : `{"status":"success","data":{"resultType":"matrix","result":[{"metric":{"__name__":"up"},"values":[[1,"1"],[2,"2"]]}]}}` ,
273305 },
274306 {
275307 name : "multiple matrix responses without duplicated series" ,
308+ req : defaultReq ,
276309 resps : []string {
277310 `{"status":"success","data":{"resultType":"matrix","result":[{"metric":{"__name__":"bar"},"values":[[1,"1"],[2,"2"]]}]}}` ,
278311 `{"status":"success","data":{"resultType":"matrix","result":[{"metric":{"__name__":"foo"},"values":[[3,"3"],[4,"4"]]}]}}` ,
@@ -281,6 +314,7 @@ func TestMergeResponse(t *testing.T) {
281314 },
282315 {
283316 name : "multiple matrix responses with duplicated series, but not same samples" ,
317+ req : defaultReq ,
284318 resps : []string {
285319 `{"status":"success","data":{"resultType":"matrix","result":[{"metric":{"__name__":"bar"},"values":[[1,"1"],[2,"2"]]}]}}` ,
286320 `{"status":"success","data":{"resultType":"matrix","result":[{"metric":{"__name__":"bar"},"values":[[3,"3"]]}]}}` ,
@@ -289,6 +323,7 @@ func TestMergeResponse(t *testing.T) {
289323 },
290324 {
291325 name : "multiple matrix responses with duplicated series and same samples" ,
326+ req : defaultReq ,
292327 resps : []string {
293328 `{"status":"success","data":{"resultType":"matrix","result":[{"metric":{"__name__":"bar"},"values":[[1,"1"],[2,"2"]]}]}}` ,
294329 `{"status":"success","data":{"resultType":"matrix","result":[{"metric":{"__name__":"bar"},"values":[[1,"1"],[2,"2"],[3,"3"]]}]}}` ,
@@ -308,7 +343,7 @@ func TestMergeResponse(t *testing.T) {
308343 require .NoError (t , err )
309344 resps = append (resps , dr )
310345 }
311- resp , err := InstantQueryCodec .MergeResponse (context .Background (), resps ... )
346+ resp , err := InstantQueryCodec .MergeResponse (context .Background (), tc . req , resps ... )
312347 assert .Equal (t , err , tc .expectedErr )
313348 if err != nil {
314349 return
0 commit comments