github.com/redhat-appstudio/e2e-tests@v0.0.0-20230619105049-9a422b2094d7/pkg/framework/framework.go (about) 1 package framework 2 3 import ( 4 "fmt" 5 "time" 6 7 . "github.com/onsi/ginkgo/v2" 8 9 "github.com/avast/retry-go/v4" 10 kubeCl "github.com/redhat-appstudio/e2e-tests/pkg/apis/kubernetes" 11 "github.com/redhat-appstudio/e2e-tests/pkg/constants" 12 "github.com/redhat-appstudio/e2e-tests/pkg/sandbox" 13 "github.com/redhat-appstudio/e2e-tests/pkg/utils" 14 "github.com/redhat-appstudio/e2e-tests/pkg/utils/common" 15 "github.com/redhat-appstudio/e2e-tests/pkg/utils/gitops" 16 "github.com/redhat-appstudio/e2e-tests/pkg/utils/has" 17 "github.com/redhat-appstudio/e2e-tests/pkg/utils/integration" 18 "github.com/redhat-appstudio/e2e-tests/pkg/utils/jvmbuildservice" 19 "github.com/redhat-appstudio/e2e-tests/pkg/utils/o11y" 20 "github.com/redhat-appstudio/e2e-tests/pkg/utils/release" 21 "github.com/redhat-appstudio/e2e-tests/pkg/utils/spi" 22 "github.com/redhat-appstudio/e2e-tests/pkg/utils/tekton" 23 ) 24 25 type ControllerHub struct { 26 HasController *has.SuiteController 27 CommonController *common.SuiteController 28 TektonController *tekton.SuiteController 29 GitOpsController *gitops.SuiteController 30 SPIController *spi.SuiteController 31 ReleaseController *release.SuiteController 32 IntegrationController *integration.SuiteController 33 JvmbuildserviceController *jvmbuildservice.SuiteController 34 O11yController *o11y.SuiteController 35 } 36 37 type Framework struct { 38 AsKubeAdmin *ControllerHub 39 AsKubeDeveloper *ControllerHub 40 ProxyUrl string 41 SandboxController *sandbox.SandboxController 42 UserNamespace string 43 UserName string 44 UserToken string 45 } 46 47 func NewFramework(userName string) (*Framework, error) { 48 return NewFrameworkWithTimeout(userName, time.Second*60) 49 } 50 51 func NewFrameworkWithTimeout(userName string, timeout time.Duration) (*Framework, error) { 52 var err error 53 var k *kubeCl.K8SClient 54 55 // https://issues.redhat.com/browse/CRT-1670 56 if len(userName) > 20 { 57 GinkgoWriter.Printf("WARNING: username %q is longer than 20 characters - the tenant namespace prefix will be shortened to %s\n", userName, userName[:20]) 58 } 59 60 // in some very rare cases fail to get the client for some timeout in member operator. 61 // Just try several times to get the user kubeconfig 62 63 err = retry.Do( 64 func() error { 65 if k, err = kubeCl.NewDevSandboxProxyClient(userName); err != nil { 66 GinkgoWriter.Printf("error when creating dev sandbox proxy client: %+v\n", err) 67 } 68 return err 69 }, 70 retry.Attempts(20), 71 ) 72 73 if err != nil { 74 return nil, fmt.Errorf("error when initializing kubernetes clients: %v", err) 75 } 76 77 asAdmin, err := InitControllerHub(k.AsKubeAdmin) 78 if err != nil { 79 return nil, fmt.Errorf("error when initializing appstudio hub controllers for admin user: %v", err) 80 } 81 82 asUser, err := InitControllerHub(k.AsKubeDeveloper) 83 if err != nil { 84 return nil, fmt.Errorf("error when initializing appstudio hub controllers for sandbox user: %v", err) 85 } 86 87 if err = utils.WaitUntil(asAdmin.CommonController.ServiceaccountPresent(constants.DefaultPipelineServiceAccount, k.UserNamespace), timeout); err != nil { 88 return nil, fmt.Errorf("'%s' service account wasn't created in %s namespace: %+v", constants.DefaultPipelineServiceAccount, k.UserNamespace, err) 89 } 90 91 if err = asAdmin.CommonController.AddRegistryAuthSecretToSA("QUAY_TOKEN", k.UserNamespace); err != nil { 92 GinkgoWriter.Println(fmt.Sprintf("Failed to add registry auth secret to service account: %v\n", err)) 93 } 94 95 return &Framework{ 96 AsKubeAdmin: asAdmin, 97 AsKubeDeveloper: asUser, 98 ProxyUrl: k.ProxyUrl, 99 SandboxController: k.SandboxController, 100 UserNamespace: k.UserNamespace, 101 UserName: k.UserName, 102 UserToken: k.UserToken, 103 }, nil 104 } 105 106 func InitControllerHub(cc *kubeCl.CustomClient) (*ControllerHub, error) { 107 // Initialize Common controller 108 commonCtrl, err := common.NewSuiteController(cc) 109 if err != nil { 110 return nil, err 111 } 112 113 // Initialize Has controller 114 hasController, err := has.NewSuiteController(cc) 115 if err != nil { 116 return nil, err 117 } 118 119 spiController, err := spi.NewSuiteController(cc) 120 if err != nil { 121 return nil, err 122 } 123 // Initialize Tekton controller 124 tektonController := tekton.NewSuiteController(cc) 125 126 // Initialize GitOps controller 127 gitopsController, err := gitops.NewSuiteController(cc) 128 if err != nil { 129 return nil, err 130 } 131 132 // Initialize Release Controller 133 releaseController, err := release.NewSuiteController(cc) 134 if err != nil { 135 return nil, err 136 } 137 // Initialize Integration Controller 138 integrationController, err := integration.NewSuiteController(cc) 139 if err != nil { 140 return nil, err 141 } 142 jvmbuildserviceController, err := jvmbuildservice.NewSuiteControler(cc) 143 if err != nil { 144 return nil, err 145 } 146 // Initialize o11y controller 147 o11yController, err := o11y.NewSuiteController(cc) 148 if err != nil { 149 return nil, err 150 } 151 152 return &ControllerHub{ 153 HasController: hasController, 154 CommonController: commonCtrl, 155 SPIController: spiController, 156 TektonController: tektonController, 157 GitOpsController: gitopsController, 158 ReleaseController: releaseController, 159 IntegrationController: integrationController, 160 JvmbuildserviceController: jvmbuildserviceController, 161 O11yController: o11yController, 162 }, nil 163 164 }