Skip to content

Commit 7581569

Browse files
committed
test: test stringData in secretGenerator
1 parent 11ea0c1 commit 7581569

File tree

2 files changed

+333
-0
lines changed

2 files changed

+333
-0
lines changed

api/internal/generators/secret_test.go

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,82 @@ data:
193193
c: SGVsbG8gV29ybGQ=
194194
d: dHJ1ZQ==
195195
immutable: true
196+
`,
197+
},
198+
},
199+
"construct secret from text file as stringData": {
200+
args: types.SecretArgs{
201+
StringData: true,
202+
GeneratorArgs: types.GeneratorArgs{
203+
Name: "fileSecret1",
204+
KvPairSources: types.KvPairSources{
205+
FileSources: []string{
206+
filepath.Join("secret", "app-init.ini"),
207+
},
208+
},
209+
},
210+
},
211+
exp: expected{
212+
out: `apiVersion: v1
213+
kind: Secret
214+
metadata:
215+
name: fileSecret1
216+
type: Opaque
217+
stringData:
218+
app-init.ini: |
219+
FOO=bar
220+
BAR=baz
221+
`,
222+
},
223+
},
224+
"construct secret from text and binary file with stringData and data": {
225+
args: types.SecretArgs{
226+
StringData: true,
227+
GeneratorArgs: types.GeneratorArgs{
228+
Name: "fileSecret2",
229+
KvPairSources: types.KvPairSources{
230+
FileSources: []string{
231+
filepath.Join("secret", "app-init.ini"),
232+
filepath.Join("secret", "app.bin"),
233+
},
234+
},
235+
},
236+
},
237+
exp: expected{
238+
out: `apiVersion: v1
239+
kind: Secret
240+
metadata:
241+
name: fileSecret2
242+
type: Opaque
243+
stringData:
244+
app-init.ini: |
245+
FOO=bar
246+
BAR=baz
247+
data:
248+
app.bin: //0=
249+
`,
250+
},
251+
},
252+
"construct secret from a binary file and fallback to data from stringData": {
253+
args: types.SecretArgs{
254+
StringData: true,
255+
GeneratorArgs: types.GeneratorArgs{
256+
Name: "fileSecret2",
257+
KvPairSources: types.KvPairSources{
258+
FileSources: []string{
259+
filepath.Join("secret", "app.bin"),
260+
},
261+
},
262+
},
263+
},
264+
exp: expected{
265+
out: `apiVersion: v1
266+
kind: Secret
267+
metadata:
268+
name: fileSecret2
269+
type: Opaque
270+
data:
271+
app.bin: //0=
196272
`,
197273
},
198274
},

api/krusty/secrets_test.go

Lines changed: 257 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,177 @@ type: Opaque
122122
`)
123123
}
124124

125+
func TestSecretGeneratorStringDataFromProperties(t *testing.T) {
126+
th := kusttest_test.MakeHarness(t)
127+
th.WriteK("base", `
128+
secretGenerator:
129+
- name: test-secret
130+
behavior: create
131+
envs:
132+
- properties
133+
`)
134+
th.WriteF("base/properties", `
135+
VAR1=100
136+
`)
137+
th.WriteK("overlay", `
138+
resources:
139+
- ../base
140+
secretGenerator:
141+
- name: test-secret
142+
stringData: true
143+
behavior: "merge"
144+
envs:
145+
- properties
146+
`)
147+
th.WriteF("overlay/properties", `
148+
VAR2=200
149+
`)
150+
m := th.Run("overlay", th.MakeDefaultOptions())
151+
th.AssertActualEqualsExpected(m, `
152+
apiVersion: v1
153+
data:
154+
VAR1: MTAw
155+
kind: Secret
156+
metadata:
157+
name: test-secret-cbkdg78c5m
158+
stringData:
159+
VAR2: "200"
160+
type: Opaque
161+
`)
162+
}
163+
164+
// Generate Secrets similar to TestGeneratorBasics with stringData enabled and
165+
// disabled.
166+
func TestSecretGeneratorStringData(t *testing.T) {
167+
th := kusttest_test.MakeHarness(t)
168+
th.WriteK(".", `
169+
namePrefix: blah-
170+
secretGenerator:
171+
- name: bob
172+
literals:
173+
- fruit=apple
174+
- vegetable=broccoli
175+
envs:
176+
- foo.env
177+
env: bar.env
178+
files:
179+
- passphrase=phrase.dat
180+
- forces.txt
181+
- name: json
182+
literals:
183+
- 'v2=[{"path": "var/druid/segment-cache"}]'
184+
- >-
185+
druid_segmentCache_locations=[{"path":
186+
"var/druid/segment-cache",
187+
"maxSize": 32000000000,
188+
"freeSpacePercent": 1.0}]
189+
- name: bob-string-data
190+
stringData: true
191+
literals:
192+
- fruit=apple
193+
- vegetable=broccoli
194+
envs:
195+
- foo.env
196+
env: bar.env
197+
files:
198+
- passphrase=phrase.dat
199+
- forces.txt
200+
- name: json-string-data
201+
stringData: true
202+
literals:
203+
- 'v2=[{"path": "var/druid/segment-cache"}]'
204+
- >-
205+
druid_segmentCache_locations=[{"path":
206+
"var/druid/segment-cache",
207+
"maxSize": 32000000000,
208+
"freeSpacePercent": 1.0}]
209+
`)
210+
th.WriteF("foo.env", `
211+
MOUNTAIN=everest
212+
OCEAN=pacific
213+
`)
214+
th.WriteF("bar.env", `
215+
BIRD=falcon
216+
`)
217+
th.WriteF("phrase.dat", `
218+
Life is short.
219+
But the years are long.
220+
Not while the evil days come not.
221+
`)
222+
th.WriteF("forces.txt", `
223+
gravitational
224+
electromagnetic
225+
strong nuclear
226+
weak nuclear
227+
`)
228+
opts := th.MakeDefaultOptions()
229+
m := th.Run(".", opts)
230+
th.AssertActualEqualsExpected(
231+
m, `
232+
apiVersion: v1
233+
data:
234+
BIRD: ZmFsY29u
235+
MOUNTAIN: ZXZlcmVzdA==
236+
OCEAN: cGFjaWZpYw==
237+
forces.txt: |
238+
CmdyYXZpdGF0aW9uYWwKZWxlY3Ryb21hZ25ldGljCnN0cm9uZyBudWNsZWFyCndlYWsgbn
239+
VjbGVhcgo=
240+
fruit: YXBwbGU=
241+
passphrase: |
242+
CkxpZmUgaXMgc2hvcnQuCkJ1dCB0aGUgeWVhcnMgYXJlIGxvbmcuCk5vdCB3aGlsZSB0aG
243+
UgZXZpbCBkYXlzIGNvbWUgbm90Lgo=
244+
vegetable: YnJvY2NvbGk=
245+
kind: Secret
246+
metadata:
247+
name: blah-bob-58g62h555c
248+
type: Opaque
249+
---
250+
apiVersion: v1
251+
data:
252+
druid_segmentCache_locations: |
253+
W3sicGF0aCI6ICJ2YXIvZHJ1aWQvc2VnbWVudC1jYWNoZSIsICJtYXhTaXplIjogMzIwMD
254+
AwMDAwMDAsICJmcmVlU3BhY2VQZXJjZW50IjogMS4wfV0=
255+
v2: W3sicGF0aCI6ICJ2YXIvZHJ1aWQvc2VnbWVudC1jYWNoZSJ9XQ==
256+
kind: Secret
257+
metadata:
258+
name: blah-json-5cdg9f2644
259+
type: Opaque
260+
---
261+
apiVersion: v1
262+
kind: Secret
263+
metadata:
264+
name: blah-bob-string-data-5g7kgmf529
265+
stringData:
266+
BIRD: falcon
267+
MOUNTAIN: everest
268+
OCEAN: pacific
269+
forces.txt: |2
270+
271+
gravitational
272+
electromagnetic
273+
strong nuclear
274+
weak nuclear
275+
fruit: apple
276+
passphrase: |2
277+
278+
Life is short.
279+
But the years are long.
280+
Not while the evil days come not.
281+
vegetable: broccoli
282+
type: Opaque
283+
---
284+
apiVersion: v1
285+
kind: Secret
286+
metadata:
287+
name: blah-json-string-data-g7ktb2m7bm
288+
stringData:
289+
druid_segmentCache_locations: '[{"path": "var/druid/segment-cache", "maxSize": 32000000000,
290+
"freeSpacePercent": 1.0}]'
291+
v2: '[{"path": "var/druid/segment-cache"}]'
292+
type: Opaque
293+
`)
294+
}
295+
125296
// TODO: This should be an error instead. However, we can't strict unmarshal until we have a yaml
126297
// lib that support case-insensitive keys and anchors.
127298
// See https://github.com/kubernetes-sigs/kustomize/issues/5061
@@ -289,6 +460,92 @@ type: Opaque
289460
`)
290461
}
291462

463+
func TestSecretGeneratorOverlaysBinaryDataStringDataFallback(t *testing.T) {
464+
th := kusttest_test.MakeHarness(t)
465+
th.WriteF("base/data.bin", string(manyHunter2s(30)))
466+
th.WriteK("base", `
467+
namePrefix: p1-
468+
secretGenerator:
469+
- name: com1
470+
stringData: true
471+
behavior: create
472+
files:
473+
- data.bin
474+
`)
475+
th.WriteK("overlay", `
476+
resources:
477+
- ../base
478+
secretGenerator:
479+
- name: com1
480+
behavior: merge
481+
`)
482+
m := th.Run("overlay", th.MakeDefaultOptions())
483+
th.AssertActualEqualsExpected(m, `
484+
apiVersion: v1
485+
data:
486+
data.bin: |
487+
/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bn
488+
RlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/
489+
aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudG
490+
VyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9o
491+
dW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy
492+
kind: Secret
493+
metadata:
494+
name: p1-com1-4k9fgt2gct
495+
type: Opaque
496+
`)
497+
}
498+
499+
func TestSecretGeneratorMixedStringDataFallback(t *testing.T) {
500+
th := kusttest_test.MakeHarness(t)
501+
th.WriteF("base/data.bin", string(manyHunter2s(30)))
502+
th.WriteF("base/forces.txt", `
503+
gravitational
504+
electromagnetic
505+
strong nuclear
506+
weak nuclear
507+
`)
508+
th.WriteK("base", `
509+
namePrefix: p1-
510+
secretGenerator:
511+
- name: com1
512+
stringData: true
513+
behavior: create
514+
files:
515+
- data.bin
516+
- forces.txt
517+
literals:
518+
- fruit=Mango
519+
- year=2025
520+
- crisis=true
521+
`)
522+
m := th.Run("base", th.MakeDefaultOptions())
523+
th.AssertActualEqualsExpected(m, `
524+
apiVersion: v1
525+
data:
526+
data.bin: |
527+
/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bn
528+
RlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/
529+
aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudG
530+
VyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9o
531+
dW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy
532+
kind: Secret
533+
metadata:
534+
name: p1-com1-8k8d8b8g5b
535+
stringData:
536+
crisis: "true"
537+
forces.txt: |2
538+
539+
gravitational
540+
electromagnetic
541+
strong nuclear
542+
weak nuclear
543+
fruit: Mango
544+
year: "2025"
545+
type: Opaque
546+
`)
547+
}
548+
292549
func TestSecretGeneratorOverlays(t *testing.T) {
293550
th := kusttest_test.MakeHarness(t)
294551
th.WriteK("base1", `

0 commit comments

Comments
 (0)