github.com/cilium/cilium@v1.16.2/operator/pkg/model/translation/helper_test.go (about)

     1  // SPDX-License-Identifier: Apache-2.0
     2  // Copyright Authors of Cilium
     3  
     4  package translation
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  
    11  	slim_metav1 "github.com/cilium/cilium/pkg/k8s/slim/k8s/apis/meta/v1"
    12  )
    13  
    14  func TestParseNodeLabelSelector(t *testing.T) {
    15  	testCases := []struct {
    16  		desc                  string
    17  		input                 string
    18  		expectedLabelSelector *slim_metav1.LabelSelector
    19  	}{
    20  		{
    21  			desc:                  "Empty",
    22  			input:                 "",
    23  			expectedLabelSelector: nil,
    24  		},
    25  		{
    26  			desc:  "Single label value",
    27  			input: "a=b",
    28  			expectedLabelSelector: &slim_metav1.LabelSelector{MatchLabels: map[string]slim_metav1.MatchLabelsValue{
    29  				"a": "b",
    30  			}},
    31  		},
    32  		{
    33  			desc:  "Multiple label values",
    34  			input: "a=b,c=d,e=f",
    35  			expectedLabelSelector: &slim_metav1.LabelSelector{MatchLabels: map[string]slim_metav1.MatchLabelsValue{
    36  				"a": "b",
    37  				"c": "d",
    38  				"e": "f",
    39  			}},
    40  		},
    41  		{
    42  			desc:  "Empty key is not allowed",
    43  			input: "a=b,c=d,=f",
    44  			expectedLabelSelector: &slim_metav1.LabelSelector{MatchLabels: map[string]slim_metav1.MatchLabelsValue{
    45  				"a": "b",
    46  				"c": "d",
    47  			}},
    48  		},
    49  		{
    50  			desc:  "Empty value",
    51  			input: "a=b,c=d,e=",
    52  			expectedLabelSelector: &slim_metav1.LabelSelector{MatchLabels: map[string]slim_metav1.MatchLabelsValue{
    53  				"a": "b",
    54  				"c": "d",
    55  				"e": "",
    56  			}},
    57  		},
    58  		{
    59  			desc:  "No value",
    60  			input: "a=b,c=d,e",
    61  			expectedLabelSelector: &slim_metav1.LabelSelector{MatchLabels: map[string]slim_metav1.MatchLabelsValue{
    62  				"a": "b",
    63  				"c": "d",
    64  			}},
    65  		},
    66  		{
    67  			desc:  "Space before value",
    68  			input: "a=b,c=d,e= f",
    69  			expectedLabelSelector: &slim_metav1.LabelSelector{MatchLabels: map[string]slim_metav1.MatchLabelsValue{
    70  				"a": "b",
    71  				"c": "d",
    72  				"e": " f",
    73  			}},
    74  		},
    75  		{
    76  			desc:  "Space after value",
    77  			input: "a=b,c=d,e=f ",
    78  			expectedLabelSelector: &slim_metav1.LabelSelector{MatchLabels: map[string]slim_metav1.MatchLabelsValue{
    79  				"a": "b",
    80  				"c": "d",
    81  				"e": "f ",
    82  			}},
    83  		},
    84  		{
    85  			desc:  "Space before key",
    86  			input: "a=b,c=d, e=f",
    87  			expectedLabelSelector: &slim_metav1.LabelSelector{MatchLabels: map[string]slim_metav1.MatchLabelsValue{
    88  				"a":  "b",
    89  				"c":  "d",
    90  				" e": "f",
    91  			}},
    92  		},
    93  		{
    94  			desc:  "Space after key",
    95  			input: "a=b,c=d,e =f",
    96  			expectedLabelSelector: &slim_metav1.LabelSelector{MatchLabels: map[string]slim_metav1.MatchLabelsValue{
    97  				"a":  "b",
    98  				"c":  "d",
    99  				"e ": "f",
   100  			}},
   101  		},
   102  	}
   103  	for _, tC := range testCases {
   104  		t.Run(tC.desc, func(t *testing.T) {
   105  			ls := ParseNodeLabelSelector(tC.input)
   106  
   107  			assert.Equal(t, tC.expectedLabelSelector, ls)
   108  		})
   109  	}
   110  }