github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/pkg/util/extract/extract_test.go (about) 1 package extract 2 3 import ( 4 "reflect" 5 "testing" 6 7 "github.com/prometheus/common/model" 8 "github.com/prometheus/prometheus/pkg/labels" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestExtractMetricNameMatcherFromMatchers(t *testing.T) { 13 metricMatcher, err := labels.NewMatcher(labels.MatchEqual, model.MetricNameLabel, "testmetric") 14 if err != nil { 15 t.Fatal(err) 16 } 17 labelMatcher1, err := labels.NewMatcher(labels.MatchEqual, "label", "value1") 18 if err != nil { 19 t.Fatal(err) 20 } 21 labelMatcher2, err := labels.NewMatcher(labels.MatchEqual, "label", "value2") 22 if err != nil { 23 t.Fatal(err) 24 } 25 nonEqualityMetricMatcher, err := labels.NewMatcher(labels.MatchNotEqual, model.MetricNameLabel, "testmetric") 26 if err != nil { 27 t.Fatal(err) 28 } 29 jobMatcher, err := labels.NewMatcher(labels.MatchEqual, model.JobLabel, "testjob") 30 if err != nil { 31 t.Fatal(err) 32 } 33 34 for i, tc := range []struct { 35 matchers []*labels.Matcher 36 expMetricMatcher *labels.Matcher 37 expOutMatchers []*labels.Matcher 38 expOk bool 39 }{ 40 { 41 matchers: []*labels.Matcher{metricMatcher}, 42 expMetricMatcher: metricMatcher, 43 expOutMatchers: []*labels.Matcher{}, 44 expOk: true, 45 }, { 46 matchers: []*labels.Matcher{metricMatcher, labelMatcher1, labelMatcher2}, 47 expMetricMatcher: metricMatcher, 48 expOutMatchers: []*labels.Matcher{labelMatcher1, labelMatcher2}, 49 expOk: true, 50 }, { 51 matchers: []*labels.Matcher{labelMatcher1, metricMatcher, labelMatcher2}, 52 expMetricMatcher: metricMatcher, 53 expOutMatchers: []*labels.Matcher{labelMatcher1, labelMatcher2}, 54 expOk: true, 55 }, { 56 matchers: []*labels.Matcher{labelMatcher1, labelMatcher2, metricMatcher}, 57 expMetricMatcher: metricMatcher, 58 expOutMatchers: []*labels.Matcher{labelMatcher1, labelMatcher2}, 59 expOk: true, 60 }, { 61 matchers: []*labels.Matcher{nonEqualityMetricMatcher}, 62 expMetricMatcher: nonEqualityMetricMatcher, 63 expOutMatchers: []*labels.Matcher{}, 64 expOk: true, 65 }, { 66 matchers: []*labels.Matcher{jobMatcher}, 67 expMetricMatcher: nil, 68 expOutMatchers: []*labels.Matcher{jobMatcher}, 69 expOk: false, 70 }, { 71 matchers: []*labels.Matcher{}, 72 expMetricMatcher: nil, 73 expOutMatchers: []*labels.Matcher{}, 74 expOk: false, 75 }, 76 } { 77 matchersCopy := make([]*labels.Matcher, len(tc.matchers)) 78 copy(matchersCopy, tc.matchers) 79 80 nameMatcher, outMatchers, ok := MetricNameMatcherFromMatchers(tc.matchers) 81 82 if !reflect.DeepEqual(tc.matchers, matchersCopy) { 83 t.Fatalf("%d. Matchers got mutated; want %v, got %v", i, matchersCopy, tc.matchers) 84 } 85 86 if !reflect.DeepEqual(tc.expMetricMatcher, nameMatcher) { 87 t.Fatalf("%d. Wrong metric matcher; want '%v', got %v", i, tc.expMetricMatcher, nameMatcher) 88 } 89 90 assert.Equal(t, tc.expOutMatchers, outMatchers, "unexpected outMatchers for test case %d", i) 91 92 assert.Equal(t, tc.expOk, ok, "unexpected ok for test case %d", i) 93 } 94 }