Little helper to run CNCF's k3s in Docker
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
k3d/pkg/util/yaml_test.go

94 lines
1.7 KiB

package util
import (
"bytes"
"strings"
"testing"
"gotest.tools/assert"
)
type DummyContext struct {
Name string
}
type DummyContextWithTag struct {
Name string `json:"newName"`
}
func TestSplitYAML(t *testing.T) {
testSets := map[string]struct {
document string
expected []string
}{
"single": {
document: `name: clusterA`,
expected: []string{
`name: clusterA`,
},
},
"multiple": {
document: `name: clusterA
---
name: clusterB
`,
expected: []string{
`name: clusterA`,
`name: clusterB`,
},
},
}
for name, testSet := range testSets {
t.Run(name, func(t *testing.T) {
actual, err := SplitYAML([]byte(testSet.document))
assert.NilError(t, err)
assert.Equal(t, len(testSet.expected), len(actual))
for idx := range testSet.expected {
assert.Equal(t, testSet.expected[idx], strings.TrimSpace(string(actual[idx])))
}
})
}
}
func TestYAMLEncoder(t *testing.T) {
testSets := map[string]struct {
values []interface{}
expected string
}{
"single value": {
values: []interface{}{
DummyContext{Name: "clusterA"},
},
expected: `Name: clusterA
`,
},
"single value with json tag": {
values: []interface{}{
DummyContextWithTag{Name: "clusterA"},
},
expected: `newName: clusterA
`,
},
"multiple values": {
values: []interface{}{
DummyContext{Name: "clusterA"},
DummyContextWithTag{Name: "clusterB"},
},
expected: `Name: clusterA
---
newName: clusterB
`,
},
}
for name, testSet := range testSets {
t.Run(name, func(t *testing.T) {
var buf bytes.Buffer
enc := NewYAMLEncoder(&buf)
for _, v := range testSet.values {
assert.NilError(t, enc.Encode(v))
}
assert.NilError(t, enc.Close())
assert.Equal(t, testSet.expected, buf.String())
})
}
}