github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/tools/blocksconvert/builder/builder_test.go (about)

     1  package builder
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/prometheus/prometheus/pkg/labels"
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  func TestNormalizeLabels(t *testing.T) {
    11  	for name, tc := range map[string]struct {
    12  		input labels.Labels
    13  
    14  		expectedOutput labels.Labels
    15  		expectedError  error
    16  	}{
    17  		"good labels": {
    18  			input:          fromStrings("__name__", "hello", "label1", "world"),
    19  			expectedOutput: fromStrings("__name__", "hello", "label1", "world"),
    20  			expectedError:  nil,
    21  		},
    22  		"not sorted": {
    23  			input:          fromStrings("label1", "world", "__name__", "hello"),
    24  			expectedOutput: fromStrings("__name__", "hello", "label1", "world"),
    25  			expectedError:  nil,
    26  		},
    27  		"duplicate with same value": {
    28  			input:          fromStrings("__name__", "hello", "label1", "world", "label1", "world"),
    29  			expectedOutput: fromStrings("__name__", "hello", "label1", "world"),
    30  			expectedError:  nil,
    31  		},
    32  		"not sorted, duplicate with same value": {
    33  			input:          fromStrings("label1", "world", "__name__", "hello", "label1", "world"),
    34  			expectedOutput: fromStrings("__name__", "hello", "label1", "world"),
    35  			expectedError:  nil,
    36  		},
    37  		"duplicate with different value": {
    38  			input:          fromStrings("label1", "world1", "__name__", "hello", "label1", "world2"),
    39  			expectedOutput: fromStrings("__name__", "hello", "label1", "world1", "label1", "world2"), // sorted
    40  			expectedError:  errDuplicateLabelsDifferentValue,
    41  		},
    42  	} {
    43  		t.Run(name, func(t *testing.T) {
    44  			out, err := normalizeLabels(tc.input)
    45  
    46  			assert.Equal(t, tc.expectedOutput, out)
    47  			assert.Equal(t, tc.expectedError, err)
    48  		})
    49  	}
    50  }
    51  
    52  // Similar to labels.FromStrings, but doesn't do sorting.
    53  func fromStrings(ss ...string) labels.Labels {
    54  	if len(ss)%2 != 0 {
    55  		panic("invalid number of strings")
    56  	}
    57  	var res labels.Labels
    58  	for i := 0; i < len(ss); i += 2 {
    59  		res = append(res, labels.Label{Name: ss[i], Value: ss[i+1]})
    60  	}
    61  	return res
    62  }