...

Source file src/sigs.k8s.io/kustomize/api/resmap/selector_test.go

Documentation: sigs.k8s.io/kustomize/api/resmap

     1  // Copyright 2019 The Kubernetes Authors.
     2  // SPDX-License-Identifier: Apache-2.
     3  
     4  package resmap_test
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/assert"
    10  	"github.com/stretchr/testify/require"
    11  	. "sigs.k8s.io/kustomize/api/resmap"
    12  	"sigs.k8s.io/kustomize/api/types"
    13  	"sigs.k8s.io/kustomize/kyaml/resid"
    14  )
    15  
    16  func setupRMForPatchTargets(t *testing.T) ResMap {
    17  	t.Helper()
    18  	result, err := rmF.NewResMapFromBytes([]byte(`
    19  apiVersion: group1/v1
    20  kind: Kind1
    21  metadata:
    22    name: name1
    23    namespace: ns1
    24    labels:
    25      app: name1
    26    annotations:
    27      foo: bar
    28  ---
    29  apiVersion: group1/v1
    30  kind: Kind1
    31  metadata:
    32    name: name2
    33    namespace: default
    34    labels:
    35      app: name2
    36    annotations:
    37      foo: bar
    38  ---
    39  apiVersion: group1/v1
    40  kind: Kind2
    41  metadata:
    42    name: name3
    43    labels:
    44      app: name3
    45    annotations:
    46      bar: baz
    47  ---
    48  apiVersion: group1/v1
    49  kind: Kind2
    50  metadata:
    51    name: x-name1
    52    namespace: x-default
    53  `))
    54  	require.NoError(t, err)
    55  	return result
    56  }
    57  
    58  func TestFindPatchTargets(t *testing.T) {
    59  	rm := setupRMForPatchTargets(t)
    60  	testcases := map[string]struct {
    61  		target types.Selector
    62  		count  int
    63  	}{
    64  		"select_01": {
    65  			target: types.Selector{
    66  				ResId: resid.ResId{Name: "name.*"},
    67  			},
    68  			count: 3,
    69  		},
    70  		"select_02": {
    71  			target: types.Selector{
    72  				ResId:              resid.ResId{Name: "name.*"},
    73  				AnnotationSelector: "foo=bar",
    74  			},
    75  			count: 2,
    76  		},
    77  		"select_03": {
    78  			target: types.Selector{
    79  				LabelSelector: "app=name1",
    80  			},
    81  			count: 1,
    82  		},
    83  		"select_04": {
    84  			target: types.Selector{
    85  				ResId: resid.ResId{
    86  					Gvk: resid.Gvk{
    87  						Kind: "Kind1",
    88  					},
    89  					Name: "name.*",
    90  				},
    91  			},
    92  			count: 2,
    93  		},
    94  		"select_05": {
    95  			target: types.Selector{
    96  				ResId: resid.ResId{Name: "NotMatched"},
    97  			},
    98  			count: 0,
    99  		},
   100  		"select_06": {
   101  			target: types.Selector{
   102  				ResId: resid.ResId{Name: ""},
   103  			},
   104  			count: 4,
   105  		},
   106  		"select_07": {
   107  			target: types.Selector{
   108  				ResId: resid.ResId{Namespace: "default"},
   109  			},
   110  			count: 2,
   111  		},
   112  		"select_08": {
   113  			target: types.Selector{
   114  				ResId: resid.ResId{Namespace: ""},
   115  			},
   116  			count: 4,
   117  		},
   118  		"select_09": {
   119  			target: types.Selector{
   120  				ResId: resid.ResId{
   121  					Namespace: "default",
   122  					Name:      "name.*",
   123  					Gvk: resid.Gvk{
   124  						Kind: "Kind1",
   125  					},
   126  				},
   127  			},
   128  			count: 1,
   129  		},
   130  		"select_10": {
   131  			target: types.Selector{
   132  				ResId: resid.ResId{Name: "^name.*"},
   133  			},
   134  			count: 3,
   135  		},
   136  		"select_11": {
   137  			target: types.Selector{
   138  				ResId: resid.ResId{Name: "name.*$"},
   139  			},
   140  			count: 3,
   141  		},
   142  		"select_12": {
   143  			target: types.Selector{
   144  				ResId: resid.ResId{Name: "^name.*$"},
   145  			},
   146  			count: 3,
   147  		},
   148  		"select_13": {
   149  			target: types.Selector{
   150  				ResId: resid.ResId{Namespace: "^def.*"},
   151  			},
   152  			count: 2,
   153  		},
   154  		"select_14": {
   155  			target: types.Selector{
   156  				ResId: resid.ResId{Namespace: "def.*$"},
   157  			},
   158  			count: 2,
   159  		},
   160  		"select_15": {
   161  			target: types.Selector{
   162  				ResId: resid.ResId{Namespace: "^def.*$"},
   163  			},
   164  			count: 2,
   165  		},
   166  		"select_16": {
   167  			target: types.Selector{
   168  				ResId: resid.ResId{Namespace: "default"},
   169  			},
   170  			count: 2,
   171  		},
   172  		"select_17": {
   173  			target: types.Selector{
   174  				ResId: resid.ResId{Namespace: "NotMatched"},
   175  			},
   176  			count: 0,
   177  		},
   178  		"select_18": {
   179  			target: types.Selector{
   180  				ResId: resid.ResId{Namespace: "ns1"},
   181  			},
   182  			count: 1,
   183  		},
   184  	}
   185  	for n, testcase := range testcases {
   186  		actual, err := rm.Select(testcase.target)
   187  		require.NoError(t, err)
   188  		assert.Equalf(
   189  			t, testcase.count, len(actual), "test=%s target=%v", n, testcase.target)
   190  	}
   191  }
   192  

View as plain text