Skip to content

Commit 132ca97

Browse files
authored
Merge pull request kubernetes-sigs#414 from davidz627/feature/conditionalSkip
Add test skipping based on cluster version since some tests added are fixing bugs in newer versions
2 parents 17d8b72 + 1b49e4a commit 132ca97

File tree

3 files changed

+138
-8
lines changed

3 files changed

+138
-8
lines changed

test/k8s-integration/cluster.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package main
22

33
import (
4+
"errors"
45
"fmt"
56
"os"
67
"os/exec"
78
"path/filepath"
89
"strconv"
10+
"strings"
911

1012
"k8s.io/klog"
1113
)
@@ -230,3 +232,28 @@ func getGKEKubeTestArgs(gceZone, gceRegion string) ([]string, error) {
230232

231233
return args, nil
232234
}
235+
236+
func getNormalizedVersion(kubeVersion, gkeVersion string) (string, error) {
237+
if kubeVersion != "" && gkeVersion != "" {
238+
return "", fmt.Errorf("both kube version (%s) and gke version (%s) specified", kubeVersion, gkeVersion)
239+
}
240+
if kubeVersion == "" && gkeVersion == "" {
241+
return "", errors.New("neither kube verison nor gke verison specified")
242+
}
243+
var v string
244+
if kubeVersion != "" {
245+
v = kubeVersion
246+
} else if gkeVersion != "" {
247+
v = gkeVersion
248+
}
249+
if v == "master" || v == "latest" {
250+
// Ugh
251+
return v, nil
252+
}
253+
toks := strings.Split(v, ".")
254+
if len(toks) < 2 || len(toks) > 3 {
255+
return "", fmt.Errorf("got unexpected number of tokens in version string %s - wanted 2 or 3", v)
256+
}
257+
return strings.Join(toks[:2], "."), nil
258+
259+
}

test/k8s-integration/cluster_test.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package main
2+
3+
import "testing"
4+
5+
func TestGetNormalizedVersion(t *testing.T) {
6+
tests := []struct {
7+
name string
8+
kubeV string
9+
gkeV string
10+
expectV string
11+
expectErr bool
12+
}{
13+
{
14+
name: "kube",
15+
kubeV: "1.13.5",
16+
expectV: "1.13",
17+
},
18+
{
19+
name: "kube master",
20+
kubeV: "master",
21+
expectV: "master",
22+
},
23+
{
24+
name: "gke",
25+
gkeV: "1.14.3",
26+
expectV: "1.14",
27+
},
28+
{
29+
name: "gke minor",
30+
gkeV: "1.14",
31+
expectV: "1.14",
32+
},
33+
{
34+
name: "gke latest",
35+
gkeV: "latest",
36+
expectV: "latest",
37+
},
38+
{
39+
name: "kube minor",
40+
kubeV: "1.13",
41+
expectV: "1.13",
42+
},
43+
{
44+
name: "kube err",
45+
kubeV: "1",
46+
expectErr: true,
47+
},
48+
{
49+
name: "neither err",
50+
expectErr: true,
51+
},
52+
}
53+
54+
for _, tc := range tests {
55+
t.Run(tc.name, func(t *testing.T) {
56+
gotV, err := getNormalizedVersion(tc.kubeV, tc.gkeV)
57+
if err != nil {
58+
if !tc.expectErr {
59+
t.Fatalf("Got unexpected err: %v", err)
60+
}
61+
return
62+
}
63+
if err == nil && tc.expectErr {
64+
t.Fatal("Got no error but expected one")
65+
}
66+
if gotV != tc.expectV {
67+
t.Errorf("Got version: %s, expected: %s", gotV, tc.expectV)
68+
}
69+
})
70+
}
71+
}

test/k8s-integration/main.go

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -292,11 +292,18 @@ func handle() error {
292292
}
293293
}
294294

295+
normalizedVersion, err := getNormalizedVersion(*kubeVersion, *gkeClusterVer)
296+
if err != nil {
297+
return fmt.Errorf("failed to get cluster minor version: %v", err)
298+
}
299+
300+
testSkip := generateTestSkip(normalizedVersion)
301+
295302
// Run the tests using the testDir kubernetes
296303
if len(*storageClassFile) != 0 {
297-
err = runCSITests(pkgDir, testDir, *testFocus, *storageClassFile, cloudProviderArgs, *deploymentStrat)
304+
err = runCSITests(pkgDir, testDir, *testFocus, testSkip, *storageClassFile, cloudProviderArgs, *deploymentStrat)
298305
} else if *migrationTest {
299-
err = runMigrationTests(pkgDir, testDir, *testFocus, cloudProviderArgs)
306+
err = runMigrationTests(pkgDir, testDir, *testFocus, testSkip, cloudProviderArgs)
300307
} else {
301308
return fmt.Errorf("did not run either CSI or Migration test")
302309
}
@@ -308,6 +315,31 @@ func handle() error {
308315
return nil
309316
}
310317

318+
func generateTestSkip(normalizedVersion string) string {
319+
skipString := "\\[Disruptive\\]|\\[Serial\\]|\\[Feature:.+\\]"
320+
switch normalizedVersion {
321+
// Fall-through versioning since all test cases we want to skip in 1.15
322+
// should also be skipped in 1.14
323+
case "1.13":
324+
fallthrough
325+
case "1.14":
326+
fallthrough
327+
case "1.15":
328+
fallthrough
329+
case "1.16":
330+
// "volumeMode should not mount / map unused volumes in a pod" tests a
331+
// bug-fix introduced in 1.17
332+
// (https://github.com/kubernetes/kubernetes/pull/81163)
333+
skipString = skipString + "|volumeMode\\sshould\\snot\\smount\\s/\\smap\\sunused\\svolumes\\sin\\sa\\spod"
334+
fallthrough
335+
case "1.17":
336+
case "latest":
337+
case "master":
338+
default:
339+
}
340+
return skipString
341+
}
342+
311343
func setEnvProject(project string) error {
312344
out, err := exec.Command("gcloud", "config", "set", "project", project).CombinedOutput()
313345
if err != nil {
@@ -321,20 +353,20 @@ func setEnvProject(project string) error {
321353
return nil
322354
}
323355

324-
func runMigrationTests(pkgDir, testDir, testFocus string, cloudProviderArgs []string) error {
325-
return runTestsWithConfig(testDir, testFocus, "--storage.migratedPlugins=kubernetes.io/gce-pd", cloudProviderArgs)
356+
func runMigrationTests(pkgDir, testDir, testFocus, testSkip string, cloudProviderArgs []string) error {
357+
return runTestsWithConfig(testDir, testFocus, testSkip, "--storage.migratedPlugins=kubernetes.io/gce-pd", cloudProviderArgs)
326358
}
327359

328-
func runCSITests(pkgDir, testDir, testFocus, storageClassFile string, cloudProviderArgs []string, deploymentStrat string) error {
360+
func runCSITests(pkgDir, testDir, testFocus, testSkip, storageClassFile string, cloudProviderArgs []string, deploymentStrat string) error {
329361
testDriverConfigFile, err := generateDriverConfigFile(pkgDir, storageClassFile, deploymentStrat)
330362
if err != nil {
331363
return err
332364
}
333365
testConfigArg := fmt.Sprintf("--storage.testdriver=%s", testDriverConfigFile)
334-
return runTestsWithConfig(testDir, testFocus, testConfigArg, cloudProviderArgs)
366+
return runTestsWithConfig(testDir, testFocus, testSkip, testConfigArg, cloudProviderArgs)
335367
}
336368

337-
func runTestsWithConfig(testDir, testFocus, testConfigArg string, cloudProviderArgs []string) error {
369+
func runTestsWithConfig(testDir, testFocus, testSkip, testConfigArg string, cloudProviderArgs []string) error {
338370
err := os.Chdir(testDir)
339371
if err != nil {
340372
return err
@@ -348,7 +380,7 @@ func runTestsWithConfig(testDir, testFocus, testConfigArg string, cloudProviderA
348380

349381
testArgs := fmt.Sprintf("--ginkgo.focus=%s --ginkgo.skip=%s %s %s",
350382
testFocus,
351-
"\\[Disruptive\\]|\\[Serial\\]|\\[Feature:.+\\]",
383+
testSkip,
352384
testConfigArg,
353385
reportArg)
354386

0 commit comments

Comments
 (0)