...
1
2
3
4 package krusty_test
5
6 import (
7 "testing"
8
9 "github.com/stretchr/testify/require"
10 "sigs.k8s.io/kustomize/api/krusty"
11 kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
12 )
13
14
15 var sortOrderResources = `
16 apiVersion: v1
17 kind: Service
18 metadata:
19 name: papaya
20 ---
21 apiVersion: v1
22 kind: Role
23 metadata:
24 name: banana
25 ---
26 apiVersion: v1
27 kind: ValidatingWebhookConfiguration
28 metadata:
29 name: pomegranate
30 ---
31 apiVersion: v1
32 kind: LimitRange
33 metadata:
34 name: peach
35 ---
36 apiVersion: v1
37 kind: Deployment
38 metadata:
39 name: pear
40 ---
41 apiVersion: v1
42 kind: Namespace
43 metadata:
44 name: apple
45 ---
46 apiVersion: v1
47 kind: Secret
48 metadata:
49 name: quince
50 ---
51 apiVersion: v1
52 kind: Ingress
53 metadata:
54 name: durian
55 ---
56 apiVersion: v1
57 kind: ConfigMap
58 metadata:
59 name: apricot
60 `
61
62
63 var legacyOrderResources = `
64 apiVersion: v1
65 kind: Namespace
66 metadata:
67 name: apple
68 ---
69 apiVersion: v1
70 kind: Role
71 metadata:
72 name: banana
73 ---
74 apiVersion: v1
75 kind: ConfigMap
76 metadata:
77 name: apricot
78 ---
79 apiVersion: v1
80 kind: Secret
81 metadata:
82 name: quince
83 ---
84 apiVersion: v1
85 kind: Service
86 metadata:
87 name: papaya
88 ---
89 apiVersion: v1
90 kind: LimitRange
91 metadata:
92 name: peach
93 ---
94 apiVersion: v1
95 kind: Deployment
96 metadata:
97 name: pear
98 ---
99 apiVersion: v1
100 kind: Ingress
101 metadata:
102 name: durian
103 ---
104 apiVersion: v1
105 kind: ValidatingWebhookConfiguration
106 metadata:
107 name: pomegranate
108 `
109
110 func TestCustomOrdering(t *testing.T) {
111 th := kusttest_test.MakeHarness(t)
112 th.WriteK("base", `
113 resources:
114 - resources.yaml
115
116 sortOptions:
117 order: legacy
118 legacySortOptions:
119 orderFirst:
120 - MutatingWebhookConfiguration
121 - ValidatingWebhookConfiguration
122 - ResourceQuota
123 - StorageClass
124 - CustomResourceDefinition
125 - ServiceAccount
126 - PodSecurityPolicy
127 - Role
128 - ClusterRole
129 - RoleBinding
130 - ClusterRoleBinding
131 - ConfigMap
132 - Secret
133 - Endpoints
134 - Service
135 - LimitRange
136 - PriorityClass
137 - PersistentVolume
138 - PersistentVolumeClaim
139 - StatefulSet
140 - CronJob
141 - PodDisruptionBudget
142 orderLast:
143 - Namespace
144 - Deployment
145 `)
146 th.WriteF("base/resources.yaml", sortOrderResources)
147
148 th.AssertActualEqualsExpected(
149 th.Run("base", th.MakeDefaultOptions()),
150 `
151 apiVersion: v1
152 kind: ValidatingWebhookConfiguration
153 metadata:
154 name: pomegranate
155 ---
156 apiVersion: v1
157 kind: Role
158 metadata:
159 name: banana
160 ---
161 apiVersion: v1
162 kind: ConfigMap
163 metadata:
164 name: apricot
165 ---
166 apiVersion: v1
167 kind: Secret
168 metadata:
169 name: quince
170 ---
171 apiVersion: v1
172 kind: Service
173 metadata:
174 name: papaya
175 ---
176 apiVersion: v1
177 kind: LimitRange
178 metadata:
179 name: peach
180 ---
181 apiVersion: v1
182 kind: Ingress
183 metadata:
184 name: durian
185 ---
186 apiVersion: v1
187 kind: Namespace
188 metadata:
189 name: apple
190 ---
191 apiVersion: v1
192 kind: Deployment
193 metadata:
194 name: pear
195 `)
196 }
197
198 func TestDefaultLegacyOrdering(t *testing.T) {
199 th := kusttest_test.MakeHarness(t)
200 th.WriteK("base", `
201 resources:
202 - resources.yaml
203
204 sortOptions:
205 order: legacy
206 `)
207 th.WriteF("base/resources.yaml", sortOrderResources)
208 th.AssertActualEqualsExpected(
209 th.Run("base", th.MakeDefaultOptions()), legacyOrderResources)
210 }
211
212 func TestFIFOOrdering(t *testing.T) {
213 th := kusttest_test.MakeHarness(t)
214 th.WriteK("base", `
215 resources:
216 - resources.yaml
217
218 sortOptions:
219 order: fifo
220 `)
221 th.WriteF("base/resources.yaml", sortOrderResources)
222 th.AssertActualEqualsExpected(
223 th.Run("base", th.MakeDefaultOptions()), sortOrderResources)
224 }
225
226 func TestInvalidLegacySortOptionsWithoutOrderKey(t *testing.T) {
227 th := kusttest_test.MakeHarness(t)
228 th.WriteK("base", `
229 resources:
230 - resources.yaml
231
232 sortOptions:
233 legacySortOptions: {}
234 `)
235 th.WriteF("base/resources.yaml", sortOrderResources)
236 err := th.RunWithErr("base", th.MakeDefaultOptions())
237 require.ErrorContains(t, err, "the field 'sortOptions.order' must be one of [fifo, legacy]")
238 }
239
240 func TestInvalidLegacySortOptionsWithFIFOOrder(t *testing.T) {
241 th := kusttest_test.MakeHarness(t)
242 th.WriteK("base", `
243 resources:
244 - resources.yaml
245
246 sortOptions:
247 order: fifo
248 legacySortOptions: {}
249 `)
250 th.WriteF("base/resources.yaml", sortOrderResources)
251 err := th.RunWithErr("base", th.MakeDefaultOptions())
252 require.ErrorContains(t, err, "the field 'sortOptions.legacySortOptions' is set but the selected sort order is 'fifo', not 'legacy'")
253 }
254
255
256
257 func TestCLIAndKustomizationSet(t *testing.T) {
258 th := kusttest_test.MakeHarness(t)
259 th.WriteK("base", `
260 resources:
261 - resources.yaml
262
263 sortOptions:
264 order: fifo
265 `)
266 th.WriteF("base/resources.yaml", sortOrderResources)
267 kustOptions := th.MakeDefaultOptions()
268 kustOptions.Reorder = krusty.ReorderOptionLegacy
269 th.AssertActualEqualsExpected(th.Run("base", kustOptions), sortOrderResources)
270 }
271
272
273
274 func TestKustomizationSortOrderNotSet(t *testing.T) {
275 th := kusttest_test.MakeHarness(t)
276 th.WriteK("base", `
277 resources:
278 - resources.yaml
279 `)
280 th.WriteF("base/resources.yaml", sortOrderResources)
281 kustOptions := th.MakeDefaultOptions()
282 kustOptions.Reorder = krusty.ReorderOptionUnspecified
283 th.AssertActualEqualsExpected(th.Run("base", kustOptions), legacyOrderResources)
284 }
285
286 func TestChildKustomizationSortOrder(t *testing.T) {
287 th := kusttest_test.MakeHarness(t)
288 th.WriteK("base", `
289 resources:
290 - resources.yaml
291
292 sortOptions:
293 order: legacy
294 `)
295 th.WriteF("base/resources.yaml", sortOrderResources)
296 th.WriteK("overlay", `
297 resources:
298 - ../base
299
300 sortOptions:
301 order: fifo
302 `)
303
304 kustOptions := th.MakeDefaultOptions()
305
306
307 th.AssertActualEqualsExpected(th.Run("overlay", kustOptions), sortOrderResources)
308 }
309
310 func TestSortOrderGivenAsTransformer(t *testing.T) {
311 th := kusttest_test.MakeHarness(t)
312 th.WriteK("base", `
313 resources:
314 - resources.yaml
315
316 transformers:
317 - sort_order.yaml
318 `)
319 th.WriteF("base/resources.yaml", sortOrderResources)
320 th.WriteF("base/sort_order.yaml", `
321 apiVersion: builtin
322 kind: SortOrderTransformer
323 metadata:
324 name: notImportantHere
325 sortOptions:
326 order: fifo`)
327
328 kustOptions := th.MakeDefaultOptions()
329 err := th.RunWithErr("base", kustOptions)
330 require.ErrorContains(t, err, "unable to load builtin SortOrderTransformer.builtin.[noGrp]")
331 }
332
View as plain text