@@ -2,6 +2,7 @@ package controllers
22
33import (
44 "context"
5+ "fmt"
56 "reflect"
67 "time"
78
@@ -217,7 +218,7 @@ var _ = Describe("SyncedSecret Controller", func() {
217218 })
218219 })
219220
220- Context ("For a single SyncedSecret with AWSAccountID" , func () {
221+ Context ("For a single SyncedSecret (using Data) with AWSAccountID" , func () {
221222 // TODO do a test for DataFrom as well
222223 secretKey := types.NamespacedName {
223224 Name : "another-secret-name" ,
@@ -415,4 +416,211 @@ var _ = Describe("SyncedSecret Controller", func() {
415416 }, timeout , interval ).Should (BeTrue ())
416417 })
417418 })
419+
420+ Context ("For a single SyncedSecret (using DataFrom) with AWSAccountID" , func () {
421+ // TODO do a test for DataFrom as well
422+ secretKey := types.NamespacedName {
423+ Name : "secret-name-from-data" ,
424+ Namespace : TEST_NAMESPACE2 ,
425+ }
426+
427+ resourceVersion := ""
428+
429+ It ("Should Create K8S Secrets for SyncedSecret (using Data) CRD with AWSAccountID" , func () {
430+ MockSecretsOutput .SecretsValueOutput = & secretsmanager.GetSecretValueOutput {
431+ SecretString : _s (`{"database_name":"secretDB","database_pass":"cupofcoffee", "database_name1":"secretDB02"}` ),
432+ VersionId : _s (`005` ),
433+ }
434+
435+ toCreate := & secretsv1.SyncedSecret {
436+ ObjectMeta : metav1.ObjectMeta {
437+ Name : secretKey .Name ,
438+ Namespace : secretKey .Namespace ,
439+ ResourceVersion : resourceVersion ,
440+ },
441+ Spec : secretsv1.SyncedSecretSpec {
442+ SecretMetadata : metav1.ObjectMeta {
443+ Name : secretKey .Name ,
444+ Namespace : secretKey .Namespace ,
445+ },
446+ AWSAccountID : _s ("12345678910" ),
447+ IAMRole : _s ("test" ), // TODO Make this optional in CRD
448+ DataFrom : & secretsv1.DataFrom {
449+ SecretRef : & secretsv1.SecretRef {
450+ Name : _s ("random/aws/secret004" ),
451+ },
452+ },
453+ // Data: []*secretsv1.SecretField{
454+ // {
455+ // Name: _s("DB_NAME"),
456+ // ValueFrom: &secretsv1.ValueFrom{
457+ // SecretKeyRef: &secretsv1.SecretKeyRef{
458+ // Name: _s("random/aws/secret004"),
459+ // Key: _s("database_name"),
460+ // },
461+ // },
462+ // },
463+ // {
464+ // Name: _s("DB_PASS"),
465+ // ValueFrom: &secretsv1.ValueFrom{
466+ // SecretKeyRef: &secretsv1.SecretKeyRef{
467+ // Name: _s("random/aws/secret004"),
468+ // Key: _s("database_pass"),
469+ // },
470+ // },
471+ // },
472+ // },
473+ },
474+ }
475+ secretExpect := & corev1.Secret {
476+ ObjectMeta : metav1.ObjectMeta {
477+ Name : secretKey .Name ,
478+ Namespace : secretKey .Namespace ,
479+ },
480+ Type : "Opaque" ,
481+ Data : map [string ][]byte {
482+ "DB_NAME" : []byte ("secretDB" ),
483+ "DB_PASS" : []byte ("cupofcoffee" ),
484+ },
485+ }
486+ err := k8sClient .Create (context .Background (), toCreate )
487+ Expect (err ).ToNot (HaveOccurred ())
488+
489+ fetchedSecret := & corev1.Secret {}
490+ Eventually (func () bool {
491+ err := k8sClient .Get (context .Background (), secretKey , fetchedSecret )
492+ return k8serrors .IsNotFound (err )
493+ }, timeout , interval ).Should (BeFalse ())
494+
495+ fmt .Printf ("fetchedSecret.Data %v" , fetchedSecret .Data )
496+ fmt .Printf ("secretExpect.Data %v" , fetchedSecret .Data )
497+
498+ // we need to ensure that that secretExpect.Data is a subset of fetchedSecret.Data
499+ // the kubernetes client.go doesn't base64 values this is something that kubectl maybe does
500+ Expect (reflect .DeepEqual (fetchedSecret .Data , secretExpect .Data )).To (BeTrue ())
501+
502+ fetchedCfSecret := & secretsv1.SyncedSecret {}
503+ err = k8sClient .Get (context .Background (), secretKey , fetchedCfSecret )
504+ Expect (err ).ToNot (HaveOccurred ())
505+ resourceVersion = fetchedCfSecret .ResourceVersion
506+
507+ })
508+
509+ // It("Should update k8s secret object if there is change in AwsSecret CRD with AWSAccountID", func() {
510+ // MockSecretsOutput.SecretsValueOutput = &secretsmanager.GetSecretValueOutput{
511+ // SecretString: _s(`{"database_name":"secretDB","database_pass":"cupofcoffee", "database_name1":"secretDB02"}`),
512+ // VersionId: _s(`005`),
513+ // }
514+ // toUpdate := &secretsv1.SyncedSecret{
515+ // ObjectMeta: metav1.ObjectMeta{
516+ // Name: secretKey.Name,
517+ // Namespace: secretKey.Namespace,
518+ // ResourceVersion: resourceVersion,
519+ // },
520+ // Spec: secretsv1.SyncedSecretSpec{
521+ // SecretMetadata: metav1.ObjectMeta{
522+ // Name: secretKey.Name,
523+ // Namespace: secretKey.Namespace,
524+ // },
525+ // IAMRole: _s("test"),
526+ // AWSAccountID: _s("12345678910"),
527+ // Data: []*secretsv1.SecretField{
528+ // {
529+ // Name: _s("DB_NAME"),
530+ // ValueFrom: &secretsv1.ValueFrom{
531+ // SecretKeyRef: &secretsv1.SecretKeyRef{
532+ // Name: _s("random/aws/secret003"),
533+ // Key: _s("database_name1"),
534+ // },
535+ // },
536+ // },
537+ // {
538+ // Name: _s("DB_PASS"),
539+ // ValueFrom: &secretsv1.ValueFrom{
540+ // SecretKeyRef: &secretsv1.SecretKeyRef{
541+ // Name: _s("random/aws/secret003"),
542+ // Key: _s("database_pass"),
543+ // },
544+ // },
545+ // },
546+ // },
547+ // },
548+ // }
549+
550+ // secretExpect := &corev1.Secret{
551+ // ObjectMeta: metav1.ObjectMeta{
552+ // Name: secretKey.Name,
553+ // Namespace: secretKey.Namespace,
554+ // },
555+ // Type: "Opaque",
556+ // Data: map[string][]byte{
557+ // "DB_NAME": []byte("secretDB02"),
558+ // "DB_PASS": []byte("cupofcoffee"),
559+ // },
560+ // }
561+
562+ // Expect(k8sClient.Update(context.Background(), toUpdate)).Should(Succeed())
563+
564+ // fetchedSecret := &corev1.Secret{}
565+ // Eventually(func() bool {
566+ // k8sClient.Get(context.Background(), secretKey, fetchedSecret)
567+ // return reflect.DeepEqual(fetchedSecret.Data, secretExpect.Data)
568+ // }, timeout, interval).Should(BeTrue())
569+
570+ // fetchedCfSecret := &secretsv1.SyncedSecret{}
571+ // err := k8sClient.Get(context.Background(), secretKey, fetchedCfSecret)
572+ // Expect(err).ToNot(HaveOccurred())
573+ // resourceVersion = fetchedCfSecret.ResourceVersion
574+ // })
575+
576+ // It("Should update the k8s secret object if the mapped AWS Secret changes with AWSAccountID", func() {
577+ // MockSecretsOutput.SecretsValueOutput = &secretsmanager.GetSecretValueOutput{
578+ // SecretString: _s(`{"database_pass":"cupoftea", "database_name1":"secretDB02"}`),
579+ // VersionId: _s(`006`),
580+ // }
581+
582+ // MockSecretsOutput.SecretsPageOutput = &secretsmanager.ListSecretsOutput{
583+ // SecretList: []*secretsmanager.SecretListEntry{
584+ // {
585+ // Name: _s("random/aws/secret003"),
586+ // LastChangedDate: _t(time_now.AddDate(0, 0, -2)),
587+ // SecretVersionsToStages: map[string][]*string{
588+ // "002": []*string{
589+ // _s("AWSCURRENT"),
590+ // },
591+ // },
592+ // }, {
593+ // Name: _s("random/aws/secret003"),
594+ // LastChangedDate: _t(time_now.AddDate(0, 0, -1)),
595+ // SecretVersionsToStages: map[string][]*string{
596+ // "005": {
597+ // _s("AWSPREVIOUS"),
598+ // },
599+ // "006": {
600+ // _s("AWSCURRENT"),
601+ // },
602+ // },
603+ // },
604+ // },
605+ // }
606+
607+ // secretExpect := &corev1.Secret{
608+ // ObjectMeta: metav1.ObjectMeta{
609+ // Name: secretKey.Name,
610+ // Namespace: secretKey.Namespace,
611+ // },
612+ // Type: "Opaque",
613+ // Data: map[string][]byte{
614+ // "DB_NAME": []byte("secretDB02"),
615+ // "DB_PASS": []byte("cupoftea"),
616+ // },
617+ // }
618+
619+ // fetchedSecret := &corev1.Secret{}
620+ // Eventually(func() bool {
621+ // k8sClient.Get(context.Background(), secretKey, fetchedSecret)
622+ // return reflect.DeepEqual(fetchedSecret.Data, secretExpect.Data)
623+ // }, timeout, interval).Should(BeTrue())
624+ // })
625+ })
418626})
0 commit comments