mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 17:12:51 +00:00
520 lines
8.8 KiB
Go
520 lines
8.8 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package merge2_test
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"sigs.k8s.io/kustomize/kyaml/kio/filters"
|
|
"sigs.k8s.io/kustomize/kyaml/yaml"
|
|
. "sigs.k8s.io/kustomize/kyaml/yaml/merge2"
|
|
)
|
|
|
|
const dest = `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: app
|
|
labels:
|
|
app: java
|
|
annotations:
|
|
a.b.c: d.e.f
|
|
g: h1
|
|
i: j
|
|
m: n2
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: nginx
|
|
image: nginx:1.7.9
|
|
args: ['c', 'a', 'b']
|
|
env:
|
|
- name: DEMO_GREETING
|
|
value: "Hello from the environment"
|
|
- name: DEMO_FAREWELL
|
|
value: "Such a sweet sorrow"
|
|
`
|
|
|
|
func TestMerge_map(t *testing.T) {
|
|
dest := yaml.MustParse(dest)
|
|
src := yaml.MustParse(`
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: app
|
|
labels:
|
|
app: java
|
|
annotations:
|
|
a.b.c: d.e.f
|
|
g: h2
|
|
k: l
|
|
m: n1
|
|
`)
|
|
|
|
result, err := Merge(src, dest, yaml.MergeOptions{
|
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
|
})
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
actual, err := result.String()
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
|
|
expected := `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: app
|
|
labels:
|
|
app: java
|
|
annotations:
|
|
a.b.c: d.e.f
|
|
g: h2
|
|
i: j
|
|
k: l
|
|
m: n1
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: nginx
|
|
image: nginx:1.7.9
|
|
args: ['c', 'a', 'b']
|
|
env:
|
|
- name: DEMO_GREETING
|
|
value: "Hello from the environment"
|
|
- name: DEMO_FAREWELL
|
|
value: "Such a sweet sorrow"
|
|
`
|
|
b, err := filters.FormatInput(bytes.NewBufferString(expected))
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
expected = b.String()
|
|
|
|
b, err = filters.FormatInput(bytes.NewBufferString(actual))
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
actual = b.String()
|
|
|
|
assert.Equal(t, expected, actual)
|
|
}
|
|
|
|
func TestMerge_clear(t *testing.T) {
|
|
dest := yaml.MustParse(dest)
|
|
src := yaml.MustParse(`
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
annotations: null
|
|
`)
|
|
|
|
result, err := Merge(src, dest, yaml.MergeOptions{
|
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
|
})
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
actual, err := result.String()
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
|
|
expected := `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: app
|
|
labels:
|
|
app: java
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: nginx
|
|
image: nginx:1.7.9
|
|
args: ['c', 'a', 'b']
|
|
env:
|
|
- name: DEMO_GREETING
|
|
value: "Hello from the environment"
|
|
- name: DEMO_FAREWELL
|
|
value: "Such a sweet sorrow"
|
|
`
|
|
b, err := filters.FormatInput(bytes.NewBufferString(expected))
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
expected = b.String()
|
|
|
|
b, err = filters.FormatInput(bytes.NewBufferString(actual))
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
actual = b.String()
|
|
|
|
assert.Equal(t, expected, actual)
|
|
}
|
|
|
|
func TestMerge_mapInverse(t *testing.T) {
|
|
dest := yaml.MustParse(dest)
|
|
src := yaml.MustParse(`
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: app
|
|
labels:
|
|
app: java
|
|
annotations:
|
|
a.b.c: d.e.f
|
|
g: h2
|
|
k: l
|
|
m: n1
|
|
`)
|
|
|
|
result, err := Merge(dest, src, yaml.MergeOptions{
|
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
|
})
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
actual, err := result.String()
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
|
|
expected := `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: app
|
|
labels:
|
|
app: java
|
|
annotations:
|
|
a.b.c: d.e.f
|
|
g: h1
|
|
i: j
|
|
k: l
|
|
m: n2
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: nginx
|
|
image: nginx:1.7.9
|
|
args: ['c', 'a', 'b']
|
|
env:
|
|
- name: DEMO_GREETING
|
|
value: "Hello from the environment"
|
|
- name: DEMO_FAREWELL
|
|
value: "Such a sweet sorrow"
|
|
`
|
|
b, err := filters.FormatInput(bytes.NewBufferString(expected))
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
expected = b.String()
|
|
|
|
b, err = filters.FormatInput(bytes.NewBufferString(actual))
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
actual = b.String()
|
|
|
|
assert.Equal(t, expected, actual)
|
|
}
|
|
|
|
func TestMerge_listElem(t *testing.T) {
|
|
dest := yaml.MustParse(dest)
|
|
src := yaml.MustParse(`
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: nginx
|
|
env:
|
|
- name: DEMO_GREETING
|
|
value: "New Demo Greeting"
|
|
- name: NEW_DEMO_VALUE
|
|
value: "Another Env Not In The Dest"
|
|
`)
|
|
|
|
result, err := Merge(src, dest, yaml.MergeOptions{
|
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
|
})
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
actual, err := result.String()
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
|
|
expected := `apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: app
|
|
labels:
|
|
app: java
|
|
annotations:
|
|
a.b.c: d.e.f
|
|
g: h1
|
|
i: j
|
|
m: n2
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: nginx
|
|
image: nginx:1.7.9
|
|
args: ['c', 'a', 'b']
|
|
env:
|
|
- name: DEMO_GREETING
|
|
value: "New Demo Greeting"
|
|
- name: DEMO_FAREWELL
|
|
value: "Such a sweet sorrow"
|
|
- name: NEW_DEMO_VALUE
|
|
value: "Another Env Not In The Dest"
|
|
`
|
|
|
|
b, err := filters.FormatInput(bytes.NewBufferString(expected))
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
expected = b.String()
|
|
|
|
b, err = filters.FormatInput(bytes.NewBufferString(actual))
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
actual = b.String()
|
|
|
|
assert.Equal(t, expected, actual)
|
|
}
|
|
|
|
func TestMerge_list(t *testing.T) {
|
|
dest := yaml.MustParse(dest)
|
|
src := yaml.MustParse(`
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: nginx
|
|
args: ['e', 'd', 'f']
|
|
`)
|
|
|
|
result, err := Merge(src, dest, yaml.MergeOptions{
|
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
|
})
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
actual, err := result.String()
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
|
|
expected := `apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: app
|
|
labels:
|
|
app: java
|
|
annotations:
|
|
a.b.c: d.e.f
|
|
g: h1
|
|
i: j
|
|
m: n2
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: nginx
|
|
image: nginx:1.7.9
|
|
args: ['e', 'd', 'f']
|
|
env:
|
|
- name: DEMO_GREETING
|
|
value: "Hello from the environment"
|
|
- name: DEMO_FAREWELL
|
|
value: "Such a sweet sorrow"
|
|
`
|
|
|
|
b, err := filters.FormatInput(bytes.NewBufferString(expected))
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
expected = b.String()
|
|
|
|
b, err = filters.FormatInput(bytes.NewBufferString(actual))
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
actual = b.String()
|
|
|
|
assert.Equal(t, expected, actual)
|
|
}
|
|
|
|
func TestMerge_commentsKept(t *testing.T) {
|
|
actual, err := MergeStrings(`
|
|
a:
|
|
b:
|
|
c: e
|
|
`,
|
|
`
|
|
a:
|
|
b:
|
|
# header comment
|
|
c: d
|
|
`, true, yaml.MergeOptions{
|
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
|
})
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
assert.Equal(t, `a:
|
|
b:
|
|
# header comment
|
|
c: e
|
|
`, actual)
|
|
|
|
actual, err = MergeStrings(`
|
|
a:
|
|
b:
|
|
c: e
|
|
`,
|
|
`
|
|
a:
|
|
b:
|
|
c: d
|
|
# footer comment
|
|
`, true, yaml.MergeOptions{
|
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
|
})
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
assert.Equal(t, `a:
|
|
b:
|
|
c: e
|
|
# footer comment
|
|
`, actual)
|
|
|
|
actual, err = MergeStrings(`
|
|
a:
|
|
b:
|
|
c: e
|
|
`,
|
|
`
|
|
a:
|
|
b:
|
|
c: d # line comment
|
|
`, true, yaml.MergeOptions{
|
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
|
})
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
assert.Equal(t, `a:
|
|
b:
|
|
c: e
|
|
`, actual)
|
|
}
|
|
|
|
func TestMerge_commentsOverride(t *testing.T) {
|
|
actual, err := MergeStrings(`
|
|
a:
|
|
b:
|
|
# header comment
|
|
c: e
|
|
`,
|
|
`
|
|
a:
|
|
b:
|
|
# replace comment
|
|
c: d
|
|
`, true, yaml.MergeOptions{
|
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
|
})
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
assert.Equal(t, `a:
|
|
b:
|
|
# replace comment
|
|
c: e
|
|
`, actual)
|
|
|
|
actual, err = MergeStrings(`
|
|
a:
|
|
b:
|
|
c: e
|
|
# footer comment
|
|
`,
|
|
`
|
|
a:
|
|
b:
|
|
c: d
|
|
# replace comment
|
|
`, true, yaml.MergeOptions{
|
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
|
})
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
assert.Equal(t, `a:
|
|
b:
|
|
c: e
|
|
# replace comment
|
|
`, actual)
|
|
|
|
actual, err = MergeStrings(`
|
|
a:
|
|
b:
|
|
c: e # line comment
|
|
`,
|
|
`
|
|
a:
|
|
b:
|
|
c: d # replace comment
|
|
`, true, yaml.MergeOptions{
|
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
|
})
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
assert.Equal(t, `a:
|
|
b:
|
|
c: e # line comment
|
|
`, actual)
|
|
|
|
actual, err = MergeStrings(`
|
|
a:
|
|
b:
|
|
c: d # line comment
|
|
`,
|
|
`
|
|
a:
|
|
b:
|
|
c: d # replace comment
|
|
`, true, yaml.MergeOptions{
|
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
|
})
|
|
if !assert.NoError(t, err) {
|
|
return
|
|
}
|
|
assert.Equal(t, `a:
|
|
b:
|
|
c: d # line comment
|
|
`, actual)
|
|
}
|