github.com/redhat-appstudio/e2e-tests@v0.0.0-20240520140907-9709f6f59323/tests/remote-secret/service-account-auth.go (about) 1 package remotesecret 2 3 import ( 4 "fmt" 5 "time" 6 7 "github.com/devfile/library/v2/pkg/util" 8 . "github.com/onsi/ginkgo/v2" 9 . "github.com/onsi/gomega" 10 "github.com/redhat-appstudio/e2e-tests/pkg/framework" 11 "github.com/redhat-appstudio/e2e-tests/pkg/utils" 12 "github.com/redhat-appstudio/remote-secret/api/v1beta1" 13 v1 "k8s.io/api/core/v1" 14 "k8s.io/apimachinery/pkg/api/meta" 15 ) 16 17 /* 18 * Component: remote secret 19 * Description: SVPI-558 - Test all the options of the authz of remote secret target deployment 20 * Test case: Authentication using Service Account 21 */ 22 23 var _ = framework.RemoteSecretSuiteDescribe(Label("remote-secret", "service-account-auth"), func() { 24 25 defer GinkgoRecover() 26 27 var fw *framework.Framework 28 var err error 29 var namespace string 30 var remoteSecret *v1beta1.RemoteSecret 31 targetNamespace1 := fmt.Sprintf("spi-test-target1-%s", util.GenerateRandomString(4)) 32 targetNamespace2 := fmt.Sprintf("spi-test-target2-%s", util.GenerateRandomString(4)) 33 remoteSecretName := "test-remote-secret" 34 targetSecretName1 := "" 35 targetSecretName2 := "" 36 serviceAccountName := fmt.Sprintf("deployment-enabler-%s", util.GenerateRandomString(4)) 37 roleName := fmt.Sprintf("deployment-enabler-%s", util.GenerateRandomString(4)) 38 roleBindingName := fmt.Sprintf("deployment-enabler-%s", util.GenerateRandomString(4)) 39 AfterEach(framework.ReportFailure(&fw)) 40 41 Describe("SVPI-558 - Authentication using Service Account", Ordered, func() { 42 BeforeAll(func() { 43 // Initialize the tests controllers 44 fw, err = framework.NewFramework(utils.GetGeneratedNamespace("rs-demos")) 45 Expect(err).NotTo(HaveOccurred()) 46 namespace = fw.UserNamespace 47 Expect(namespace).NotTo(BeEmpty()) 48 49 _, err = fw.AsKubeAdmin.CommonController.CreateTestNamespace(targetNamespace1) 50 Expect(err).NotTo(HaveOccurred(), "Error when creating %s namespace: %v", targetNamespace1, err) 51 52 _, err = fw.AsKubeAdmin.CommonController.CreateTestNamespace(targetNamespace2) 53 Expect(err).NotTo(HaveOccurred(), "Error when creating %s namespace: %v", targetNamespace2, err) 54 }) 55 56 AfterAll(func() { 57 if !CurrentSpecReport().Failed() { 58 Expect(fw.SandboxController.DeleteUserSignup(fw.UserName)).To(BeTrue()) 59 Expect(fw.AsKubeAdmin.CommonController.DeleteNamespace(targetNamespace1)).To(Succeed()) 60 Expect(fw.AsKubeAdmin.CommonController.DeleteNamespace(targetNamespace2)).To(Succeed()) 61 } 62 }) 63 64 It("creates RemoteSecret with previously created namespaces as targets", func() { 65 targets := []v1beta1.RemoteSecretTarget{{Namespace: targetNamespace1}, {Namespace: targetNamespace2}} 66 remoteSecret, err = fw.AsKubeDeveloper.RemoteSecretController.CreateRemoteSecret(remoteSecretName, namespace, targets, v1.SecretTypeOpaque, map[string]string{}) 67 Expect(err).NotTo(HaveOccurred()) 68 69 Eventually(func() bool { 70 remoteSecret, err = fw.AsKubeDeveloper.RemoteSecretController.GetRemoteSecret(remoteSecretName, namespace) 71 Expect(err).NotTo(HaveOccurred()) 72 73 return meta.IsStatusConditionFalse(remoteSecret.Status.Conditions, "DataObtained") 74 }, 5*time.Minute, 5*time.Second).Should(BeTrue(), fmt.Sprintf("RemoteSecret %s/%s is not waiting for data", namespace, remoteSecretName)) 75 }) 76 77 It("creates service account", func() { 78 labels := map[string]string{"appstudio.redhat.com/remotesecret-auth-sa": "true"} 79 _, err := fw.AsKubeAdmin.CommonController.CreateServiceAccount(serviceAccountName, namespace, nil, labels) 80 Expect(err).NotTo(HaveOccurred()) 81 }) 82 83 It("creates role for target 1", func() { 84 _, err := fw.AsKubeAdmin.CommonController.CreateRole(roleName, targetNamespace1, map[string][]string{ 85 "apiGroupsList": {""}, 86 "roleResources": {"secrets", "serviceaccounts"}, 87 "roleVerbs": {"create", "get", "list", "update", "delete"}, 88 }) 89 Expect(err).NotTo(HaveOccurred()) 90 91 _, err = fw.AsKubeAdmin.CommonController.GetRole(roleName, targetNamespace1) 92 Expect(err).NotTo(HaveOccurred()) 93 }) 94 95 It("creates role for target 2", func() { 96 _, err := fw.AsKubeAdmin.CommonController.CreateRole(roleName, targetNamespace2, map[string][]string{ 97 "apiGroupsList": {""}, 98 "roleResources": {"secrets", "serviceaccounts"}, 99 "roleVerbs": {"create", "get", "list", "update", "delete"}, 100 }) 101 Expect(err).NotTo(HaveOccurred()) 102 103 _, err = fw.AsKubeAdmin.CommonController.GetRole(roleName, targetNamespace2) 104 Expect(err).NotTo(HaveOccurred()) 105 }) 106 107 It("creates role binding for target 1", func() { 108 _, err := fw.AsKubeAdmin.CommonController.CreateRoleBinding( 109 roleBindingName, targetNamespace1, 110 "ServiceAccount", serviceAccountName, namespace, 111 "Role", roleName, "rbac.authorization.k8s.io", 112 ) 113 Expect(err).NotTo(HaveOccurred()) 114 }) 115 116 It("creates role binding for target 2", func() { 117 _, err := fw.AsKubeAdmin.CommonController.CreateRoleBinding( 118 roleBindingName, targetNamespace2, 119 "ServiceAccount", serviceAccountName, namespace, 120 "Role", roleName, "rbac.authorization.k8s.io", 121 ) 122 Expect(err).NotTo(HaveOccurred()) 123 }) 124 125 It("creates upload secret", func() { 126 data := map[string]string{"a": "b", "c": "d"} 127 128 _, err = fw.AsKubeAdmin.RemoteSecretController.CreateUploadSecret(remoteSecret.Name, namespace, remoteSecret.Name, v1.SecretTypeOpaque, data) 129 Expect(err).NotTo(HaveOccurred()) 130 }) 131 132 It("checks if remote secret was deployed", func() { 133 Eventually(func() bool { 134 remoteSecret, err = fw.AsKubeDeveloper.RemoteSecretController.GetRemoteSecret(remoteSecretName, namespace) 135 Expect(err).NotTo(HaveOccurred()) 136 137 return meta.IsStatusConditionTrue(remoteSecret.Status.Conditions, "Deployed") 138 }, 5*time.Minute, 5*time.Second).Should(BeTrue(), fmt.Sprintf("RemoteSecret %s/%s is not in deployed phase", namespace, remoteSecretName)) 139 }) 140 141 It("checks targets in RemoteSecret status", func() { 142 remoteSecret, err = fw.AsKubeDeveloper.RemoteSecretController.GetRemoteSecret(remoteSecret.Name, namespace) 143 Expect(err).NotTo(HaveOccurred()) 144 145 targets := remoteSecret.Status.Targets 146 Expect(targets).To(HaveLen(2)) 147 148 // get targetSecretName1 149 targetSecretName1 = fw.AsKubeDeveloper.RemoteSecretController.GetTargetSecretName(targets, targetNamespace1) 150 Expect(targetSecretName1).ToNot(BeEmpty()) 151 152 // get targetSecretName12 153 targetSecretName2 = fw.AsKubeDeveloper.RemoteSecretController.GetTargetSecretName(targets, targetNamespace2) 154 Expect(targetSecretName2).ToNot(BeEmpty()) 155 }) 156 157 It("checks if secret was created in target namespaces", func() { 158 _, err = fw.AsKubeAdmin.CommonController.GetSecret(targetNamespace1, targetSecretName1) 159 Expect(err).NotTo(HaveOccurred()) 160 161 _, err = fw.AsKubeAdmin.CommonController.GetSecret(targetNamespace2, targetSecretName2) 162 Expect(err).NotTo(HaveOccurred()) 163 }) 164 }) 165 })