github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/test/e2e/e2e_suite_test.go (about) 1 /* 2 Copyright (C) 2022-2023 ApeCloud Co., Ltd 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package e2e_test 18 19 import ( 20 "context" 21 "flag" 22 "fmt" 23 "go/build" 24 "log" 25 "path/filepath" 26 "testing" 27 28 . "github.com/onsi/ginkgo/v2" 29 . "github.com/onsi/gomega" 30 . "github.com/vmware-tanzu/velero/test/e2e" 31 . "github.com/vmware-tanzu/velero/test/e2e/util/k8s" 32 33 "github.com/onsi/ginkgo/v2/reporters" 34 "go.uber.org/zap/zapcore" 35 "k8s.io/client-go/rest" 36 "sigs.k8s.io/controller-runtime/pkg/envtest" 37 logf "sigs.k8s.io/controller-runtime/pkg/log" 38 "sigs.k8s.io/controller-runtime/pkg/log/zap" 39 40 viper "github.com/1aal/kubeblocks/pkg/viperx" 41 . "github.com/1aal/kubeblocks/test/e2e" 42 . "github.com/1aal/kubeblocks/test/e2e/envcheck" 43 . "github.com/1aal/kubeblocks/test/e2e/installation" 44 . "github.com/1aal/kubeblocks/test/e2e/testdata/smoketest" 45 e2eutil "github.com/1aal/kubeblocks/test/e2e/util" 46 ) 47 48 var cfg *rest.Config 49 var testEnv *envtest.Environment 50 var TC *TestClient 51 var version string 52 var provider string 53 var region string 54 var secretID string 55 var secretKey string 56 var initEnv bool 57 var testType string 58 var skipCase string 59 var configType string 60 61 func init() { 62 viper.AutomaticEnv() 63 flag.StringVar(&version, "VERSION", "", "kubeblocks test version") 64 flag.StringVar(&provider, "PROVIDER", "", "kubeblocks test cloud-provider") 65 flag.StringVar(®ion, "REGION", "", "kubeblocks test region") 66 flag.StringVar(&secretID, "SECRET_ID", "", "cloud-provider SECRET_ID") 67 flag.StringVar(&secretKey, "SECRET_KEY", "", "cloud-provider SECRET_KEY") 68 flag.BoolVar(&initEnv, "INIT_ENV", false, "cloud-provider INIT_ENV") 69 flag.StringVar(&testType, "TEST_TYPE", "", "test type") 70 flag.StringVar(&skipCase, "SKIP_CASE", "", "skip not execute cases") 71 flag.StringVar(&configType, "CONFIG_TYPE", "", "test config") 72 } 73 74 func TestE2e(t *testing.T) { 75 if err := GetKubeconfigContext(); err != nil { 76 fmt.Println(err) 77 t.FailNow() 78 } 79 RegisterFailHandler(Fail) 80 junitReporter := reporters.NewJUnitReporter("report.xml") 81 RunSpecsWithDefaultAndCustomReporters(t, "E2e Suite", []Reporter{junitReporter}) 82 } 83 84 func GetKubeconfigContext() error { 85 var err error 86 var tcDefault TestClient 87 tcDefault, err = NewTestClient(VeleroCfg.DefaultCluster) 88 VeleroCfg.DefaultClient = &tcDefault 89 VeleroCfg.ClientToInstallVelero = VeleroCfg.DefaultClient 90 if err != nil { 91 return err 92 } 93 94 if VeleroCfg.DefaultCluster != "" { 95 err = KubectlConfigUseContext(context.Background(), VeleroCfg.DefaultCluster) 96 if err != nil { 97 return err 98 } 99 } 100 TC = &tcDefault 101 return nil 102 } 103 104 var _ = BeforeSuite(func() { 105 if len(version) == 0 { 106 log.Println("kubeblocks version is not specified") 107 } 108 Version = version 109 InitEnv = initEnv 110 TestType = testType 111 ConfigType = configType 112 log.Println("TestType is :" + TestType) 113 SkipCase = skipCase 114 TestResults = make([]Result, 0) 115 if len(provider) > 0 && len(region) > 0 && len(secretID) > 0 && len(secretKey) > 0 { 116 Provider = provider 117 Region = region 118 SecretID = secretID 119 SecretKey = secretKey 120 } 121 if viper.GetBool("ENABLE_DEBUG_LOG") { 122 logf.SetLogger(zap.New(zap.WriteTo(GinkgoWriter), zap.UseDevMode(true), func(o *zap.Options) { 123 o.TimeEncoder = zapcore.ISO8601TimeEncoder 124 })) 125 } 126 }) 127 128 var _ = AfterSuite(func() { 129 By("delete helm release in e2e-test environment") 130 CheckedUninstallHelmRelease() 131 if testEnv != nil { 132 By("removed installed CRDs in e2e-test environment") 133 err := testEnv.Stop() 134 Expect(err).NotTo(HaveOccurred()) 135 } 136 }) 137 138 var _ = Describe("e2e test", func() { 139 if initEnv { 140 Cancel() 141 Ctx, Cancel = context.WithCancel(context.TODO()) 142 Logger = logf.FromContext(Ctx).WithValues() 143 Logger.Info("logger start") 144 145 K8sClient = TC.Kubebuilder 146 CheckNoKubeBlocksCRDs() 147 148 By("bootstrapping e2e-test environment") 149 var flag = true 150 testEnv = &envtest.Environment{ 151 CRDInstallOptions: envtest.CRDInstallOptions{ 152 CleanUpAfterUse: true, 153 }, 154 CRDDirectoryPaths: []string{filepath.Join("..", "..", "config", "crd", "bases"), 155 // use dependent external CRDs. 156 // resolved by ref: https://github.com/operator-framework/operator-sdk/issues/4434#issuecomment-786794418 157 filepath.Join(build.Default.GOPATH, "pkg", "mod", "github.com", "kubernetes-csi/external-snapshotter/", 158 "client/v6@v6.2.0", "config", "crd")}, 159 ErrorIfCRDPathMissing: true, 160 UseExistingCluster: &flag, 161 } 162 163 var err error 164 // cfg is defined in this file globally. 165 cfg, err = testEnv.Start() 166 Expect(err).NotTo(HaveOccurred()) 167 Expect(cfg).NotTo(BeNil()) 168 var _ = Describe("KubeBlocks playground init", PlaygroundInit) 169 170 var _ = Describe("KubeBlocks uninstall", UninstallKubeblocks) 171 172 var _ = Describe("Check healthy Kubernetes cluster status", EnvCheckTest) 173 } 174 175 var kubeblocks string 176 177 if initEnv == false && len(version) > 0 { 178 It("check kbcli exist or not-exist", func() { 179 kbcli := e2eutil.CheckCommand("kbcli", "/usr/local/bin") 180 Expect(kbcli).Should(BeTrue()) 181 kubeblocks = e2eutil.ExecCommand("kbcli version | grep KubeBlocks " + 182 "| (grep \"$1\" || true) | awk '{print $2}'") 183 }) 184 It("check kubeblocks exist or not-exist", func() { 185 log.Println("kubeblocks : " + kubeblocks) 186 Expect(kubeblocks).ShouldNot(BeEmpty()) 187 if len(kubeblocks) == 0 { 188 var _ = Describe("KubeBlocks operator installation", InstallationTest) 189 } 190 }) 191 } 192 193 var _ = Describe("Configure running e2e information", Config) 194 195 var _ = Describe("KubeBlocks smoke test run", SmokeTest) 196 197 var _ = Describe("Delete e2e config resources", DeleteConfig) 198 199 if initEnv == false { 200 if len(kubeblocks) > 0 { 201 var _ = Describe("KubeBlocks operator uninstallation", UninstallationTest) 202 } 203 } 204 205 if initEnv { 206 var _ = Describe("KubeBlocks playground destroy", PlaygroundDestroy) 207 var _ = Describe("Check environment has been cleaned", EnvGotCleanedTest) 208 } 209 210 var _ = Describe("show test report", AnalyzeE2eReport) 211 212 if initEnv { 213 var _ = Describe("save test report to s3", UploadReport) 214 } 215 })