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 }