github.com/redhat-appstudio/e2e-tests@v0.0.0-20230619105049-9a422b2094d7/tests/release/e2e-test-default-with-deployment.go (about) 1 package release 2 3 import ( 4 "fmt" 5 "os" 6 "strings" 7 8 . "github.com/onsi/ginkgo/v2" 9 . "github.com/onsi/gomega" 10 appservice "github.com/redhat-appstudio/application-api/api/v1alpha1" 11 "github.com/redhat-appstudio/e2e-tests/pkg/constants" 12 "github.com/redhat-appstudio/e2e-tests/pkg/framework" 13 "github.com/redhat-appstudio/e2e-tests/pkg/utils" 14 "github.com/redhat-appstudio/e2e-tests/pkg/utils/release" 15 "github.com/redhat-appstudio/e2e-tests/pkg/utils/tekton" 16 releaseApi "github.com/redhat-appstudio/release-service/api/v1alpha1" 17 "gopkg.in/yaml.v2" 18 "knative.dev/pkg/apis" 19 20 ecp "github.com/enterprise-contract/enterprise-contract-controller/api/v1alpha1" 21 corev1 "k8s.io/api/core/v1" 22 ) 23 24 var _ = framework.ReleaseSuiteDescribe("[HACBS-1199]test-release-e2e-with-deployment", Label("release", "withDeployment", "HACBS"), func() { 25 defer GinkgoRecover() 26 // Initialize the tests controllers 27 var fw *framework.Framework 28 var err error 29 var compName string 30 var devNamespace = utils.GetGeneratedNamespace("release-dev") 31 var managedNamespace = utils.GetGeneratedNamespace("release-managed") 32 var component *appservice.Component 33 34 BeforeAll(func() { 35 fw, err = framework.NewFramework("release-e2e-bundle") 36 Expect(err).NotTo(HaveOccurred()) 37 38 kubeController := tekton.KubeController{ 39 Commonctrl: *fw.AsKubeAdmin.CommonController, 40 Tektonctrl: *fw.AsKubeAdmin.TektonController, 41 } 42 43 _, err := fw.AsKubeAdmin.CommonController.CreateTestNamespace(devNamespace) 44 Expect(err).NotTo(HaveOccurred(), "Error when creating devNamespace: %v", err) 45 GinkgoWriter.Println("Dev Namespace created: %s ", devNamespace) 46 47 _, err = fw.AsKubeAdmin.CommonController.CreateTestNamespace(managedNamespace) 48 Expect(err).NotTo(HaveOccurred(), "Error when creating managedNamespace: %v", err) 49 GinkgoWriter.Println("Managed Namespace created: %s ", managedNamespace) 50 51 sourceAuthJson := utils.GetEnv("QUAY_TOKEN", "") 52 Expect(sourceAuthJson).ToNot(BeEmpty()) 53 54 _, err = fw.AsKubeAdmin.CommonController.CreateRegistryAuthSecret(hacbsReleaseTestsTokenSecret, devNamespace, sourceAuthJson) 55 Expect(err).ToNot(HaveOccurred()) 56 57 _, err = fw.AsKubeAdmin.CommonController.CreateRegistryAuthSecret(redhatAppstudioUserSecret, managedNamespace, sourceAuthJson) 58 Expect(err).ToNot(HaveOccurred()) 59 60 err = fw.AsKubeAdmin.CommonController.LinkSecretToServiceAccount(devNamespace, hacbsReleaseTestsTokenSecret, serviceAccount, true) 61 Expect(err).ToNot(HaveOccurred()) 62 63 publicKey, err := kubeController.GetTektonChainsPublicKey() 64 Expect(err).ToNot(HaveOccurred()) 65 66 Expect(kubeController.CreateOrUpdateSigningSecret( 67 publicKey, publicSecretNameAuth, managedNamespace)).To(Succeed()) 68 69 defaultEcPolicy, err := kubeController.GetEnterpriseContractPolicy("default", "enterprise-contract-service") 70 Expect(err).NotTo(HaveOccurred()) 71 72 defaultEcPolicySpec := ecp.EnterpriseContractPolicySpec{ 73 Description: "Red Hat's enterprise requirements", 74 PublicKey: string(publicKey), 75 Sources: defaultEcPolicy.Spec.Sources, 76 Configuration: &ecp.EnterpriseContractPolicyConfiguration{ 77 Collections: []string{"minimal"}, 78 Exclude: []string{"cve"}, 79 }, 80 } 81 82 // using cdq since git ref is not known 83 compName = componentName 84 var componentDetected appservice.ComponentDetectionDescription 85 cdq, err := fw.AsKubeAdmin.HasController.CreateComponentDetectionQuery(compName, devNamespace, gitSourceComponentUrl, "", "", "", false) 86 Expect(err).NotTo(HaveOccurred()) 87 Expect(len(cdq.Status.ComponentDetected)).To(Equal(1), "Expected length of the detected Components was not 1") 88 89 for _, compDetected := range cdq.Status.ComponentDetected { 90 compName = compDetected.ComponentStub.ComponentName 91 componentDetected = compDetected 92 } 93 94 _, err = fw.AsKubeAdmin.ReleaseController.CreateReleasePlan(sourceReleasePlanName, devNamespace, applicationNameDefault, managedNamespace, "") 95 Expect(err).NotTo(HaveOccurred()) 96 97 components := []release.Component{{Name: compName, Repository: releasedImagePushRepo}} 98 sc := fw.AsKubeAdmin.ReleaseController.GenerateReleaseStrategyConfig(components) 99 scYaml, err := yaml.Marshal(sc) 100 Expect(err).ShouldNot(HaveOccurred()) 101 102 scPath := "release-default-with-deployment.yaml" 103 Expect(fw.AsKubeAdmin.CommonController.Github.CreateRef("strategy-configs", "main", compName)).To(Succeed()) 104 _, err = fw.AsKubeAdmin.CommonController.Github.CreateFile("strategy-configs", scPath, string(scYaml), compName) 105 Expect(err).ShouldNot(HaveOccurred()) 106 107 _, err = fw.AsKubeAdmin.ReleaseController.CreateReleaseStrategy("mvp-deploy-strategy", managedNamespace, "deploy-release", "quay.io/hacbs-release/pipeline-deploy-release:0.3", releaseStrategyPolicyDefault, releaseStrategyServiceAccountDefault, []releaseApi.Params{ 108 {Name: "extraConfigGitUrl", Value: fmt.Sprintf("https://github.com/%s/strategy-configs.git", utils.GetEnv(constants.GITHUB_E2E_ORGANIZATION_ENV, "redhat-appstudio-qe"))}, 109 {Name: "extraConfigPath", Value: scPath}, 110 {Name: "extraConfigGitRevision", Value: compName}, 111 }) 112 Expect(err).NotTo(HaveOccurred()) 113 114 _, err = fw.AsKubeAdmin.GitOpsController.CreateEnvironment(releaseEnvironment, managedNamespace) 115 Expect(err).NotTo(HaveOccurred()) 116 117 _, err = fw.AsKubeAdmin.ReleaseController.CreateReleasePlanAdmission(targetReleasePlanAdmissionName, devNamespace, applicationNameDefault, managedNamespace, releaseEnvironment, "", "mvp-deploy-strategy") 118 Expect(err).NotTo(HaveOccurred()) 119 120 _, err = fw.AsKubeAdmin.TektonController.CreateEnterpriseContractPolicy(releaseStrategyPolicyDefault, managedNamespace, defaultEcPolicySpec) 121 Expect(err).NotTo(HaveOccurred()) 122 123 _, err = fw.AsKubeAdmin.TektonController.CreatePVCInAccessMode(releasePvcName, managedNamespace, corev1.ReadWriteOnce) 124 Expect(err).NotTo(HaveOccurred()) 125 126 _, err = fw.AsKubeAdmin.CommonController.CreateServiceAccount(releaseStrategyServiceAccountDefault, managedNamespace, managednamespaceSecret) 127 Expect(err).NotTo(HaveOccurred()) 128 129 _, err = fw.AsKubeAdmin.CommonController.CreateRole("role-release-service-account", managedNamespace, map[string][]string{ 130 "apiGroupsList": {""}, 131 "roleResources": {"secrets"}, 132 "roleVerbs": {"get", "list", "watch"}, 133 }) 134 Expect(err).NotTo(HaveOccurred()) 135 136 _, err = fw.AsKubeAdmin.CommonController.CreateRoleBinding("role-release-service-account-binding", managedNamespace, "ServiceAccount", releaseStrategyServiceAccountDefault, "Role", "role-release-service-account", "rbac.authorization.k8s.io") 137 Expect(err).NotTo(HaveOccurred()) 138 139 _, err = fw.AsKubeAdmin.HasController.CreateHasApplication(applicationNameDefault, devNamespace) 140 Expect(err).NotTo(HaveOccurred()) 141 142 component, err = fw.AsKubeAdmin.HasController.CreateComponentFromStub(componentDetected, devNamespace, "", "", applicationNameDefault) 143 Expect(err).NotTo(HaveOccurred()) 144 145 workingDir, err := os.Getwd() 146 if err != nil { 147 GinkgoWriter.Printf(err.Error()) 148 } 149 150 // Download copy-applications.sh script from release-utils repo 151 args := []string{"https://raw.githubusercontent.com/hacbs-release/release-utils/main/copy-application.sh", "-o", "copy-application.sh"} 152 err = utils.ExecuteCommandInASpecificDirectory("curl", args, workingDir) 153 Expect(err).NotTo(HaveOccurred()) 154 155 args = []string{"775", "copy-application.sh"} 156 err = utils.ExecuteCommandInASpecificDirectory("chmod", args, workingDir) 157 Expect(err).NotTo(HaveOccurred()) 158 159 // Copying application in dev namespace to managed namespace 160 args = []string{managedNamespace, "-a", devNamespace + "/" + applicationNameDefault} 161 err = utils.ExecuteCommandInASpecificDirectory("./copy-application.sh", args, workingDir) 162 Expect(err).NotTo(HaveOccurred()) 163 164 }) 165 166 AfterAll(func() { 167 err = fw.AsKubeAdmin.CommonController.Github.DeleteRef("strategy-configs", compName) 168 if err != nil { 169 Expect(err.Error()).To(ContainSubstring("Reference does not exist")) 170 } 171 // TODO: Uncomment this lines once: https://issues.redhat.com/browse/RHTAPBUGS-409 is solved 172 /*if !CurrentSpecReport().Failed() { 173 Expect(fw.AsKubeAdmin.CommonController.DeleteNamespace(devNamespace)).NotTo(HaveOccurred()) 174 Expect(fw.AsKubeAdmin.CommonController.DeleteNamespace(managedNamespace)).NotTo(HaveOccurred()) 175 }*/ 176 }) 177 178 var _ = Describe("Post-release verification", func() { 179 180 It("verifies that a build PipelineRun is created in dev namespace and succeeds", func() { 181 Expect(fw.AsKubeAdmin.HasController.WaitForComponentPipelineToBeFinished(component, "", 2)).To(Succeed()) 182 }) 183 184 It("verifies that in managed namespace will be created a PipelineRun.", func() { 185 Eventually(func() bool { 186 prList, err := fw.AsKubeAdmin.TektonController.ListAllPipelineRuns(managedNamespace) 187 if err != nil || prList == nil || len(prList.Items) < 1 { 188 return false 189 } 190 191 return strings.Contains(prList.Items[0].Name, "release") 192 }, releasePipelineRunCreationTimeout, defaultInterval).Should(BeTrue()) 193 }) 194 195 It("verifies a PipelineRun started in managed namespace succeeded.", func() { 196 Eventually(func() bool { 197 prList, err := fw.AsKubeAdmin.TektonController.ListAllPipelineRuns(managedNamespace) 198 if prList == nil || err != nil || len(prList.Items) < 1 { 199 return false 200 } 201 202 return prList.Items[0].HasStarted() && prList.Items[0].IsDone() && prList.Items[0].Status.GetCondition(apis.ConditionSucceeded).IsTrue() 203 }, releasePipelineRunCompletionTimeout, defaultInterval).Should(BeTrue()) 204 }) 205 206 It("tests a Release should have been created in the dev namespace and succeeded.", func() { 207 Eventually(func() bool { 208 releaseCreated, err := fw.AsKubeAdmin.ReleaseController.GetFirstReleaseInNamespace(devNamespace) 209 if releaseCreated == nil || err != nil { 210 return false 211 } 212 213 return releaseCreated.IsReleased() 214 }, releaseCreationTimeout, defaultInterval).Should(BeTrue()) 215 }) 216 }) 217 218 It("tests a Release should report the deployment was successful.", func() { 219 Eventually(func() bool { 220 releaseCreated, err := fw.AsKubeAdmin.ReleaseController.GetFirstReleaseInNamespace(devNamespace) 221 if releaseCreated == nil || err != nil || len(releaseCreated.Status.Conditions) < 2 { 222 return false 223 } 224 225 return releaseCreated.IsDeployed() 226 }, releaseCreationTimeout, defaultInterval).Should(BeTrue()) 227 }) 228 })