@@ -265,3 +265,91 @@ func TestHistogramValidate(t *testing.T) {
265
265
}
266
266
}
267
267
}
268
+
269
+ func TestLabelsMatch (t * testing.T ) {
270
+ cases := []struct {
271
+ name string
272
+ metric * dto.Metric
273
+ labelFilter map [string ]string
274
+ expectedMatch bool
275
+ }{
276
+ {name : "metric labels and labelFilter have the same labels and values" , metric : & dto.Metric {
277
+ Label : []* dto.LabelPair {
278
+ {Name : pointer .StringPtr ("a" ), Value : pointer .StringPtr ("1" )},
279
+ {Name : pointer .StringPtr ("b" ), Value : pointer .StringPtr ("2" )},
280
+ {Name : pointer .StringPtr ("c" ), Value : pointer .StringPtr ("3" )},
281
+ }}, labelFilter : map [string ]string {
282
+ "a" : "1" ,
283
+ "b" : "2" ,
284
+ "c" : "3" ,
285
+ }, expectedMatch : true },
286
+ {name : "metric labels contain all labelFilter labels, and labelFilter is a subset of metric labels" , metric : & dto.Metric {
287
+ Label : []* dto.LabelPair {
288
+ {Name : pointer .StringPtr ("a" ), Value : pointer .StringPtr ("1" )},
289
+ {Name : pointer .StringPtr ("b" ), Value : pointer .StringPtr ("2" )},
290
+ {Name : pointer .StringPtr ("c" ), Value : pointer .StringPtr ("3" )},
291
+ }}, labelFilter : map [string ]string {
292
+ "a" : "1" ,
293
+ "b" : "2" ,
294
+ }, expectedMatch : true },
295
+ {name : "metric labels don't have all labelFilter labels and value" , metric : & dto.Metric {
296
+ Label : []* dto.LabelPair {
297
+ {Name : pointer .StringPtr ("a" ), Value : pointer .StringPtr ("1" )},
298
+ {Name : pointer .StringPtr ("b" ), Value : pointer .StringPtr ("2" )},
299
+ }}, labelFilter : map [string ]string {
300
+ "a" : "1" ,
301
+ "b" : "2" ,
302
+ "c" : "3" ,
303
+ }, expectedMatch : false },
304
+ {name : "The intersection of metric labels and labelFilter labels is empty" , metric : & dto.Metric {
305
+ Label : []* dto.LabelPair {
306
+ {Name : pointer .StringPtr ("aa" ), Value : pointer .StringPtr ("11" )},
307
+ {Name : pointer .StringPtr ("bb" ), Value : pointer .StringPtr ("22" )},
308
+ {Name : pointer .StringPtr ("cc" ), Value : pointer .StringPtr ("33" )},
309
+ }}, labelFilter : map [string ]string {
310
+ "a" : "1" ,
311
+ "b" : "2" ,
312
+ "c" : "3" ,
313
+ }, expectedMatch : false },
314
+ {name : "metric labels have the same labels names but different values with labelFilter labels and value" , metric : & dto.Metric {
315
+ Label : []* dto.LabelPair {
316
+ {Name : pointer .StringPtr ("a" ), Value : pointer .StringPtr ("1" )},
317
+ {Name : pointer .StringPtr ("b" ), Value : pointer .StringPtr ("2" )},
318
+ {Name : pointer .StringPtr ("c" ), Value : pointer .StringPtr ("3" )},
319
+ }}, labelFilter : map [string ]string {
320
+ "a" : "11" ,
321
+ "b" : "2" ,
322
+ "c" : "3" ,
323
+ }, expectedMatch : false },
324
+ {name : "metric labels contain label name but different values with labelFilter labels and value" , metric : & dto.Metric {
325
+ Label : []* dto.LabelPair {
326
+ {Name : pointer .StringPtr ("a" ), Value : pointer .StringPtr ("1" )},
327
+ {Name : pointer .StringPtr ("b" ), Value : pointer .StringPtr ("2" )},
328
+ {Name : pointer .StringPtr ("c" ), Value : pointer .StringPtr ("33" )},
329
+ {Name : pointer .StringPtr ("d" ), Value : pointer .StringPtr ("4" )},
330
+ }}, labelFilter : map [string ]string {
331
+ "a" : "1" ,
332
+ "b" : "2" ,
333
+ "c" : "3" ,
334
+ }, expectedMatch : false },
335
+ {name : "metric labels is empty and labelFilter is not empty" , metric : & dto.Metric {
336
+ Label : []* dto.LabelPair {}}, labelFilter : map [string ]string {
337
+ "a" : "1" ,
338
+ "b" : "2" ,
339
+ "c" : "3" ,
340
+ }, expectedMatch : false },
341
+ {name : "metric labels is not empty and labelFilter is empty" , metric : & dto.Metric {
342
+ Label : []* dto.LabelPair {
343
+ {Name : pointer .StringPtr ("a" ), Value : pointer .StringPtr ("1" )},
344
+ {Name : pointer .StringPtr ("b" ), Value : pointer .StringPtr ("2" )},
345
+ }}, labelFilter : map [string ]string {}, expectedMatch : true },
346
+ }
347
+ for _ , tt := range cases {
348
+ t .Run (tt .name , func (t * testing.T ) {
349
+ got := LabelsMatch (tt .metric , tt .labelFilter )
350
+ if got != tt .expectedMatch {
351
+ t .Errorf ("Expected %v, got %v instead" , tt .expectedMatch , got )
352
+ }
353
+ })
354
+ }
355
+ }
0 commit comments