Skip to content

Commit 0f9d43a

Browse files
authored
Merge pull request #322 from hantaowang/testing-utility-improvements
add flag checking and temp dir utilities
2 parents 926776e + e0386a6 commit 0f9d43a

File tree

1 file changed

+61
-37
lines changed

1 file changed

+61
-37
lines changed

test/k8s-integration/main.go

+61-37
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ package main
1717
import (
1818
"flag"
1919
"fmt"
20+
"io/ioutil"
2021
"os"
2122
"os/exec"
2223
"path/filepath"
@@ -70,45 +71,40 @@ func init() {
7071
func main() {
7172
flag.Parse()
7273

73-
if len(*stagingImage) == 0 && !*inProw {
74-
klog.Fatalf("staging-image is a required flag, please specify the name of image to stage to")
74+
if !*inProw {
75+
ensureVariable(stagingImage, true, "staging-image is a required flag, please specify the name of image to stage to")
7576
}
7677

77-
if len(*saFile) == 0 {
78-
klog.Fatalf("service-account-file is a required flag")
79-
}
80-
81-
if len(*deployOverlayName) == 0 {
82-
klog.Fatalf("deploy-overlay-name is a required flag")
83-
}
84-
85-
if len(*storageClassFile) == 0 && !*migrationTest {
86-
klog.Fatalf("One of storageclass-file and migration-test must be set")
87-
}
88-
89-
if len(*storageClassFile) != 0 && *migrationTest {
90-
klog.Fatalf("storage-class-file and migration-test cannot both be set")
91-
}
78+
ensureVariable(saFile, true, "service-account-file is a required flag")
79+
ensureVariable(deployOverlayName, true, "deploy-overlay-name is a required flag")
80+
ensureVariable(testFocus, true, "test-focus is a required flag")
81+
ensureVariable(gceZone, true, "gce-zone is a required flag")
9282

93-
if !*bringupCluster && len(*kubeFeatureGates) > 0 {
94-
klog.Fatalf("kube-feature-gates set but not bringing up new cluster")
83+
if *migrationTest {
84+
ensureVariable(storageClassFile, false, "storage-class-file and migration-test cannot both be set")
85+
} else {
86+
ensureVariable(storageClassFile, true, "One of storageclass-file and migration-test must be set")
9587
}
9688

97-
if len(*testFocus) == 0 {
98-
klog.Fatalf("test-focus is a required flag")
89+
if !*bringupCluster {
90+
ensureVariable(kubeFeatureGates, false, "kube-feature-gates set but not bringing up new cluster")
9991
}
10092

101-
if len(*gceZone) == 0 {
102-
klog.Fatalf("gce-zone is a required flag")
93+
if *bringupCluster || *teardownCluster {
94+
ensureVariable(deploymentStrat, true, "Must set the deployment strategy if bringing up or down cluster.")
95+
} else {
96+
ensureVariable(deploymentStrat, false, "Cannot set the deployment strategy if not bringing up or down cluster.")
10397
}
10498

105-
if *deploymentStrat == "gke" && *migrationTest {
106-
klog.Fatalf("Cannot set deployment strategy to 'gke' for migration tests.")
99+
if *deploymentStrat == "gke" {
100+
ensureFlag(migrationTest, false, "Cannot set deployment strategy to 'gke' for migration tests.")
101+
ensureVariable(kubeVersion, false, "Cannot set kube-version when using deployment strategy 'gke'. Use gke-cluster-version.")
102+
ensureVariable(gkeClusterVer, true, "Must set gke-cluster-version when using deployment strategy 'gke'.")
103+
ensureVariable(kubeFeatureGates, false, "Cannot set feature gates when using deployment strategy 'gke'.")
107104
}
108105

109-
err := handle()
110-
if err != nil {
111-
klog.Fatalf("Failed to run integration test: %v", err)
106+
if len(*localK8sDir) != 0 {
107+
ensureVariable(kubeVersion, false, "Cannot set a kube version when using a local k8s dir.")
112108
}
113109
}
114110

@@ -123,8 +119,9 @@ func handle() error {
123119
return fmt.Errorf("Could not find env variable GOPATH")
124120
}
125121
pkgDir := filepath.Join(goPath, "src", "sigs.k8s.io", "gcp-compute-persistent-disk-csi-driver")
126-
k8sIoDir := filepath.Join(pkgDir, "test", "k8s-integration", "src", "k8s.io")
127-
k8sDir := filepath.Join(k8sIoDir, "kubernetes")
122+
k8sParentDir := generateUniqueTmpDir()
123+
k8sDir := filepath.Join(k8sParentDir, "kubernetes")
124+
defer removeDir(k8sParentDir)
128125

129126
if *inProw {
130127
project, _ := testutils.SetupProwConfig(*boskosResourceType)
@@ -173,7 +170,7 @@ func handle() error {
173170
}
174171

175172
if *bringupCluster {
176-
err := downloadKubernetesSource(pkgDir, k8sIoDir, *kubeVersion)
173+
err := downloadKubernetesSource(pkgDir, k8sParentDir, *kubeVersion)
177174
if err != nil {
178175
return fmt.Errorf("failed to download Kubernetes source: %v", err)
179176
}
@@ -239,7 +236,7 @@ func handle() error {
239236
}()
240237
}
241238

242-
err := installDriver(goPath, pkgDir, k8sDir, *stagingImage, stagingVersion, *deployOverlayName, *doDriverBuild)
239+
err := installDriver(goPath, pkgDir, *stagingImage, stagingVersion, *deployOverlayName, *doDriverBuild)
243240
if *teardownDriver {
244241
defer func() {
245242
// TODO (#140): collect driver logs
@@ -420,7 +417,7 @@ func getOverlayDir(pkgDir, deployOverlayName string) string {
420417
return filepath.Join(pkgDir, "deploy", "kubernetes", "overlays", deployOverlayName)
421418
}
422419

423-
func installDriver(goPath, pkgDir, k8sDir, stagingImage, stagingVersion, deployOverlayName string, doDriverBuild bool) error {
420+
func installDriver(goPath, pkgDir, stagingImage, stagingVersion, deployOverlayName string, doDriverBuild bool) error {
424421
if doDriverBuild {
425422
// Install kustomize
426423
out, err := exec.Command(filepath.Join(pkgDir, "deploy", "kubernetes", "install-kustomize.sh")).CombinedOutput()
@@ -449,10 +446,8 @@ func installDriver(goPath, pkgDir, k8sDir, stagingImage, stagingVersion, deployO
449446
}
450447

451448
// setup service account file for secret creation
452-
tmpSaFile := fmt.Sprintf("/tmp/%s/cloud-sa.json", string(uuid.NewUUID()))
453-
454-
os.MkdirAll(filepath.Dir(tmpSaFile), 0750)
455-
defer os.Remove(filepath.Dir(tmpSaFile))
449+
tmpSaFile := filepath.Join(generateUniqueTmpDir(), "cloud-sa.json")
450+
defer removeDir(filepath.Dir(tmpSaFile))
456451

457452
// Need to copy it to name the file "cloud-sa.json"
458453
out, err := exec.Command("cp", *saFile, tmpSaFile).CombinedOutput()
@@ -602,3 +597,32 @@ func deleteImage(stagingImage, stagingVersion string) error {
602597
}
603598
return nil
604599
}
600+
601+
func generateUniqueTmpDir() string {
602+
dir, err := ioutil.TempDir("", "gcp-pd-driver-tmp")
603+
if err != nil {
604+
klog.Fatalf("Error creating temp dir: %v", err)
605+
}
606+
return dir
607+
}
608+
609+
func removeDir(dir string) {
610+
err := os.RemoveAll(dir)
611+
if err != nil {
612+
klog.Fatalf("Error removing temp dir: %v", err)
613+
}
614+
}
615+
616+
func ensureVariable(v *string, set bool, msgOnError string) {
617+
if set && len(*v) == 0 {
618+
klog.Fatal(msgOnError)
619+
} else if !set && len(*v) != 0 {
620+
klog.Fatal(msgOnError)
621+
}
622+
}
623+
624+
func ensureFlag(v *bool, setTo bool, msgOnError string) {
625+
if *v != setTo {
626+
klog.Fatal(msgOnError)
627+
}
628+
}

0 commit comments

Comments
 (0)