1
2
3
4 package generators_test
5
6 import (
7 "path/filepath"
8 "testing"
9
10 "github.com/stretchr/testify/assert"
11 . "sigs.k8s.io/kustomize/api/internal/generators"
12 "sigs.k8s.io/kustomize/api/kv"
13 "sigs.k8s.io/kustomize/api/pkg/loader"
14 valtest_test "sigs.k8s.io/kustomize/api/testutils/valtest"
15 "sigs.k8s.io/kustomize/api/types"
16 "sigs.k8s.io/kustomize/kyaml/filesys"
17 )
18
19 func TestMakeSecret(t *testing.T) {
20 type expected struct {
21 out string
22 errMsg string
23 }
24
25 testCases := map[string]struct {
26 args types.SecretArgs
27 exp expected
28 }{
29 "construct secret from env": {
30 args: types.SecretArgs{
31 GeneratorArgs: types.GeneratorArgs{
32 Name: "envSecret",
33 KvPairSources: types.KvPairSources{
34 EnvSources: []string{
35 filepath.Join("secret", "app.env"),
36 },
37 },
38 },
39 },
40 exp: expected{
41 out: `apiVersion: v1
42 kind: Secret
43 metadata:
44 name: envSecret
45 type: Opaque
46 data:
47 DB_PASSWORD: cXdlcnR5
48 DB_USERNAME: YWRtaW4=
49 `,
50 },
51 },
52 "construct secret from text file": {
53 args: types.SecretArgs{
54 GeneratorArgs: types.GeneratorArgs{
55 Name: "fileSecret1",
56 KvPairSources: types.KvPairSources{
57 FileSources: []string{
58 filepath.Join("secret", "app-init.ini"),
59 },
60 },
61 },
62 },
63 exp: expected{
64 out: `apiVersion: v1
65 kind: Secret
66 metadata:
67 name: fileSecret1
68 type: Opaque
69 data:
70 app-init.ini: Rk9PPWJhcgpCQVI9YmF6Cg==
71 `,
72 },
73 },
74 "construct secret from text and binary file": {
75 args: types.SecretArgs{
76 GeneratorArgs: types.GeneratorArgs{
77 Name: "fileSecret2",
78 KvPairSources: types.KvPairSources{
79 FileSources: []string{
80 filepath.Join("secret", "app-init.ini"),
81 filepath.Join("secret", "app.bin"),
82 },
83 },
84 },
85 },
86 exp: expected{
87 out: `apiVersion: v1
88 kind: Secret
89 metadata:
90 name: fileSecret2
91 type: Opaque
92 data:
93 app-init.ini: Rk9PPWJhcgpCQVI9YmF6Cg==
94 app.bin: //0=
95 `,
96 },
97 },
98 "construct secret from literal": {
99 args: types.SecretArgs{
100 GeneratorArgs: types.GeneratorArgs{
101 Name: "literalSecret1",
102 KvPairSources: types.KvPairSources{
103 LiteralSources: []string{"a=x", "b=y", "c=\"Hello World\"", "d='true'"},
104 },
105 Options: &types.GeneratorOptions{
106 Labels: map[string]string{
107 "foo": "bar",
108 },
109 },
110 },
111 },
112 exp: expected{
113 out: `apiVersion: v1
114 kind: Secret
115 metadata:
116 name: literalSecret1
117 labels:
118 foo: 'bar'
119 type: Opaque
120 data:
121 a: eA==
122 b: eQ==
123 c: SGVsbG8gV29ybGQ=
124 d: dHJ1ZQ==
125 `,
126 },
127 },
128 "construct secret with type": {
129 args: types.SecretArgs{
130 GeneratorArgs: types.GeneratorArgs{
131 Name: "literalSecret1",
132 KvPairSources: types.KvPairSources{
133 LiteralSources: []string{"a=x"},
134 },
135 Options: &types.GeneratorOptions{
136 Labels: map[string]string{
137 "foo": "bar",
138 },
139 },
140 },
141 Type: "foobar",
142 },
143 exp: expected{
144 out: `apiVersion: v1
145 kind: Secret
146 metadata:
147 name: literalSecret1
148 labels:
149 foo: 'bar'
150 type: foobar
151 data:
152 a: eA==
153 `,
154 },
155 },
156 "construct secret from literal with GeneratorOptions in SecretArgs": {
157 args: types.SecretArgs{
158 GeneratorArgs: types.GeneratorArgs{
159 Name: "literalSecret2",
160 KvPairSources: types.KvPairSources{
161 LiteralSources: []string{"a=x", "b=y", "c=\"Hello World\"", "d='true'"},
162 },
163 Options: &types.GeneratorOptions{
164 Labels: map[string]string{
165 "veggie": "celery",
166 "dog": "beagle",
167 "cat": "annoying",
168 },
169 Annotations: map[string]string{
170 "river": "Missouri",
171 "city": "Iowa City",
172 },
173 Immutable: true,
174 },
175 },
176 },
177 exp: expected{
178 out: `apiVersion: v1
179 kind: Secret
180 metadata:
181 name: literalSecret2
182 labels:
183 cat: 'annoying'
184 dog: 'beagle'
185 veggie: 'celery'
186 annotations:
187 city: 'Iowa City'
188 river: 'Missouri'
189 type: Opaque
190 data:
191 a: eA==
192 b: eQ==
193 c: SGVsbG8gV29ybGQ=
194 d: dHJ1ZQ==
195 immutable: true
196 `,
197 },
198 },
199 }
200 fSys := filesys.MakeFsInMemory()
201 fSys.WriteFile(
202 filesys.RootedPath("secret", "app.env"),
203 []byte("DB_USERNAME=admin\nDB_PASSWORD=qwerty\n"))
204 fSys.WriteFile(
205 filesys.RootedPath("secret", "app-init.ini"),
206 []byte("FOO=bar\nBAR=baz\n"))
207 fSys.WriteFile(
208 filesys.RootedPath("secret", "app.bin"),
209 []byte{0xff, 0xfd})
210 kvLdr := kv.NewLoader(
211 loader.NewFileLoaderAtRoot(fSys),
212 valtest_test.MakeFakeValidator())
213
214 for n := range testCases {
215 tc := testCases[n]
216 t.Run(n, func(t *testing.T) {
217 rn, err := MakeSecret(kvLdr, &tc.args)
218 if err != nil {
219 if !assert.EqualError(t, err, tc.exp.errMsg) {
220 t.FailNow()
221 }
222 return
223 }
224 if tc.exp.errMsg != "" {
225 t.Fatalf("%s: should return error '%s'", n, tc.exp.errMsg)
226 }
227 output := rn.MustString()
228 if !assert.Equal(t, tc.exp.out, output) {
229 t.FailNow()
230 }
231 })
232 }
233 }
234
View as plain text