@@ -192,6 +192,7 @@ func TestExtractPgVersionFromBinPath(t *testing.T) {
192192const (
193193 testPodEnvironmentConfigMapName = "pod_env_cm"
194194 testPodEnvironmentSecretName = "pod_env_sc"
195+ testCronjobEnvironmentSecretName = "pod_env_sc"
195196 testPodEnvironmentObjectNotExists = "idonotexist"
196197 testPodEnvironmentSecretNameAPIError = "pod_env_sc_apierror"
197198 testResourceCheckInterval = 3
@@ -448,6 +449,96 @@ func TestPodEnvironmentSecretVariables(t *testing.T) {
448449
449450}
450451
452+ // Test if the keys of an existing secret are properly referenced
453+ func TestCronjobEnvironmentSecretVariables (t * testing.T ) {
454+ testName := "TestCronjobEnvironmentSecretVariables"
455+ tests := []struct {
456+ subTest string
457+ opConfig config.Config
458+ envVars []v1.EnvVar
459+ err error
460+ }{
461+ {
462+ subTest : "No CronjobEnvironmentSecret configured" ,
463+ envVars : []v1.EnvVar {},
464+ },
465+ {
466+ subTest : "Secret referenced by CronjobEnvironmentSecret does not exist" ,
467+ opConfig : config.Config {
468+ LogicalBackup : config.LogicalBackup {
469+ LogicalBackupCronjobEnvironmentSecret : "idonotexist" ,
470+ },
471+ },
472+ err : fmt .Errorf ("could not read Secret CronjobEnvironmentSecretName: secret.core \" idonotexist\" not found" ),
473+ },
474+ {
475+ subTest : "Cronjob environment vars reference all keys from secret configured by CronjobEnvironmentSecret" ,
476+ opConfig : config.Config {
477+ LogicalBackup : config.LogicalBackup {
478+ LogicalBackupCronjobEnvironmentSecret : testCronjobEnvironmentSecretName ,
479+ },
480+ },
481+ envVars : []v1.EnvVar {
482+ {
483+ Name : "clone_aws_access_key_id" ,
484+ ValueFrom : & v1.EnvVarSource {
485+ SecretKeyRef : & v1.SecretKeySelector {
486+ LocalObjectReference : v1.LocalObjectReference {
487+ Name : testPodEnvironmentSecretName ,
488+ },
489+ Key : "clone_aws_access_key_id" ,
490+ },
491+ },
492+ },
493+ {
494+ Name : "custom_variable" ,
495+ ValueFrom : & v1.EnvVarSource {
496+ SecretKeyRef : & v1.SecretKeySelector {
497+ LocalObjectReference : v1.LocalObjectReference {
498+ Name : testPodEnvironmentSecretName ,
499+ },
500+ Key : "custom_variable" ,
501+ },
502+ },
503+ },
504+ {
505+ Name : "standby_google_application_credentials" ,
506+ ValueFrom : & v1.EnvVarSource {
507+ SecretKeyRef : & v1.SecretKeySelector {
508+ LocalObjectReference : v1.LocalObjectReference {
509+ Name : testPodEnvironmentSecretName ,
510+ },
511+ Key : "standby_google_application_credentials" ,
512+ },
513+ },
514+ },
515+ },
516+ },
517+ }
518+
519+ for _ , tt := range tests {
520+ c := newMockCluster (tt .opConfig )
521+ vars , err := c .getCronjobEnvironmentSecretVariables ()
522+ sort .Slice (vars , func (i , j int ) bool { return vars [i ].Name < vars [j ].Name })
523+ if ! reflect .DeepEqual (vars , tt .envVars ) {
524+ t .Errorf ("%s %s: expected `%v` but got `%v`" ,
525+ testName , tt .subTest , tt .envVars , vars )
526+ }
527+ if tt .err != nil {
528+ if err .Error () != tt .err .Error () {
529+ t .Errorf ("%s %s: expected error `%v` but got `%v`" ,
530+ testName , tt .subTest , tt .err , err )
531+ }
532+ } else {
533+ if err != nil {
534+ t .Errorf ("%s %s: expected no error but got error: `%v`" ,
535+ testName , tt .subTest , err )
536+ }
537+ }
538+ }
539+
540+ }
541+
451542func testEnvs (cluster * Cluster , podSpec * v1.PodTemplateSpec , role PostgresRole ) error {
452543 required := map [string ]bool {
453544 "PGHOST" : false ,
0 commit comments