@@ -16,6 +16,7 @@ import (
1616
1717 "github.com/crunchydata/postgres-operator/internal/naming"
1818 "github.com/crunchydata/postgres-operator/internal/testing/cmp"
19+ "github.com/crunchydata/postgres-operator/pkg/apis/postgres-operator.crunchydata.com/v1beta1"
1920)
2021
2122func TestSafeHash32 (t * testing.T ) {
@@ -378,3 +379,166 @@ func TestJobFailed(t *testing.T) {
378379 })
379380 }
380381}
382+
383+ func TestAddAdditionalVolumesToSpecifiedContainers (t * testing.T ) {
384+
385+ podTemplate := & corev1.PodTemplateSpec {
386+ Spec : corev1.PodSpec {
387+ InitContainers : []corev1.Container {
388+ {Name : "startup" },
389+ {Name : "config" },
390+ },
391+ Containers : []corev1.Container {
392+ {Name : "database" },
393+ {Name : "other" },
394+ }}}
395+
396+ testCases := []struct {
397+ tcName string
398+ additionalVolumes []* v1beta1.AdditionalVolume
399+ expectedContainers string
400+ expectedInitContainers string
401+ expectedVolumes string
402+ }{{
403+ tcName : "all" ,
404+ additionalVolumes : []* v1beta1.AdditionalVolume {{
405+ Containers : []string {},
406+ ClaimName : "required" ,
407+ Name : "required" ,
408+ }},
409+ expectedContainers : `- name: database
410+ resources: {}
411+ volumeMounts:
412+ - mountPath: /volumes/required
413+ name: required
414+ - name: other
415+ resources: {}
416+ volumeMounts:
417+ - mountPath: /volumes/required
418+ name: required` ,
419+ expectedInitContainers : `- name: startup
420+ resources: {}
421+ volumeMounts:
422+ - mountPath: /volumes/required
423+ name: required
424+ - name: config
425+ resources: {}
426+ volumeMounts:
427+ - mountPath: /volumes/required
428+ name: required` ,
429+ expectedVolumes : `- name: required
430+ persistentVolumeClaim:
431+ claimName: required` ,
432+ }, {
433+ tcName : "multiple additional volumes" ,
434+ additionalVolumes : []* v1beta1.AdditionalVolume {{
435+ Containers : []string {},
436+ ClaimName : "required" ,
437+ Name : "required" ,
438+ }, {
439+ Containers : []string {},
440+ ClaimName : "also" ,
441+ Name : "other" ,
442+ }},
443+ expectedContainers : `- name: database
444+ resources: {}
445+ volumeMounts:
446+ - mountPath: /volumes/required
447+ name: required
448+ - mountPath: /volumes/other
449+ name: also
450+ - name: other
451+ resources: {}
452+ volumeMounts:
453+ - mountPath: /volumes/required
454+ name: required
455+ - mountPath: /volumes/other
456+ name: also` ,
457+ expectedInitContainers : `- name: startup
458+ resources: {}
459+ volumeMounts:
460+ - mountPath: /volumes/required
461+ name: required
462+ - mountPath: /volumes/other
463+ name: also
464+ - name: config
465+ resources: {}
466+ volumeMounts:
467+ - mountPath: /volumes/required
468+ name: required
469+ - mountPath: /volumes/other
470+ name: also` ,
471+ expectedVolumes : `- name: required
472+ persistentVolumeClaim:
473+ claimName: required
474+ - name: also
475+ persistentVolumeClaim:
476+ claimName: also` ,
477+ }, {
478+ tcName : "database container only" ,
479+ additionalVolumes : []* v1beta1.AdditionalVolume {{
480+ Containers : []string {"database" },
481+ ClaimName : "required" ,
482+ Name : "required" ,
483+ }},
484+ expectedContainers : `- name: database
485+ resources: {}
486+ volumeMounts:
487+ - mountPath: /volumes/required
488+ name: required
489+ - name: other
490+ resources: {}` ,
491+ expectedInitContainers : `- name: startup
492+ resources: {}
493+ - name: config
494+ resources: {}` ,
495+ expectedVolumes : `- name: required
496+ persistentVolumeClaim:
497+ claimName: required` ,
498+ }, {
499+ tcName : "readonly" ,
500+ additionalVolumes : []* v1beta1.AdditionalVolume {{
501+ Containers : []string {"database" },
502+ ClaimName : "required" ,
503+ Name : "required" ,
504+ ReadOnly : true ,
505+ }},
506+ expectedContainers : `- name: database
507+ resources: {}
508+ volumeMounts:
509+ - mountPath: /volumes/required
510+ name: required
511+ - name: other
512+ resources: {}` ,
513+ expectedInitContainers : `- name: startup
514+ resources: {}
515+ - name: config
516+ resources: {}` ,
517+ expectedVolumes : `- name: required
518+ persistentVolumeClaim:
519+ claimName: required
520+ readOnly: true` ,
521+ }}
522+
523+ for _ , tc := range testCases {
524+ t .Run (tc .tcName , func (t * testing.T ) {
525+
526+ copyPodTemplate := podTemplate .DeepCopy ()
527+
528+ addAdditionalVolumesToSpecifiedContainers (
529+ copyPodTemplate ,
530+ tc .additionalVolumes ,
531+ )
532+
533+ assert .Assert (t , cmp .MarshalMatches (
534+ copyPodTemplate .Spec .Containers ,
535+ tc .expectedContainers ))
536+ assert .Assert (t , cmp .MarshalMatches (
537+ copyPodTemplate .Spec .InitContainers ,
538+ tc .expectedInitContainers ))
539+ assert .Assert (t , cmp .MarshalMatches (
540+ copyPodTemplate .Spec .Volumes ,
541+ tc .expectedVolumes ))
542+ })
543+ }
544+ }
0 commit comments