1
2
3
4 package merge2_test
5
6 import (
7 "bytes"
8 "testing"
9
10 "github.com/stretchr/testify/assert"
11 "sigs.k8s.io/kustomize/kyaml/kio/filters"
12 "sigs.k8s.io/kustomize/kyaml/yaml"
13 . "sigs.k8s.io/kustomize/kyaml/yaml/merge2"
14 )
15
16 const dest = `
17 apiVersion: apps/v1
18 kind: Deployment
19 metadata:
20 name: app
21 labels:
22 app: java
23 annotations:
24 a.b.c: d.e.f
25 g: h1
26 i: j
27 m: n2
28 spec:
29 template:
30 spec:
31 containers:
32 - name: nginx
33 image: nginx:1.7.9
34 args: ['c', 'a', 'b']
35 env:
36 - name: DEMO_GREETING
37 value: "Hello from the environment"
38 - name: DEMO_FAREWELL
39 value: "Such a sweet sorrow"
40 `
41
42 func TestMerge_map(t *testing.T) {
43 dest := yaml.MustParse(dest)
44 src := yaml.MustParse(`
45 apiVersion: apps/v1
46 kind: Deployment
47 metadata:
48 name: app
49 labels:
50 app: java
51 annotations:
52 a.b.c: d.e.f
53 g: h2
54 k: l
55 m: n1
56 `)
57
58 result, err := Merge(src, dest, yaml.MergeOptions{
59 ListIncreaseDirection: yaml.MergeOptionsListAppend,
60 })
61 if !assert.NoError(t, err) {
62 return
63 }
64 actual, err := result.String()
65 if !assert.NoError(t, err) {
66 return
67 }
68
69 expected := `
70 apiVersion: apps/v1
71 kind: Deployment
72 metadata:
73 name: app
74 labels:
75 app: java
76 annotations:
77 a.b.c: d.e.f
78 g: h2
79 i: j
80 k: l
81 m: n1
82 spec:
83 template:
84 spec:
85 containers:
86 - name: nginx
87 image: nginx:1.7.9
88 args: ['c', 'a', 'b']
89 env:
90 - name: DEMO_GREETING
91 value: "Hello from the environment"
92 - name: DEMO_FAREWELL
93 value: "Such a sweet sorrow"
94 `
95 b, err := filters.FormatInput(bytes.NewBufferString(expected))
96 if !assert.NoError(t, err) {
97 return
98 }
99 expected = b.String()
100
101 b, err = filters.FormatInput(bytes.NewBufferString(actual))
102 if !assert.NoError(t, err) {
103 return
104 }
105 actual = b.String()
106
107 assert.Equal(t, expected, actual)
108 }
109
110 func TestMerge_clear(t *testing.T) {
111 dest := yaml.MustParse(dest)
112 src := yaml.MustParse(`
113 apiVersion: apps/v1
114 kind: Deployment
115 metadata:
116 annotations: null
117 `)
118
119 result, err := Merge(src, dest, yaml.MergeOptions{
120 ListIncreaseDirection: yaml.MergeOptionsListAppend,
121 })
122 if !assert.NoError(t, err) {
123 return
124 }
125 actual, err := result.String()
126 if !assert.NoError(t, err) {
127 return
128 }
129
130 expected := `
131 apiVersion: apps/v1
132 kind: Deployment
133 metadata:
134 name: app
135 labels:
136 app: java
137 spec:
138 template:
139 spec:
140 containers:
141 - name: nginx
142 image: nginx:1.7.9
143 args: ['c', 'a', 'b']
144 env:
145 - name: DEMO_GREETING
146 value: "Hello from the environment"
147 - name: DEMO_FAREWELL
148 value: "Such a sweet sorrow"
149 `
150 b, err := filters.FormatInput(bytes.NewBufferString(expected))
151 if !assert.NoError(t, err) {
152 return
153 }
154 expected = b.String()
155
156 b, err = filters.FormatInput(bytes.NewBufferString(actual))
157 if !assert.NoError(t, err) {
158 return
159 }
160 actual = b.String()
161
162 assert.Equal(t, expected, actual)
163 }
164
165 func TestMerge_mapInverse(t *testing.T) {
166 dest := yaml.MustParse(dest)
167 src := yaml.MustParse(`
168 apiVersion: apps/v1
169 kind: Deployment
170 metadata:
171 name: app
172 labels:
173 app: java
174 annotations:
175 a.b.c: d.e.f
176 g: h2
177 k: l
178 m: n1
179 `)
180
181 result, err := Merge(dest, src, yaml.MergeOptions{
182 ListIncreaseDirection: yaml.MergeOptionsListAppend,
183 })
184 if !assert.NoError(t, err) {
185 return
186 }
187 actual, err := result.String()
188 if !assert.NoError(t, err) {
189 return
190 }
191
192 expected := `
193 apiVersion: apps/v1
194 kind: Deployment
195 metadata:
196 name: app
197 labels:
198 app: java
199 annotations:
200 a.b.c: d.e.f
201 g: h1
202 i: j
203 k: l
204 m: n2
205 spec:
206 template:
207 spec:
208 containers:
209 - name: nginx
210 image: nginx:1.7.9
211 args: ['c', 'a', 'b']
212 env:
213 - name: DEMO_GREETING
214 value: "Hello from the environment"
215 - name: DEMO_FAREWELL
216 value: "Such a sweet sorrow"
217 `
218 b, err := filters.FormatInput(bytes.NewBufferString(expected))
219 if !assert.NoError(t, err) {
220 return
221 }
222 expected = b.String()
223
224 b, err = filters.FormatInput(bytes.NewBufferString(actual))
225 if !assert.NoError(t, err) {
226 return
227 }
228 actual = b.String()
229
230 assert.Equal(t, expected, actual)
231 }
232
233 func TestMerge_listElem(t *testing.T) {
234 dest := yaml.MustParse(dest)
235 src := yaml.MustParse(`
236 apiVersion: apps/v1
237 kind: Deployment
238 spec:
239 template:
240 spec:
241 containers:
242 - name: nginx
243 env:
244 - name: DEMO_GREETING
245 value: "New Demo Greeting"
246 - name: NEW_DEMO_VALUE
247 value: "Another Env Not In The Dest"
248 `)
249
250 result, err := Merge(src, dest, yaml.MergeOptions{
251 ListIncreaseDirection: yaml.MergeOptionsListAppend,
252 })
253 if !assert.NoError(t, err) {
254 return
255 }
256 actual, err := result.String()
257 if !assert.NoError(t, err) {
258 return
259 }
260
261 expected := `apiVersion: apps/v1
262 kind: Deployment
263 metadata:
264 name: app
265 labels:
266 app: java
267 annotations:
268 a.b.c: d.e.f
269 g: h1
270 i: j
271 m: n2
272 spec:
273 template:
274 spec:
275 containers:
276 - name: nginx
277 image: nginx:1.7.9
278 args: ['c', 'a', 'b']
279 env:
280 - name: DEMO_GREETING
281 value: "New Demo Greeting"
282 - name: DEMO_FAREWELL
283 value: "Such a sweet sorrow"
284 - name: NEW_DEMO_VALUE
285 value: "Another Env Not In The Dest"
286 `
287
288 b, err := filters.FormatInput(bytes.NewBufferString(expected))
289 if !assert.NoError(t, err) {
290 return
291 }
292 expected = b.String()
293
294 b, err = filters.FormatInput(bytes.NewBufferString(actual))
295 if !assert.NoError(t, err) {
296 return
297 }
298 actual = b.String()
299
300 assert.Equal(t, expected, actual)
301 }
302
303 func TestMerge_list(t *testing.T) {
304 dest := yaml.MustParse(dest)
305 src := yaml.MustParse(`
306 apiVersion: apps/v1
307 kind: Deployment
308 spec:
309 template:
310 spec:
311 containers:
312 - name: nginx
313 args: ['e', 'd', 'f']
314 `)
315
316 result, err := Merge(src, dest, yaml.MergeOptions{
317 ListIncreaseDirection: yaml.MergeOptionsListAppend,
318 })
319 if !assert.NoError(t, err) {
320 return
321 }
322 actual, err := result.String()
323 if !assert.NoError(t, err) {
324 return
325 }
326
327 expected := `apiVersion: apps/v1
328 kind: Deployment
329 metadata:
330 name: app
331 labels:
332 app: java
333 annotations:
334 a.b.c: d.e.f
335 g: h1
336 i: j
337 m: n2
338 spec:
339 template:
340 spec:
341 containers:
342 - name: nginx
343 image: nginx:1.7.9
344 args: ['e', 'd', 'f']
345 env:
346 - name: DEMO_GREETING
347 value: "Hello from the environment"
348 - name: DEMO_FAREWELL
349 value: "Such a sweet sorrow"
350 `
351
352 b, err := filters.FormatInput(bytes.NewBufferString(expected))
353 if !assert.NoError(t, err) {
354 return
355 }
356 expected = b.String()
357
358 b, err = filters.FormatInput(bytes.NewBufferString(actual))
359 if !assert.NoError(t, err) {
360 return
361 }
362 actual = b.String()
363
364 assert.Equal(t, expected, actual)
365 }
366
367 func TestMerge_commentsKept(t *testing.T) {
368 actual, err := MergeStrings(`
369 a:
370 b:
371 c: e
372 `,
373 `
374 a:
375 b:
376 # header comment
377 c: d
378 `, true, yaml.MergeOptions{
379 ListIncreaseDirection: yaml.MergeOptionsListAppend,
380 })
381 if !assert.NoError(t, err) {
382 return
383 }
384 assert.Equal(t, `a:
385 b:
386 # header comment
387 c: e
388 `, actual)
389
390 actual, err = MergeStrings(`
391 a:
392 b:
393 c: e
394 `,
395 `
396 a:
397 b:
398 c: d
399 # footer comment
400 `, true, yaml.MergeOptions{
401 ListIncreaseDirection: yaml.MergeOptionsListAppend,
402 })
403 if !assert.NoError(t, err) {
404 return
405 }
406 assert.Equal(t, `a:
407 b:
408 c: e
409 # footer comment
410 `, actual)
411
412 actual, err = MergeStrings(`
413 a:
414 b:
415 c: e
416 `,
417 `
418 a:
419 b:
420 c: d # line comment
421 `, true, yaml.MergeOptions{
422 ListIncreaseDirection: yaml.MergeOptionsListAppend,
423 })
424 if !assert.NoError(t, err) {
425 return
426 }
427 assert.Equal(t, `a:
428 b:
429 c: e
430 `, actual)
431 }
432
433 func TestMerge_commentsOverride(t *testing.T) {
434 actual, err := MergeStrings(`
435 a:
436 b:
437 # header comment
438 c: e
439 `,
440 `
441 a:
442 b:
443 # replace comment
444 c: d
445 `, true, yaml.MergeOptions{
446 ListIncreaseDirection: yaml.MergeOptionsListAppend,
447 })
448 if !assert.NoError(t, err) {
449 return
450 }
451 assert.Equal(t, `a:
452 b:
453 # replace comment
454 c: e
455 `, actual)
456
457 actual, err = MergeStrings(`
458 a:
459 b:
460 c: e
461 # footer comment
462 `,
463 `
464 a:
465 b:
466 c: d
467 # replace comment
468 `, true, yaml.MergeOptions{
469 ListIncreaseDirection: yaml.MergeOptionsListAppend,
470 })
471 if !assert.NoError(t, err) {
472 return
473 }
474 assert.Equal(t, `a:
475 b:
476 c: e
477 # replace comment
478 `, actual)
479
480 actual, err = MergeStrings(`
481 a:
482 b:
483 c: e # line comment
484 `,
485 `
486 a:
487 b:
488 c: d # replace comment
489 `, true, yaml.MergeOptions{
490 ListIncreaseDirection: yaml.MergeOptionsListAppend,
491 })
492 if !assert.NoError(t, err) {
493 return
494 }
495 assert.Equal(t, `a:
496 b:
497 c: e # line comment
498 `, actual)
499
500 actual, err = MergeStrings(`
501 a:
502 b:
503 c: d # line comment
504 `,
505 `
506 a:
507 b:
508 c: d # replace comment
509 `, true, yaml.MergeOptions{
510 ListIncreaseDirection: yaml.MergeOptionsListAppend,
511 })
512 if !assert.NoError(t, err) {
513 return
514 }
515 assert.Equal(t, `a:
516 b:
517 c: d # line comment
518 `, actual)
519 }
520
View as plain text