1
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