1
2
3
4 package kv
5
6 import (
7 "reflect"
8 "testing"
9
10 "github.com/stretchr/testify/require"
11 ldr "sigs.k8s.io/kustomize/api/pkg/loader"
12 valtest_test "sigs.k8s.io/kustomize/api/testutils/valtest"
13 "sigs.k8s.io/kustomize/api/types"
14 "sigs.k8s.io/kustomize/kyaml/filesys"
15 )
16
17 func makeKvLoader(fSys filesys.FileSystem) *loader {
18 return &loader{
19 ldr: ldr.NewFileLoaderAtRoot(fSys),
20 validator: valtest_test.MakeFakeValidator()}
21 }
22
23 func TestKeyValuesFromLines(t *testing.T) {
24 tests := []struct {
25 desc string
26 content string
27 expectedPairs []types.Pair
28 expectedErr bool
29 }{
30 {
31 desc: "valid kv content parse",
32 content: `
33 k1=v1
34 k2=v2
35 `,
36 expectedPairs: []types.Pair{
37 {Key: "k1", Value: "v1"},
38 {Key: "k2", Value: "v2"},
39 },
40 expectedErr: false,
41 },
42 {
43 desc: "content with comments",
44 content: `
45 k1=v1
46 #k2=v2
47 `,
48 expectedPairs: []types.Pair{
49 {Key: "k1", Value: "v1"},
50 },
51 expectedErr: false,
52 },
53 {
54 desc: "no value with equals",
55 content: `
56 k1=
57 `,
58 expectedPairs: []types.Pair{
59 {Key: "k1", Value: ""},
60 },
61 expectedErr: false,
62 },
63 {
64 desc: "no value without equals",
65 content: `
66 k1
67 `,
68 expectedPairs: []types.Pair{
69 {Key: "k1", Value: ""},
70 },
71 expectedErr: false,
72 },
73 {
74 desc: "invalid UTF-8 content",
75 content: "Invalid UTF8 Content: \x80\x81",
76 expectedPairs: nil,
77 expectedErr: true,
78 },
79 }
80
81 kvl := makeKvLoader(filesys.MakeFsInMemory())
82 for _, test := range tests {
83 pairs, err := kvl.keyValuesFromLines([]byte(test.content))
84 if test.expectedErr && err == nil {
85 t.Fatalf("%s should return error", test.desc)
86 }
87 if !reflect.DeepEqual(pairs, test.expectedPairs) {
88 t.Errorf("%s should succeed, got:%v exptected:%v", test.desc, pairs, test.expectedPairs)
89 }
90 }
91 }
92
93 func TestKeyValuesFromFileSources(t *testing.T) {
94 tests := []struct {
95 description string
96 sources []string
97 expected []types.Pair
98 }{
99 {
100 description: "create kvs from file sources",
101 sources: []string{"files/app-init.ini"},
102 expected: []types.Pair{
103 {
104 Key: "app-init.ini",
105 Value: "FOO=bar",
106 },
107 },
108 },
109 }
110
111 fSys := filesys.MakeFsInMemory()
112 err := fSys.WriteFile("/files/app-init.ini", []byte("FOO=bar"))
113 require.NoError(t, err)
114 kvl := makeKvLoader(fSys)
115 for _, tc := range tests {
116 kvs, err := kvl.keyValuesFromFileSources(tc.sources)
117 if err != nil {
118 t.Fatalf("unexpected error: %v", err)
119 }
120 if !reflect.DeepEqual(kvs, tc.expected) {
121 t.Fatalf("in testcase: %q updated:\n%#v\ndoesn't match expected:\n%#v\n", tc.description, kvs, tc.expected)
122 }
123 }
124 }
125
View as plain text