Files
kustomize/kyaml/yaml/merge2/merge2_old_test.go
2020-10-02 09:56:59 -07:00

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)
}