Skip to content

Commit 7a847f7

Browse files
committed
Add e2e CI tests for Windows
This PR adds e2e CI tests for Windows.
1 parent 13325ce commit 7a847f7

File tree

6 files changed

+63
-34
lines changed

6 files changed

+63
-34
lines changed

Dockerfile.Windows

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
11
ARG BASE_IMAGE
22
ARG BASE_IMAGE_TAG
3+
FROM --platform=$BUILDPLATFORM golang:1.13.3 AS builder
4+
5+
ARG TARGETPLATFORM
6+
ARG BUILDPLATFORM
7+
WORKDIR /code
8+
ADD . /code/
9+
10+
RUN cd /code/ && GOARCH=$(echo $TARGETPLATFORM | cut -f2 -d '/') GCE_PD_CSI_STAGING_VERSION=dev make gce-pd-driver-windows
311

412
FROM mcr.microsoft.com/windows/${BASE_IMAGE}:${BASE_IMAGE_TAG}
513
LABEL description="PD CSI driver"
6-
COPY bin/gce-pd-csi-driver.exe /gce-pd-csi-driver.exe
14+
COPY --from=builder /code/bin/gce-pd-csi-driver.exe /gce-pd-csi-driver.exe
715

816
USER ContainerAdministrator
917
ENTRYPOINT ["/gce-pd-csi-driver.exe"]

deploy/kubernetes/base/controller/cluster_setup.yaml

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
kind: Namespace
2+
apiVersion: v1
3+
metadata:
4+
name: gce-pd-csi-driver
5+
6+
---
7+
18
##### Node Service Account, Roles, RoleBindings
29
apiVersion: v1
310
kind: ServiceAccount
@@ -272,4 +279,3 @@ roleRef:
272279
kind: Role
273280
name: csi-gce-pd-leaderelection-role
274281
apiGroup: rbac.authorization.k8s.io
275-

deploy/kubernetes/overlays/alpha/kustomization.yaml

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
apiVersion: kustomize.config.k8s.io/v1beta1
22
kind: Kustomization
3-
namespace:
4-
gce-pd-csi-driver
3+
namespace: gce-pd-csi-driver
54
resources:
65
- ../../base/
76
transformers:

test/k8s-integration/driver-config.go

+10-5
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,21 @@ type driverConfig struct {
1515
}
1616

1717
const (
18-
testConfigDir = "test/k8s-integration/config"
19-
configTemplateFile = "test-config-template.in"
20-
configFile = "test-config.yaml"
18+
testConfigDir = "test/k8s-integration/config"
19+
configTemplateFile = "test-config-template.in"
20+
configTemplateWindowsFile = "test-config-template-windows.in"
21+
configFile = "test-config.yaml"
2122
)
2223

2324
// generateDriverConfigFile loads a testdriver config template and creates a file
2425
// with the test-specific configuration
25-
func generateDriverConfigFile(pkgDir, storageClassFile, snapshotClassFile, deploymentStrat string) (string, error) {
26+
func generateDriverConfigFile(platform, pkgDir, storageClassFile, snapshotClassFile, deploymentStrat string) (string, error) {
2627
// Load template
27-
t, err := template.ParseFiles(filepath.Join(pkgDir, testConfigDir, configTemplateFile))
28+
configFile := configTemplateFile
29+
if platform == "windows" {
30+
configFile = configTemplateWindowsFile
31+
}
32+
t, err := template.ParseFiles(filepath.Join(pkgDir, testConfigDir, configFile))
2833
if err != nil {
2934
return "", err
3035
}

test/k8s-integration/driver.go

+11-4
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func deleteDriver(goPath, pkgDir, deployOverlayName string) error {
8787
return nil
8888
}
8989

90-
func pushImage(pkgDir, stagingImage, stagingVersion string) error {
90+
func pushImage(pkgDir, stagingImage, stagingVersion, platform string) error {
9191
err := os.Setenv("GCE_PD_CSI_STAGING_VERSION", stagingVersion)
9292
if err != nil {
9393
return err
@@ -96,9 +96,16 @@ func pushImage(pkgDir, stagingImage, stagingVersion string) error {
9696
if err != nil {
9797
return err
9898
}
99-
cmd := exec.Command("make", "-C", pkgDir, "push-container",
100-
fmt.Sprintf("GCE_PD_CSI_STAGING_VERSION=%s", stagingVersion),
101-
fmt.Sprintf("GCE_PD_CSI_STAGING_IMAGE=%s", stagingImage))
99+
var cmd *exec.Cmd
100+
if platform != "windows" {
101+
cmd = exec.Command("make", "-C", pkgDir, "push-container",
102+
fmt.Sprintf("GCE_PD_CSI_STAGING_VERSION=%s", stagingVersion),
103+
fmt.Sprintf("GCE_PD_CSI_STAGING_IMAGE=%s", stagingImage))
104+
} else {
105+
cmd = exec.Command("make", "-C", pkgDir, "build-and-push-windows-container-1909",
106+
fmt.Sprintf("GCE_PD_CSI_STAGING_VERSION=%s", stagingVersion),
107+
fmt.Sprintf("GCE_PD_CSI_STAGING_IMAGE=%s", stagingImage))
108+
}
102109
err = runCommand("Pushing GCP Container", cmd)
103110
if err != nil {
104111
return fmt.Errorf("failed to run make command: err: %v", err)

test/k8s-integration/main.go

+25-21
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"os"
2121
"os/exec"
2222
"path/filepath"
23+
"strings"
2324
"syscall"
2425

2526
testutils "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/test/e2e/utils"
@@ -33,6 +34,7 @@ var (
3334
teardownCluster = flag.Bool("teardown-cluster", true, "teardown the cluster after the e2e test")
3435
teardownDriver = flag.Bool("teardown-driver", true, "teardown the driver after the e2e test")
3536
bringupCluster = flag.Bool("bringup-cluster", true, "build kubernetes and bringup a cluster")
37+
platform = flag.String("platform", "linux", "platform that the tests will be run, either linux or windows")
3638
gceZone = flag.String("gce-zone", "", "zone that the gce k8s cluster is created/found in")
3739
gceRegion = flag.String("gce-region", "", "region that gke regional cluster should be created in")
3840
kubeVersion = flag.String("kube-version", "", "version of Kubernetes to download and use for the cluster")
@@ -74,7 +76,6 @@ func init() {
7476

7577
func main() {
7678
flag.Parse()
77-
7879
if !*inProw {
7980
ensureVariable(stagingImage, true, "staging-image is a required flag, please specify the name of image to stage to")
8081
}
@@ -143,26 +144,26 @@ func handle() error {
143144

144145
// If running in Prow, then acquire and set up a project through Boskos
145146
if *inProw {
146-
project, _ := testutils.SetupProwConfig(*boskosResourceType)
147-
148147
oldProject, err := exec.Command("gcloud", "config", "get-value", "project").CombinedOutput()
149148
if err != nil {
150149
return fmt.Errorf("failed to get gcloud project: %s, err: %v", oldProject, err)
151150
}
152-
153-
err = setEnvProject(project)
154-
if err != nil {
155-
return fmt.Errorf("failed to set project environment to %s: %v", project, err)
156-
}
157-
defer func() {
158-
err = setEnvProject(string(oldProject))
151+
if *platform != "windows" {
152+
project, _ := testutils.SetupProwConfig(*boskosResourceType)
153+
err = setEnvProject(project)
159154
if err != nil {
160-
klog.Errorf("failed to set project environment to %s: %v", oldProject, err)
155+
return fmt.Errorf("failed to set project environment to %s: %v", project, err)
161156
}
162-
}()
163-
157+
defer func() {
158+
err = setEnvProject(string(oldProject))
159+
if err != nil {
160+
klog.Errorf("failed to set project environment to %s: %v", oldProject, err)
161+
}
162+
}()
163+
}
164164
if *doDriverBuild {
165-
*stagingImage = fmt.Sprintf("gcr.io/%s/gcp-persistent-disk-csi-driver", project)
165+
*stagingImage = fmt.Sprintf("gcr.io/%s/gcp-persistent-disk-csi-driver", strings.TrimSpace(string(oldProject)))
166+
fmt.Printf("stagingImage %s \n", *stagingImage)
166167
}
167168

168169
if _, ok := os.LookupEnv("USER"); !ok {
@@ -175,7 +176,7 @@ func handle() error {
175176

176177
// Build and push the driver, if required. Defer the driver image deletion.
177178
if *doDriverBuild {
178-
err := pushImage(pkgDir, *stagingImage, stagingVersion)
179+
err := pushImage(pkgDir, *stagingImage, stagingVersion, *platform)
179180
if err != nil {
180181
return fmt.Errorf("failed pushing image: %v", err)
181182
}
@@ -295,15 +296,15 @@ func handle() error {
295296
}
296297
}
297298

298-
normalizedVersion, err := getNormalizedVersion(*kubeVersion, *gkeClusterVer)
299+
normalizedVersion, err := getNormalizedVersion("master", *gkeClusterVer)
299300
if err != nil {
300301
return fmt.Errorf("failed to get cluster minor version: %v", err)
301302
}
302303

303-
testSkip := generateTestSkip(normalizedVersion)
304+
testSkip := generateTestSkip(normalizedVersion, *platform)
304305
// Run the tests using the testDir kubernetes
305306
if len(*storageClassFile) != 0 {
306-
err = runCSITests(pkgDir, testDir, *testFocus, testSkip, *storageClassFile, *snapshotClassFile, cloudProviderArgs, *deploymentStrat)
307+
err = runCSITests(*platform, pkgDir, testDir, *testFocus, testSkip, *storageClassFile, *snapshotClassFile, cloudProviderArgs, *deploymentStrat)
307308
} else if *migrationTest {
308309
err = runMigrationTests(pkgDir, testDir, *testFocus, testSkip, cloudProviderArgs)
309310
} else {
@@ -317,7 +318,7 @@ func handle() error {
317318
return nil
318319
}
319320

320-
func generateTestSkip(normalizedVersion string) string {
321+
func generateTestSkip(normalizedVersion, platform string) string {
321322
skipString := "\\[Disruptive\\]|\\[Serial\\]"
322323
switch normalizedVersion {
323324
// Fall-through versioning since all test cases we want to skip in 1.15
@@ -341,6 +342,9 @@ func generateTestSkip(normalizedVersion string) string {
341342
case "master":
342343
default:
343344
}
345+
if platform == "windows" {
346+
skipString = skipString + "|\\[Slow\\]|\\[LinuxOnly\\]|\\[Feature:.+\\][Ephemeral]"
347+
}
344348
return skipString
345349
}
346350

@@ -361,8 +365,8 @@ func runMigrationTests(pkgDir, testDir, testFocus, testSkip string, cloudProvide
361365
return runTestsWithConfig(testDir, testFocus, testSkip, "--storage.migratedPlugins=kubernetes.io/gce-pd", cloudProviderArgs)
362366
}
363367

364-
func runCSITests(pkgDir, testDir, testFocus, testSkip, storageClassFile, snapshotClassFile string, cloudProviderArgs []string, deploymentStrat string) error {
365-
testDriverConfigFile, err := generateDriverConfigFile(pkgDir, storageClassFile, snapshotClassFile, deploymentStrat)
368+
func runCSITests(platform, pkgDir, testDir, testFocus, testSkip, storageClassFile, snapshotClassFile string, cloudProviderArgs []string, deploymentStrat string) error {
369+
testDriverConfigFile, err := generateDriverConfigFile(platform, pkgDir, storageClassFile, snapshotClassFile, deploymentStrat)
366370
if err != nil {
367371
return err
368372
}

0 commit comments

Comments
 (0)