github.com/kubernetes-sigs/blobfuse-csi-driver@v0.5.0/test/e2e/suite_test.go (about) 1 /* 2 Copyright 2019 The Kubernetes Authors. 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 18 19 import ( 20 "context" 21 "fmt" 22 "log" 23 "os" 24 "os/exec" 25 "path" 26 "path/filepath" 27 "strings" 28 "testing" 29 30 "github.com/onsi/ginkgo" 31 "github.com/onsi/ginkgo/reporters" 32 "github.com/onsi/gomega" 33 "github.com/pborman/uuid" 34 "k8s.io/kubernetes/test/e2e/framework" 35 "sigs.k8s.io/blobfuse-csi-driver/pkg/blobfuse" 36 "sigs.k8s.io/blobfuse-csi-driver/test/utils/azure" 37 "sigs.k8s.io/blobfuse-csi-driver/test/utils/credentials" 38 "sigs.k8s.io/blobfuse-csi-driver/test/utils/testutil" 39 ) 40 41 const ( 42 kubeconfigEnvVar = "KUBECONFIG" 43 reportDirEnv = "ARTIFACTS" 44 defaultReportDir = "/workspace/_artifacts" 45 ) 46 47 var blobfuseDriver *blobfuse.Driver 48 49 type testCmd struct { 50 command string 51 args []string 52 startLog string 53 endLog string 54 } 55 56 var _ = ginkgo.BeforeSuite(func() { 57 // k8s.io/kubernetes/test/e2e/framework requires env KUBECONFIG to be set 58 // it does not fall back to defaults 59 if os.Getenv(kubeconfigEnvVar) == "" { 60 kubeconfig := filepath.Join(os.Getenv("HOME"), ".kube", "config") 61 os.Setenv(kubeconfigEnvVar, kubeconfig) 62 } 63 framework.HandleFlags() 64 framework.AfterReadingAllFlags(&framework.TestContext) 65 66 if testutil.IsRunningInProw() { 67 creds, err := credentials.CreateAzureCredentialFile(false) 68 gomega.Expect(err).NotTo(gomega.HaveOccurred()) 69 azureClient, err := azure.GetClient(creds.Cloud, creds.SubscriptionID, creds.AADClientID, creds.TenantID, creds.AADClientSecret) 70 gomega.Expect(err).NotTo(gomega.HaveOccurred()) 71 _, err = azureClient.EnsureResourceGroup(context.Background(), creds.ResourceGroup, creds.Location, nil) 72 gomega.Expect(err).NotTo(gomega.HaveOccurred()) 73 74 // Need to login to ACR using SP credential if we are running in Prow so we can push test images. 75 // If running locally, user should run 'docker login' before running E2E tests 76 registry := os.Getenv("REGISTRY") 77 gomega.Expect(registry).NotTo(gomega.Equal("")) 78 79 log.Println("Attempting docker login with Azure service principal") 80 cmd := exec.Command("docker", "login", fmt.Sprintf("--username=%s", creds.AADClientID), fmt.Sprintf("--password=%s", creds.AADClientSecret), registry) 81 err = cmd.Run() 82 gomega.Expect(err).NotTo(gomega.HaveOccurred()) 83 log.Println("docker login is successful") 84 85 // Install Blobfuse CSI Driver on cluster from project root 86 e2eBootstrap := testCmd{ 87 command: "make", 88 args: []string{"e2e-bootstrap"}, 89 startLog: "Installing Blobfuse CSI Driver...", 90 endLog: "Blobfuse CSI Driver installed", 91 } 92 execTestCmd([]testCmd{e2eBootstrap}) 93 94 } 95 nodeid := os.Getenv("nodeid") 96 kubeconfig := os.Getenv(kubeconfigEnvVar) 97 blobfuseDriver = blobfuse.NewDriver(nodeid) 98 go func() { 99 os.Setenv("AZURE_CREDENTIAL_FILE", credentials.TempAzureCredentialFilePath) 100 blobfuseDriver.Run(fmt.Sprintf("unix:///tmp/csi-%s.sock", uuid.NewUUID().String()), kubeconfig) 101 }() 102 }) 103 104 var _ = ginkgo.AfterSuite(func() { 105 if testutil.IsRunningInProw() { 106 blobfuseLog := testCmd{ 107 command: "bash", 108 args: []string{"test/utils/blobfuse_log.sh"}, 109 startLog: "===================blobfuse log===================", 110 endLog: "==================================================", 111 } 112 e2eTeardown := testCmd{ 113 command: "make", 114 args: []string{"e2e-teardown"}, 115 startLog: "Uninstalling Blobfuse CSI Driver...", 116 endLog: "Blobfuse CSI Driver uninstalled", 117 } 118 execTestCmd([]testCmd{blobfuseLog, e2eTeardown}) 119 120 // install/uninstall CSI Driver deployment scripts test 121 installDriver := testCmd{ 122 command: "bash", 123 args: []string{"deploy/install-driver.sh", "master", "local"}, 124 startLog: "===================install CSI Driver deployment scripts test===================", 125 endLog: "===================================================", 126 } 127 uninstallDriver := testCmd{ 128 command: "bash", 129 args: []string{"deploy/uninstall-driver.sh", "master", "local"}, 130 startLog: "===================uninstall CSI Driver deployment scripts test===================", 131 endLog: "===================================================", 132 } 133 execTestCmd([]testCmd{installDriver, uninstallDriver}) 134 135 err := credentials.DeleteAzureCredentialFile() 136 gomega.Expect(err).NotTo(gomega.HaveOccurred()) 137 } 138 }) 139 140 func TestE2E(t *testing.T) { 141 gomega.RegisterFailHandler(ginkgo.Fail) 142 reportDir := os.Getenv(reportDirEnv) 143 if reportDir == "" { 144 reportDir = defaultReportDir 145 } 146 r := []ginkgo.Reporter{reporters.NewJUnitReporter(path.Join(reportDir, "junit_01.xml"))} 147 ginkgo.RunSpecsWithDefaultAndCustomReporters(t, "Blobfuse CSI Driver End-to-End Tests", r) 148 } 149 150 func execTestCmd(cmds []testCmd) { 151 err := os.Chdir("../..") 152 gomega.Expect(err).NotTo(gomega.HaveOccurred()) 153 defer func() { 154 err := os.Chdir("test/e2e") 155 gomega.Expect(err).NotTo(gomega.HaveOccurred()) 156 }() 157 158 projectRoot, err := os.Getwd() 159 gomega.Expect(err).NotTo(gomega.HaveOccurred()) 160 gomega.Expect(strings.HasSuffix(projectRoot, "blobfuse-csi-driver")).To(gomega.Equal(true)) 161 162 for _, cmd := range cmds { 163 log.Println(cmd.startLog) 164 cmdSh := exec.Command(cmd.command, cmd.args...) 165 cmdSh.Dir = projectRoot 166 cmdSh.Stdout = os.Stdout 167 cmdSh.Stderr = os.Stderr 168 err = cmdSh.Run() 169 gomega.Expect(err).NotTo(gomega.HaveOccurred()) 170 log.Println(cmd.endLog) 171 } 172 }