1
2
3
4 package krusty_test
5
6 import (
7 "path/filepath"
8 "testing"
9
10 "github.com/stretchr/testify/require"
11 kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
12 "sigs.k8s.io/kustomize/kyaml/copyutil"
13 )
14
15 const (
16 expectedHelm = `
17 apiVersion: v1
18 data:
19 rcon-password: Q0hBTkdFTUUh
20 kind: Secret
21 metadata:
22 labels:
23 app: test-minecraft
24 chart: minecraft-3.1.3
25 heritage: Helm
26 release: test
27 name: test-minecraft
28 type: Opaque
29 ---
30 apiVersion: v1
31 kind: Service
32 metadata:
33 labels:
34 app: test-minecraft
35 chart: minecraft-3.1.3
36 heritage: Helm
37 release: test
38 name: test-minecraft
39 spec:
40 ports:
41 - name: minecraft
42 port: 25565
43 protocol: TCP
44 targetPort: minecraft
45 selector:
46 app: test-minecraft
47 type: ClusterIP
48 `
49
50 expectedHelmExternalDNS = `
51 apiVersion: apps/v1
52 kind: Deployment
53 metadata:
54 labels:
55 app.kubernetes.io/instance: test
56 app.kubernetes.io/managed-by: Helm
57 app.kubernetes.io/name: external-dns
58 helm.sh/chart: external-dns-6.19.2
59 name: test-external-dns
60 namespace: default
61 spec:
62 replicas: 1
63 selector:
64 matchLabels:
65 app.kubernetes.io/instance: test
66 app.kubernetes.io/name: external-dns
67 template:
68 metadata:
69 annotations: null
70 labels:
71 app.kubernetes.io/instance: test
72 app.kubernetes.io/managed-by: Helm
73 app.kubernetes.io/name: external-dns
74 helm.sh/chart: external-dns-6.19.2
75 spec:
76 affinity:
77 nodeAffinity: null
78 podAffinity: null
79 podAntiAffinity:
80 preferredDuringSchedulingIgnoredDuringExecution:
81 - podAffinityTerm:
82 labelSelector:
83 matchLabels:
84 app.kubernetes.io/instance: test
85 app.kubernetes.io/name: external-dns
86 topologyKey: kubernetes.io/hostname
87 weight: 1
88 containers:
89 - args:
90 - --metrics-address=:7979
91 - --log-level=info
92 - --log-format=text
93 - --policy=upsert-only
94 - --provider=aws
95 - --registry=txt
96 - --interval=1m
97 - --source=service
98 - --source=ingress
99 - --aws-api-retries=3
100 - --aws-zone-type=
101 - --aws-batch-change-size=1000
102 env:
103 - name: AWS_DEFAULT_REGION
104 value: us-east-1
105 envFrom: null
106 image: docker.io/bitnami/external-dns:0.13.4-debian-11-r14
107 imagePullPolicy: IfNotPresent
108 livenessProbe:
109 failureThreshold: 2
110 httpGet:
111 path: /healthz
112 port: http
113 initialDelaySeconds: 10
114 periodSeconds: 10
115 successThreshold: 1
116 timeoutSeconds: 5
117 name: external-dns
118 ports:
119 - containerPort: 7979
120 name: http
121 readinessProbe:
122 failureThreshold: 6
123 httpGet:
124 path: /healthz
125 port: http
126 initialDelaySeconds: 5
127 periodSeconds: 10
128 successThreshold: 1
129 timeoutSeconds: 5
130 resources:
131 limits: {}
132 requests: {}
133 volumeMounts: null
134 securityContext:
135 fsGroup: 1001
136 runAsUser: 1001
137 serviceAccountName: default
138 volumes: null
139 `
140 )
141
142 func TestHelmChartInflationGeneratorOld(t *testing.T) {
143 th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
144 defer th.Reset()
145 if err := th.ErrIfNoHelm(); err != nil {
146 t.Skip("skipping: " + err.Error())
147 }
148
149 th.WriteK(th.GetRoot(), `
150 helmChartInflationGenerator:
151 - chartName: minecraft
152 chartRepoUrl: https://itzg.github.io/minecraft-server-charts
153 chartVersion: 3.1.3
154 releaseName: test
155 `)
156
157 m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
158 th.AssertActualEqualsExpected(m, expectedHelm)
159 }
160
161 func TestHelmChartInflationGenerator(t *testing.T) {
162 th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
163 defer th.Reset()
164 if err := th.ErrIfNoHelm(); err != nil {
165 t.Skip("skipping: " + err.Error())
166 }
167
168 th.WriteK(th.GetRoot(), `
169 helmCharts:
170 - name: minecraft
171 repo: https://itzg.github.io/minecraft-server-charts
172 version: 3.1.3
173 releaseName: test
174 `)
175
176 m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
177 th.AssertActualEqualsExpected(m, expectedHelm)
178 }
179
180 func TestHelmChartInflationGeneratorWithOciRepository(t *testing.T) {
181 th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
182 defer th.Reset()
183 if err := th.ErrIfNoHelm(); err != nil {
184 t.Skip("skipping: " + err.Error())
185 }
186
187 th.WriteK(th.GetRoot(), `
188 helmCharts:
189 - name: external-dns
190 repo: oci://registry-1.docker.io/bitnamicharts
191 version: 6.19.2
192 releaseName: test
193 valuesInline:
194 crd:
195 create: false
196 rbac:
197 create: false
198 serviceAccount:
199 create: false
200 service:
201 enabled: false
202
203 `)
204
205 m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
206 th.AssertActualEqualsExpected(m, expectedHelmExternalDNS)
207 }
208
209 func TestHelmChartInflationGeneratorWithOciRepositoryWithAppendSlash(t *testing.T) {
210 th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
211 defer th.Reset()
212 if err := th.ErrIfNoHelm(); err != nil {
213 t.Skip("skipping: " + err.Error())
214 }
215
216 th.WriteK(th.GetRoot(), `
217 helmCharts:
218 - name: external-dns
219 repo: oci://registry-1.docker.io/bitnamicharts/
220 version: 6.19.2
221 releaseName: test
222 valuesInline:
223 crd:
224 create: false
225 rbac:
226 create: false
227 serviceAccount:
228 create: false
229 service:
230 enabled: false
231
232 `)
233
234 m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
235 th.AssertActualEqualsExpected(m, expectedHelmExternalDNS)
236 }
237
238
239
240 func TestHelmChartProdVsDev(t *testing.T) {
241 th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
242 defer th.Reset()
243 if err := th.ErrIfNoHelm(); err != nil {
244 t.Skip("skipping: " + err.Error())
245 }
246 dirBase := th.MkDir("base")
247 dirProd := th.MkDir("prod")
248 dirDev := th.MkDir("dev")
249 dirBoth := th.MkDir("both")
250
251 th.WriteK(dirBase, `
252 helmCharts:
253 - name: minecraft
254 repo: https://itzg.github.io/minecraft-server-charts
255 version: 3.1.3
256 releaseName: test
257 `)
258 th.WriteK(dirProd, `
259 namespace: prod
260 namePrefix: myProd-
261 resources:
262 - ../base
263 `)
264 th.WriteK(dirDev, `
265 namespace: dev
266 namePrefix: myDev-
267 resources:
268 - ../base
269 `)
270 th.WriteK(dirBoth, `
271 resources:
272 - ../dev
273 - ../prod
274 `)
275
276
277 m := th.Run(dirBase, th.MakeOptionsPluginsEnabled())
278 th.AssertActualEqualsExpected(m, expectedHelm)
279
280
281 m = th.Run(dirProd, th.MakeOptionsPluginsEnabled())
282 th.AssertActualEqualsExpected(m, `
283 apiVersion: v1
284 data:
285 rcon-password: Q0hBTkdFTUUh
286 kind: Secret
287 metadata:
288 labels:
289 app: test-minecraft
290 chart: minecraft-3.1.3
291 heritage: Helm
292 release: test
293 name: myProd-test-minecraft
294 namespace: prod
295 type: Opaque
296 ---
297 apiVersion: v1
298 kind: Service
299 metadata:
300 labels:
301 app: test-minecraft
302 chart: minecraft-3.1.3
303 heritage: Helm
304 release: test
305 name: myProd-test-minecraft
306 namespace: prod
307 spec:
308 ports:
309 - name: minecraft
310 port: 25565
311 protocol: TCP
312 targetPort: minecraft
313 selector:
314 app: test-minecraft
315 type: ClusterIP
316 `)
317
318
319 m = th.Run(dirBoth, th.MakeOptionsPluginsEnabled())
320 th.AssertActualEqualsExpected(m, `
321 apiVersion: v1
322 data:
323 rcon-password: Q0hBTkdFTUUh
324 kind: Secret
325 metadata:
326 labels:
327 app: test-minecraft
328 chart: minecraft-3.1.3
329 heritage: Helm
330 release: test
331 name: myDev-test-minecraft
332 namespace: dev
333 type: Opaque
334 ---
335 apiVersion: v1
336 kind: Service
337 metadata:
338 labels:
339 app: test-minecraft
340 chart: minecraft-3.1.3
341 heritage: Helm
342 release: test
343 name: myDev-test-minecraft
344 namespace: dev
345 spec:
346 ports:
347 - name: minecraft
348 port: 25565
349 protocol: TCP
350 targetPort: minecraft
351 selector:
352 app: test-minecraft
353 type: ClusterIP
354 ---
355 apiVersion: v1
356 data:
357 rcon-password: Q0hBTkdFTUUh
358 kind: Secret
359 metadata:
360 labels:
361 app: test-minecraft
362 chart: minecraft-3.1.3
363 heritage: Helm
364 release: test
365 name: myProd-test-minecraft
366 namespace: prod
367 type: Opaque
368 ---
369 apiVersion: v1
370 kind: Service
371 metadata:
372 labels:
373 app: test-minecraft
374 chart: minecraft-3.1.3
375 heritage: Helm
376 release: test
377 name: myProd-test-minecraft
378 namespace: prod
379 spec:
380 ports:
381 - name: minecraft
382 port: 25565
383 protocol: TCP
384 targetPort: minecraft
385 selector:
386 app: test-minecraft
387 type: ClusterIP
388 `)
389 }
390
391 func TestHelmChartInflationGeneratorMultipleValuesFiles(t *testing.T) {
392 th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
393 defer th.Reset()
394 if err := th.ErrIfNoHelm(); err != nil {
395 t.Skip("skipping: " + err.Error())
396 }
397
398 copyValuesFilesTestChartsIntoHarness(t, th)
399
400 th.WriteK(th.GetRoot(), `
401 helmCharts:
402 - name: test-chart
403 releaseName: test-chart
404 additionalValuesFiles:
405 - charts/valuesFiles/file1.yaml
406 - charts/valuesFiles/file2.yaml
407 `)
408
409 m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
410 asYaml, err := m.AsYaml()
411 require.NoError(t, err)
412 require.Equal(t, string(asYaml), `apiVersion: apps/v1
413 kind: Deployment
414 metadata:
415 labels:
416 chart: test-1.0.0
417 name: my-deploy
418 namespace: file-2
419 spec:
420 replicas: 1
421 selector:
422 matchLabels:
423 app: test
424 template:
425 spec:
426 containers:
427 - image: test-image-file1:file1
428 imagePullPolicy: Never
429 ---
430 apiVersion: apps/v1
431 kind: Pod
432 metadata:
433 annotations:
434 helm.sh/hook: test
435 name: test-chart
436 `)
437 }
438
439 func TestHelmChartInflationGeneratorApiVersions(t *testing.T) {
440 th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
441 defer th.Reset()
442 if err := th.ErrIfNoHelm(); err != nil {
443 t.Skip("skipping: " + err.Error())
444 }
445
446 copyValuesFilesTestChartsIntoHarness(t, th)
447
448 th.WriteK(th.GetRoot(), `
449 helmCharts:
450 - name: test-chart
451 releaseName: test-chart
452 apiVersions:
453 - foo/v1
454 `)
455
456 m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
457 asYaml, err := m.AsYaml()
458 require.NoError(t, err)
459 require.Equal(t, string(asYaml), `apiVersion: foo/v1
460 kind: Deployment
461 metadata:
462 labels:
463 chart: test-1.0.0
464 name: my-deploy
465 namespace: default
466 spec:
467 replicas: 1
468 selector:
469 matchLabels:
470 app: test
471 template:
472 spec:
473 containers:
474 - image: test-image:v1.0.0
475 imagePullPolicy: Always
476 ---
477 apiVersion: foo/v1
478 kind: Pod
479 metadata:
480 annotations:
481 helm.sh/hook: test
482 name: test-chart
483 `)
484 }
485
486 func TestHelmChartInflationGeneratorSkipTests(t *testing.T) {
487 th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
488 defer th.Reset()
489 if err := th.ErrIfNoHelm(); err != nil {
490 t.Skip("skipping: " + err.Error())
491 }
492
493 copyValuesFilesTestChartsIntoHarness(t, th)
494
495 th.WriteK(th.GetRoot(), `
496 helmCharts:
497 - name: test-chart
498 releaseName: test-chart
499 skipTests: true
500 `)
501
502 m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
503 asYaml, err := m.AsYaml()
504 require.NoError(t, err)
505 require.Equal(t, string(asYaml), `apiVersion: apps/v1
506 kind: Deployment
507 metadata:
508 labels:
509 chart: test-1.0.0
510 name: my-deploy
511 namespace: default
512 spec:
513 replicas: 1
514 selector:
515 matchLabels:
516 app: test
517 template:
518 spec:
519 containers:
520 - image: test-image:v1.0.0
521 imagePullPolicy: Always
522 `)
523 }
524
525 func TestHelmChartInflationGeneratorNameTemplate(t *testing.T) {
526 th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
527 defer th.Reset()
528 if err := th.ErrIfNoHelm(); err != nil {
529 t.Skip("skipping: " + err.Error())
530 }
531
532 copyValuesFilesTestChartsIntoHarness(t, th)
533
534 th.WriteK(th.GetRoot(), `
535 helmCharts:
536 - name: test-chart
537 nameTemplate: name-template
538 `)
539
540 m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
541 asYaml, err := m.AsYaml()
542 require.NoError(t, err)
543 require.Equal(t, string(asYaml), `apiVersion: apps/v1
544 kind: Deployment
545 metadata:
546 labels:
547 chart: test-1.0.0
548 name: my-deploy
549 namespace: default
550 spec:
551 replicas: 1
552 selector:
553 matchLabels:
554 app: test
555 template:
556 spec:
557 containers:
558 - image: test-image:v1.0.0
559 imagePullPolicy: Always
560 ---
561 apiVersion: apps/v1
562 kind: Pod
563 metadata:
564 annotations:
565 helm.sh/hook: test
566 name: name-template
567 `)
568 }
569
570
571 func TestHelmChartInflationGeneratorForMultipleChartsDifferentVersion(t *testing.T) {
572 th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
573 defer th.Reset()
574 if err := th.ErrIfNoHelm(); err != nil {
575 t.Skip("skipping: " + err.Error())
576 }
577
578 copyValuesFilesTestChartsIntoHarness(t, th)
579
580 th.WriteK(th.GetRoot(), `
581 namespace: default
582 helmCharts:
583 - name: test-chart
584 releaseName: test
585 version: 1.0.0
586 skipTests: true
587 - name: minecraft
588 repo: https://itzg.github.io/minecraft-server-charts
589 version: 3.1.3
590 releaseName: test-1
591 - name: minecraft
592 repo: https://itzg.github.io/minecraft-server-charts
593 version: 3.1.4
594 releaseName: test-2
595 `)
596
597 m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
598 th.AssertActualEqualsExpected(m, `
599 apiVersion: apps/v1
600 kind: Deployment
601 metadata:
602 labels:
603 chart: test-1.0.0
604 name: my-deploy
605 namespace: default
606 spec:
607 replicas: 1
608 selector:
609 matchLabels:
610 app: test
611 template:
612 spec:
613 containers:
614 - image: test-image:v1.0.0
615 imagePullPolicy: Always
616 ---
617 apiVersion: v1
618 data:
619 rcon-password: Q0hBTkdFTUUh
620 kind: Secret
621 metadata:
622 labels:
623 app: test-1-minecraft
624 chart: minecraft-3.1.3
625 heritage: Helm
626 release: test-1
627 name: test-1-minecraft
628 namespace: default
629 type: Opaque
630 ---
631 apiVersion: v1
632 kind: Service
633 metadata:
634 labels:
635 app: test-1-minecraft
636 chart: minecraft-3.1.3
637 heritage: Helm
638 release: test-1
639 name: test-1-minecraft
640 namespace: default
641 spec:
642 ports:
643 - name: minecraft
644 port: 25565
645 protocol: TCP
646 targetPort: minecraft
647 selector:
648 app: test-1-minecraft
649 type: ClusterIP
650 ---
651 apiVersion: v1
652 data:
653 rcon-password: Q0hBTkdFTUUh
654 kind: Secret
655 metadata:
656 labels:
657 app: test-2-minecraft
658 chart: minecraft-3.1.4
659 heritage: Helm
660 release: test-2
661 name: test-2-minecraft
662 namespace: default
663 type: Opaque
664 ---
665 apiVersion: v1
666 kind: Service
667 metadata:
668 labels:
669 app: test-2-minecraft
670 chart: minecraft-3.1.4
671 heritage: Helm
672 release: test-2
673 name: test-2-minecraft
674 namespace: default
675 spec:
676 ports:
677 - name: minecraft
678 port: 25565
679 protocol: TCP
680 targetPort: minecraft
681 selector:
682 app: test-2-minecraft
683 type: ClusterIP
684 `)
685 }
686
687 func TestHelmChartInflationGeneratorForMultipleKubeVersions(t *testing.T) {
688 th := kusttest_test.MakeEnhancedHarnessWithTmpRoot(t)
689 defer th.Reset()
690 if err := th.ErrIfNoHelm(); err != nil {
691 t.Skip("skipping: " + err.Error())
692 }
693
694 copyValuesFilesTestChartsIntoHarness(t, th)
695
696 th.WriteK(th.GetRoot(), `
697 namespace: default
698 helmCharts:
699 - name: minecraft
700 repo: https://itzg.github.io/minecraft-server-charts
701 version: 4.11.0
702 releaseName: test
703 kubeVersion: "1.16"
704 valuesInline:
705 minecraftServer:
706 extraPorts:
707 - name: map
708 containerPort: 8123
709 protocol: TCP
710 service:
711 enabled: false
712 ingress:
713 enabled: true
714 `)
715
716 m := th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
717 th.AssertActualEqualsExpected(m, `
718 apiVersion: v1
719 data:
720 rcon-password: Q0hBTkdFTUUh
721 kind: Secret
722 metadata:
723 labels:
724 app: test-minecraft
725 app.kubernetes.io/instance: test-minecraft
726 app.kubernetes.io/name: minecraft
727 app.kubernetes.io/version: 4.11.0
728 chart: minecraft-4.11.0
729 heritage: Helm
730 release: test
731 name: test-minecraft-rcon
732 namespace: default
733 type: Opaque
734 ---
735 apiVersion: v1
736 data:
737 cf-api-key: Q0hBTkdFTUUh
738 kind: Secret
739 metadata:
740 labels:
741 app: test-minecraft
742 app.kubernetes.io/instance: test-minecraft
743 app.kubernetes.io/name: minecraft
744 app.kubernetes.io/version: 4.11.0
745 chart: minecraft-4.11.0
746 heritage: Helm
747 release: test
748 name: test-minecraft-curseforge
749 namespace: default
750 type: Opaque
751 ---
752 apiVersion: v1
753 kind: Service
754 metadata:
755 labels:
756 app: test-minecraft
757 app.kubernetes.io/instance: test-minecraft
758 app.kubernetes.io/name: minecraft
759 app.kubernetes.io/version: 4.11.0
760 chart: minecraft-4.11.0
761 heritage: Helm
762 release: test
763 name: test-minecraft
764 namespace: default
765 spec:
766 ports:
767 - name: minecraft
768 port: 25565
769 protocol: TCP
770 targetPort: minecraft
771 selector:
772 app: test-minecraft
773 type: ClusterIP
774 ---
775 apiVersion: networking.k8s.io/v1beta1
776 kind: Ingress
777 metadata:
778 labels:
779 app: test-minecraft-map
780 app.kubernetes.io/instance: test-minecraft
781 app.kubernetes.io/name: minecraft
782 app.kubernetes.io/version: 4.11.0
783 chart: minecraft-4.11.0
784 heritage: Helm
785 release: test
786 name: test-minecraft-map
787 namespace: default
788 spec:
789 rules: null
790 `)
791
792 th.WriteK(th.GetRoot(), `
793 namespace: default
794 helmCharts:
795 - name: minecraft
796 repo: https://itzg.github.io/minecraft-server-charts
797 version: 4.11.0
798 releaseName: test
799 kubeVersion: "1.27"
800 valuesInline:
801 minecraftServer:
802 extraPorts:
803 - name: map
804 containerPort: 8123
805 protocol: TCP
806 service:
807 enabled: false
808 ingress:
809 enabled: true
810 `)
811
812 m = th.Run(th.GetRoot(), th.MakeOptionsPluginsEnabled())
813 th.AssertActualEqualsExpected(m, `
814 apiVersion: v1
815 data:
816 rcon-password: Q0hBTkdFTUUh
817 kind: Secret
818 metadata:
819 labels:
820 app: test-minecraft
821 app.kubernetes.io/instance: test-minecraft
822 app.kubernetes.io/name: minecraft
823 app.kubernetes.io/version: 4.11.0
824 chart: minecraft-4.11.0
825 heritage: Helm
826 release: test
827 name: test-minecraft-rcon
828 namespace: default
829 type: Opaque
830 ---
831 apiVersion: v1
832 data:
833 cf-api-key: Q0hBTkdFTUUh
834 kind: Secret
835 metadata:
836 labels:
837 app: test-minecraft
838 app.kubernetes.io/instance: test-minecraft
839 app.kubernetes.io/name: minecraft
840 app.kubernetes.io/version: 4.11.0
841 chart: minecraft-4.11.0
842 heritage: Helm
843 release: test
844 name: test-minecraft-curseforge
845 namespace: default
846 type: Opaque
847 ---
848 apiVersion: v1
849 kind: Service
850 metadata:
851 labels:
852 app: test-minecraft
853 app.kubernetes.io/instance: test-minecraft
854 app.kubernetes.io/name: minecraft
855 app.kubernetes.io/version: 4.11.0
856 chart: minecraft-4.11.0
857 heritage: Helm
858 release: test
859 name: test-minecraft
860 namespace: default
861 spec:
862 ports:
863 - name: minecraft
864 port: 25565
865 protocol: TCP
866 targetPort: minecraft
867 selector:
868 app: test-minecraft
869 type: ClusterIP
870 ---
871 apiVersion: networking.k8s.io/v1
872 kind: Ingress
873 metadata:
874 labels:
875 app: test-minecraft-map
876 app.kubernetes.io/instance: test-minecraft
877 app.kubernetes.io/name: minecraft
878 app.kubernetes.io/version: 4.11.0
879 chart: minecraft-4.11.0
880 heritage: Helm
881 release: test
882 name: test-minecraft-map
883 namespace: default
884 spec:
885 rules: null
886 `)
887 }
888
889 func copyValuesFilesTestChartsIntoHarness(t *testing.T, th *kusttest_test.HarnessEnhanced) {
890 t.Helper()
891
892 thDir := filepath.Join(th.GetRoot(), "charts")
893 chartDir := "testdata/helmcharts"
894
895 fs := th.GetFSys()
896 require.NoError(t, fs.MkdirAll(filepath.Join(thDir, "templates")))
897 require.NoError(t, copyutil.CopyDir(th.GetFSys(), chartDir, thDir))
898 }
899
View as plain text