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(&region, "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  })