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  }