From 161d0f3ffd4d0f4cfacadf333f13295bb003cd59 Mon Sep 17 00:00:00 2001 From: Kris Date: Tue, 14 Mar 2017 11:11:28 -0700 Subject: [PATCH 1/4] Add mechanism for upgrade tests to be skipped because of versions --- test/e2e/cluster_upgrade.go | 135 +++++++++++++++++++++++++---------- test/e2e/upgrades/BUILD | 1 + test/e2e/upgrades/upgrade.go | 13 +++- 3 files changed, 111 insertions(+), 38 deletions(-) diff --git a/test/e2e/cluster_upgrade.go b/test/e2e/cluster_upgrade.go index 136ba5ddfba..bcee3e38e74 100644 --- a/test/e2e/cluster_upgrade.go +++ b/test/e2e/cluster_upgrade.go @@ -17,6 +17,7 @@ limitations under the License. package e2e import ( + "k8s.io/kubernetes/pkg/util/version" "k8s.io/kubernetes/test/e2e/chaosmonkey" "k8s.io/kubernetes/test/e2e/framework" "k8s.io/kubernetes/test/e2e/upgrades" @@ -50,18 +51,27 @@ var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() { framework.KubeDescribe("master upgrade", func() { It("should maintain a functioning cluster [Feature:MasterUpgrade]", func() { + target, err := framework.RealVersion(framework.TestContext.UpgradeTarget) + framework.ExpectNoError(err) + + current, err := f.ClientSet.Discovery().ServerVersion() + framework.ExpectNoError(err) + + versions, err := parseVersions(target, current.String()) + framework.ExpectNoError(err) + cm := chaosmonkey.New(func() { - v, err := framework.RealVersion(framework.TestContext.UpgradeTarget) - framework.ExpectNoError(err) - framework.ExpectNoError(framework.MasterUpgrade(v)) - framework.ExpectNoError(framework.CheckMasterVersion(f.ClientSet, v)) + framework.ExpectNoError(framework.MasterUpgrade(target)) + framework.ExpectNoError(framework.CheckMasterVersion(f.ClientSet, target)) }) for _, t := range upgradeTests { - cm.RegisterInterface(&chaosMonkeyAdapter{ + cma := chaosMonkeyAdapter{ test: t, framework: testFrameworks[t.Name()], upgradeType: upgrades.MasterUpgrade, - }) + versions: versions, + } + cm.Register(cma.Test) } cm.Do() @@ -70,18 +80,27 @@ var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() { framework.KubeDescribe("node upgrade", func() { It("should maintain a functioning cluster [Feature:NodeUpgrade]", func() { + target, err := framework.RealVersion(framework.TestContext.UpgradeTarget) + framework.ExpectNoError(err) + + current, err := f.ClientSet.Discovery().ServerVersion() + framework.ExpectNoError(err) + + versions, err := parseVersions(target, current.String()) + framework.ExpectNoError(err) + cm := chaosmonkey.New(func() { - v, err := framework.RealVersion(framework.TestContext.UpgradeTarget) - framework.ExpectNoError(err) - framework.ExpectNoError(framework.NodeUpgrade(f, v, framework.TestContext.UpgradeImage)) - framework.ExpectNoError(framework.CheckNodesVersions(f.ClientSet, v)) + framework.ExpectNoError(framework.NodeUpgrade(f, target, framework.TestContext.UpgradeImage)) + framework.ExpectNoError(framework.CheckNodesVersions(f.ClientSet, target)) }) for _, t := range upgradeTests { - cm.RegisterInterface(&chaosMonkeyAdapter{ + cma := chaosMonkeyAdapter{ test: t, framework: testFrameworks[t.Name()], upgradeType: upgrades.NodeUpgrade, - }) + versions: versions, + } + cm.Register(cma.Test) } cm.Do() }) @@ -89,20 +108,29 @@ var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() { framework.KubeDescribe("cluster upgrade", func() { It("should maintain a functioning cluster [Feature:ClusterUpgrade]", func() { + target, err := framework.RealVersion(framework.TestContext.UpgradeTarget) + framework.ExpectNoError(err) + + current, err := f.ClientSet.Discovery().ServerVersion() + framework.ExpectNoError(err) + + versions, err := parseVersions(target, current.String()) + framework.ExpectNoError(err) + cm := chaosmonkey.New(func() { - v, err := framework.RealVersion(framework.TestContext.UpgradeTarget) - framework.ExpectNoError(err) - framework.ExpectNoError(framework.MasterUpgrade(v)) - framework.ExpectNoError(framework.CheckMasterVersion(f.ClientSet, v)) - framework.ExpectNoError(framework.NodeUpgrade(f, v, framework.TestContext.UpgradeImage)) - framework.ExpectNoError(framework.CheckNodesVersions(f.ClientSet, v)) + framework.ExpectNoError(framework.MasterUpgrade(target)) + framework.ExpectNoError(framework.CheckMasterVersion(f.ClientSet, target)) + framework.ExpectNoError(framework.NodeUpgrade(f, target, framework.TestContext.UpgradeImage)) + framework.ExpectNoError(framework.CheckNodesVersions(f.ClientSet, target)) }) for _, t := range upgradeTests { - cm.RegisterInterface(&chaosMonkeyAdapter{ + cma := chaosMonkeyAdapter{ test: t, framework: testFrameworks[t.Name()], upgradeType: upgrades.ClusterUpgrade, - }) + versions: versions, + } + cm.Register(cma.Test) } cm.Do() }) @@ -121,21 +149,30 @@ var _ = framework.KubeDescribe("Downgrade [Feature:Downgrade]", func() { framework.KubeDescribe("cluster downgrade", func() { It("should maintain a functioning cluster [Feature:ClusterDowngrade]", func() { + target, err := framework.RealVersion(framework.TestContext.UpgradeTarget) + framework.ExpectNoError(err) + + current, err := f.ClientSet.Discovery().ServerVersion() + framework.ExpectNoError(err) + + versions, err := parseVersions(target, current.String()) + framework.ExpectNoError(err) + cm := chaosmonkey.New(func() { // Yes this really is a downgrade. And nodes must downgrade first. - v, err := framework.RealVersion(framework.TestContext.UpgradeTarget) - framework.ExpectNoError(err) - framework.ExpectNoError(framework.NodeUpgrade(f, v, framework.TestContext.UpgradeImage)) - framework.ExpectNoError(framework.CheckNodesVersions(f.ClientSet, v)) - framework.ExpectNoError(framework.MasterUpgrade(v)) - framework.ExpectNoError(framework.CheckMasterVersion(f.ClientSet, v)) + framework.ExpectNoError(framework.NodeUpgrade(f, target, framework.TestContext.UpgradeImage)) + framework.ExpectNoError(framework.CheckNodesVersions(f.ClientSet, target)) + framework.ExpectNoError(framework.MasterUpgrade(target)) + framework.ExpectNoError(framework.CheckMasterVersion(f.ClientSet, target)) }) for _, t := range upgradeTests { - cm.RegisterInterface(&chaosMonkeyAdapter{ + cma := chaosMonkeyAdapter{ test: t, framework: testFrameworks[t.Name()], upgradeType: upgrades.ClusterUpgrade, - }) + versions: versions, + } + cm.Register(cma.Test) } cm.Do() }) @@ -143,6 +180,8 @@ var _ = framework.KubeDescribe("Downgrade [Feature:Downgrade]", func() { }) var _ = framework.KubeDescribe("etcd Upgrade [Feature:EtcdUpgrade]", func() { + f := framework.NewDefaultFramework("etc-upgrade") + // Create the frameworks here because we can only create them // in a "Describe". testFrameworks := map[string]*framework.Framework{} @@ -152,16 +191,24 @@ var _ = framework.KubeDescribe("etcd Upgrade [Feature:EtcdUpgrade]", func() { framework.KubeDescribe("etcd upgrade", func() { It("should maintain a functioning cluster", func() { + current, err := f.ClientSet.Discovery().ServerVersion() + framework.ExpectNoError(err) + + versions, err := parseVersions(current.String()) + framework.ExpectNoError(err) + cm := chaosmonkey.New(func() { framework.ExpectNoError(framework.EtcdUpgrade(framework.TestContext.EtcdUpgradeStorage, framework.TestContext.EtcdUpgradeVersion)) // TODO(mml): verify the etcd version }) for _, t := range upgradeTests { - cm.RegisterInterface(&chaosMonkeyAdapter{ + cma := chaosMonkeyAdapter{ test: t, framework: testFrameworks[t.Name()], upgradeType: upgrades.EtcdUpgrade, - }) + versions: versions, + } + cm.Register(cma.Test) } cm.Do() @@ -173,16 +220,30 @@ type chaosMonkeyAdapter struct { test upgrades.Test framework *framework.Framework upgradeType upgrades.UpgradeType + versions []version.Version } -func (cma *chaosMonkeyAdapter) Setup() { +func (cma *chaosMonkeyAdapter) Test(sem *chaosmonkey.Semaphore) { + if skippable, ok := cma.test.(upgrades.VersionSkippable); ok && skippable.SkipVersions(cma.versions...) { + By("skipping test " + cma.test.Name()) + sem.Ready() + return + } + cma.test.Setup(cma.framework) + defer cma.test.Teardown(cma.framework) + sem.Ready() + cma.test.Test(cma.framework, sem.StopCh, cma.upgradeType) } -func (cma *chaosMonkeyAdapter) Test(stopCh <-chan struct{}) { - cma.test.Test(cma.framework, stopCh, cma.upgradeType) -} - -func (cma *chaosMonkeyAdapter) Teardown() { - cma.test.Teardown(cma.framework) +func parseVersions(vs ...string) ([]version.Version, error) { + var ret []version.Version + for _, v := range vs { + semver, err := version.ParseSemantic(v) + if err != nil { + return nil, err + } + ret = append(ret, *semver) + } + return ret, nil } diff --git a/test/e2e/upgrades/BUILD b/test/e2e/upgrades/BUILD index a7fa15e8375..89bec5160a8 100644 --- a/test/e2e/upgrades/BUILD +++ b/test/e2e/upgrades/BUILD @@ -33,6 +33,7 @@ go_library( "//pkg/controller:go_default_library", "//pkg/controller/deployment/util:go_default_library", "//pkg/kubelet/sysctl:go_default_library", + "//pkg/util/version:go_default_library", "//test/e2e/common:go_default_library", "//test/e2e/framework:go_default_library", "//vendor:github.com/onsi/ginkgo", diff --git a/test/e2e/upgrades/upgrade.go b/test/e2e/upgrades/upgrade.go index 2f1f88f6d4e..bc3f5fc0f07 100644 --- a/test/e2e/upgrades/upgrade.go +++ b/test/e2e/upgrades/upgrade.go @@ -18,7 +18,10 @@ limitations under the License. // features before, during, and after different types of upgrades. package upgrades -import "k8s.io/kubernetes/test/e2e/framework" +import ( + "k8s.io/kubernetes/pkg/util/version" + "k8s.io/kubernetes/test/e2e/framework" +) // UpgradeType represents different types of upgrades. type UpgradeType int @@ -57,3 +60,11 @@ type Test interface { // aren't already cleaned up by the framework. Teardown(f *framework.Framework) } + +// VersionSkippable is an interface that an upgrade test can implement +// to be able to indicate that it should be skipped. +type VersionSkippable interface { + // SkipVersions should return true if test should be skipped + // for any of provided versions. + SkipVersions(versions ...version.Version) bool +} From 111d9a3daf6a462c8c6db5acc75d7b9f41d5e2c1 Mon Sep 17 00:00:00 2001 From: Kris Date: Tue, 14 Mar 2017 11:12:11 -0700 Subject: [PATCH 2/4] Skip StatefulSet tests for versions less than 1.5.0 PetSets were alpha in 1.4.0. They were renamed to StatefulSets and graduated to beta starting in 1.5.0. --- test/e2e/upgrades/statefulset.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/e2e/upgrades/statefulset.go b/test/e2e/upgrades/statefulset.go index eea3a203d91..14c8ff11450 100644 --- a/test/e2e/upgrades/statefulset.go +++ b/test/e2e/upgrades/statefulset.go @@ -22,6 +22,7 @@ import ( "k8s.io/kubernetes/pkg/api/v1" apps "k8s.io/kubernetes/pkg/apis/apps/v1beta1" + "k8s.io/kubernetes/pkg/util/version" "k8s.io/kubernetes/test/e2e/framework" ) @@ -35,6 +36,17 @@ type StatefulSetUpgradeTest struct { func (StatefulSetUpgradeTest) Name() string { return "statefulset-upgrade" } +func (StatefulSetUpgradeTest) SkipVersions(versions ...version.Version) bool { + minVersion := version.MustParseSemantic("1.5.0") + + for _, v := range versions { + if v.LessThan(minVersion) { + return true + } + } + return false +} + // Setup creates a StatefulSet and a HeadlessService. It verifies the basic SatefulSet properties func (t *StatefulSetUpgradeTest) Setup(f *framework.Framework) { ssName := "ss" From c0ecd938015be2f06b7511abf0ec6825bf8ca24b Mon Sep 17 00:00:00 2001 From: Kris Date: Wed, 15 Mar 2017 14:58:37 -0700 Subject: [PATCH 3/4] Change the skipping mechanism to be more generic And convert StatefulSet's version skipping to the new API. --- test/e2e/BUILD | 1 + test/e2e/cluster_upgrade.go | 104 +++++++++++++++++-------------- test/e2e/upgrades/statefulset.go | 6 +- test/e2e/upgrades/upgrade.go | 25 ++++++-- 4 files changed, 79 insertions(+), 57 deletions(-) diff --git a/test/e2e/BUILD b/test/e2e/BUILD index 564559a8992..67a131050af 100644 --- a/test/e2e/BUILD +++ b/test/e2e/BUILD @@ -200,6 +200,7 @@ go_library( "//vendor:k8s.io/apimachinery/pkg/watch", "//vendor:k8s.io/apiserver/pkg/authentication/serviceaccount", "//vendor:k8s.io/apiserver/pkg/registry/generic/registry", + "//vendor:k8s.io/client-go/discovery", "//vendor:k8s.io/client-go/kubernetes", "//vendor:k8s.io/client-go/pkg/api/v1", "//vendor:k8s.io/client-go/pkg/apis/extensions/v1beta1", diff --git a/test/e2e/cluster_upgrade.go b/test/e2e/cluster_upgrade.go index bcee3e38e74..6f9d49a6388 100644 --- a/test/e2e/cluster_upgrade.go +++ b/test/e2e/cluster_upgrade.go @@ -17,6 +17,7 @@ limitations under the License. package e2e import ( + "k8s.io/client-go/discovery" "k8s.io/kubernetes/pkg/util/version" "k8s.io/kubernetes/test/e2e/chaosmonkey" "k8s.io/kubernetes/test/e2e/framework" @@ -51,16 +52,11 @@ var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() { framework.KubeDescribe("master upgrade", func() { It("should maintain a functioning cluster [Feature:MasterUpgrade]", func() { - target, err := framework.RealVersion(framework.TestContext.UpgradeTarget) - framework.ExpectNoError(err) - - current, err := f.ClientSet.Discovery().ServerVersion() - framework.ExpectNoError(err) - - versions, err := parseVersions(target, current.String()) + upgCtx, err := getUpgradeContext(f.ClientSet.Discovery(), framework.TestContext.UpgradeTarget) framework.ExpectNoError(err) cm := chaosmonkey.New(func() { + target := upgCtx.Versions[1].Version.String() framework.ExpectNoError(framework.MasterUpgrade(target)) framework.ExpectNoError(framework.CheckMasterVersion(f.ClientSet, target)) }) @@ -69,7 +65,7 @@ var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() { test: t, framework: testFrameworks[t.Name()], upgradeType: upgrades.MasterUpgrade, - versions: versions, + upgCtx: *upgCtx, } cm.Register(cma.Test) } @@ -80,16 +76,11 @@ var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() { framework.KubeDescribe("node upgrade", func() { It("should maintain a functioning cluster [Feature:NodeUpgrade]", func() { - target, err := framework.RealVersion(framework.TestContext.UpgradeTarget) - framework.ExpectNoError(err) - - current, err := f.ClientSet.Discovery().ServerVersion() - framework.ExpectNoError(err) - - versions, err := parseVersions(target, current.String()) + upgCtx, err := getUpgradeContext(f.ClientSet.Discovery(), framework.TestContext.UpgradeTarget) framework.ExpectNoError(err) cm := chaosmonkey.New(func() { + target := upgCtx.Versions[1].Version.String() framework.ExpectNoError(framework.NodeUpgrade(f, target, framework.TestContext.UpgradeImage)) framework.ExpectNoError(framework.CheckNodesVersions(f.ClientSet, target)) }) @@ -98,7 +89,7 @@ var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() { test: t, framework: testFrameworks[t.Name()], upgradeType: upgrades.NodeUpgrade, - versions: versions, + upgCtx: *upgCtx, } cm.Register(cma.Test) } @@ -108,16 +99,11 @@ var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() { framework.KubeDescribe("cluster upgrade", func() { It("should maintain a functioning cluster [Feature:ClusterUpgrade]", func() { - target, err := framework.RealVersion(framework.TestContext.UpgradeTarget) - framework.ExpectNoError(err) - - current, err := f.ClientSet.Discovery().ServerVersion() - framework.ExpectNoError(err) - - versions, err := parseVersions(target, current.String()) + upgCtx, err := getUpgradeContext(f.ClientSet.Discovery(), framework.TestContext.UpgradeTarget) framework.ExpectNoError(err) cm := chaosmonkey.New(func() { + target := upgCtx.Versions[1].Version.String() framework.ExpectNoError(framework.MasterUpgrade(target)) framework.ExpectNoError(framework.CheckMasterVersion(f.ClientSet, target)) framework.ExpectNoError(framework.NodeUpgrade(f, target, framework.TestContext.UpgradeImage)) @@ -128,7 +114,7 @@ var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() { test: t, framework: testFrameworks[t.Name()], upgradeType: upgrades.ClusterUpgrade, - versions: versions, + upgCtx: *upgCtx, } cm.Register(cma.Test) } @@ -149,17 +135,12 @@ var _ = framework.KubeDescribe("Downgrade [Feature:Downgrade]", func() { framework.KubeDescribe("cluster downgrade", func() { It("should maintain a functioning cluster [Feature:ClusterDowngrade]", func() { - target, err := framework.RealVersion(framework.TestContext.UpgradeTarget) - framework.ExpectNoError(err) - - current, err := f.ClientSet.Discovery().ServerVersion() - framework.ExpectNoError(err) - - versions, err := parseVersions(target, current.String()) + upgCtx, err := getUpgradeContext(f.ClientSet.Discovery(), framework.TestContext.UpgradeTarget) framework.ExpectNoError(err) cm := chaosmonkey.New(func() { // Yes this really is a downgrade. And nodes must downgrade first. + target := upgCtx.Versions[1].Version.String() framework.ExpectNoError(framework.NodeUpgrade(f, target, framework.TestContext.UpgradeImage)) framework.ExpectNoError(framework.CheckNodesVersions(f.ClientSet, target)) framework.ExpectNoError(framework.MasterUpgrade(target)) @@ -170,7 +151,7 @@ var _ = framework.KubeDescribe("Downgrade [Feature:Downgrade]", func() { test: t, framework: testFrameworks[t.Name()], upgradeType: upgrades.ClusterUpgrade, - versions: versions, + upgCtx: *upgCtx, } cm.Register(cma.Test) } @@ -191,10 +172,7 @@ var _ = framework.KubeDescribe("etcd Upgrade [Feature:EtcdUpgrade]", func() { framework.KubeDescribe("etcd upgrade", func() { It("should maintain a functioning cluster", func() { - current, err := f.ClientSet.Discovery().ServerVersion() - framework.ExpectNoError(err) - - versions, err := parseVersions(current.String()) + upgCtx, err := getUpgradeContext(f.ClientSet.Discovery(), "") framework.ExpectNoError(err) cm := chaosmonkey.New(func() { @@ -206,7 +184,7 @@ var _ = framework.KubeDescribe("etcd Upgrade [Feature:EtcdUpgrade]", func() { test: t, framework: testFrameworks[t.Name()], upgradeType: upgrades.EtcdUpgrade, - versions: versions, + upgCtx: *upgCtx, } cm.Register(cma.Test) } @@ -220,11 +198,11 @@ type chaosMonkeyAdapter struct { test upgrades.Test framework *framework.Framework upgradeType upgrades.UpgradeType - versions []version.Version + upgCtx upgrades.UpgradeContext } func (cma *chaosMonkeyAdapter) Test(sem *chaosmonkey.Semaphore) { - if skippable, ok := cma.test.(upgrades.VersionSkippable); ok && skippable.SkipVersions(cma.versions...) { + if skippable, ok := cma.test.(upgrades.Skippable); ok && skippable.Skip(cma.upgCtx) { By("skipping test " + cma.test.Name()) sem.Ready() return @@ -236,14 +214,44 @@ func (cma *chaosMonkeyAdapter) Test(sem *chaosmonkey.Semaphore) { cma.test.Test(cma.framework, sem.StopCh, cma.upgradeType) } -func parseVersions(vs ...string) ([]version.Version, error) { - var ret []version.Version - for _, v := range vs { - semver, err := version.ParseSemantic(v) - if err != nil { - return nil, err - } - ret = append(ret, *semver) +func getUpgradeContext(c discovery.DiscoveryInterface, upgradeTarget string) (*upgrades.UpgradeContext, error) { + current, err := c.ServerVersion() + if err != nil { + return nil, err } - return ret, nil + + curVer, err := version.ParseSemantic(current.String()) + if err != nil { + return nil, err + } + + upgCtx := &upgrades.UpgradeContext{ + Versions: []upgrades.VersionContext{ + { + Version: *curVer, + NodeImage: framework.TestContext.NodeOSDistro, + }, + }, + } + + if len(upgradeTarget) == 0 { + return upgCtx, nil + } + + next, err := framework.RealVersion(upgradeTarget) + if err != nil { + return nil, err + } + + nextVer, err := version.ParseSemantic(next) + if err != nil { + return nil, err + } + + upgCtx.Versions = append(upgCtx.Versions, upgrades.VersionContext{ + Version: *nextVer, + NodeImage: framework.TestContext.UpgradeImage, + }) + + return upgCtx, nil } diff --git a/test/e2e/upgrades/statefulset.go b/test/e2e/upgrades/statefulset.go index 14c8ff11450..7fad63d5759 100644 --- a/test/e2e/upgrades/statefulset.go +++ b/test/e2e/upgrades/statefulset.go @@ -36,11 +36,11 @@ type StatefulSetUpgradeTest struct { func (StatefulSetUpgradeTest) Name() string { return "statefulset-upgrade" } -func (StatefulSetUpgradeTest) SkipVersions(versions ...version.Version) bool { +func (StatefulSetUpgradeTest) Skip(upgCtx UpgradeContext) bool { minVersion := version.MustParseSemantic("1.5.0") - for _, v := range versions { - if v.LessThan(minVersion) { + for _, vCtx := range upgCtx.Versions { + if vCtx.Version.LessThan(minVersion) { return true } } diff --git a/test/e2e/upgrades/upgrade.go b/test/e2e/upgrades/upgrade.go index bc3f5fc0f07..8efc26373e8 100644 --- a/test/e2e/upgrades/upgrade.go +++ b/test/e2e/upgrades/upgrade.go @@ -61,10 +61,23 @@ type Test interface { Teardown(f *framework.Framework) } -// VersionSkippable is an interface that an upgrade test can implement -// to be able to indicate that it should be skipped. -type VersionSkippable interface { - // SkipVersions should return true if test should be skipped - // for any of provided versions. - SkipVersions(versions ...version.Version) bool +// Skippable is an interface that an upgrade test can implement to be +// able to indicate that it should be skipped. +type Skippable interface { + // Skip should return true if test should be skipped. upgCtx + // provides information about the upgrade that is going to + // occur. + Skip(upgCtx UpgradeContext) bool +} + +// UpgradeContext contains information about all the stages of the +// upgrade that is going to occur. +type UpgradeContext struct { + Versions []VersionContext +} + +// VersionContext represents a stage of the upgrade. +type VersionContext struct { + Version version.Version + NodeImage string } From 3d050809822612fd1281b78b9e49956a5e911677 Mon Sep 17 00:00:00 2001 From: Kris Date: Wed, 15 Mar 2017 14:59:23 -0700 Subject: [PATCH 4/4] Skip AppArmor tests on unsupported distros --- test/e2e/common/apparmor.go | 5 ++++- test/e2e/upgrades/apparmor.go | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/test/e2e/common/apparmor.go b/test/e2e/common/apparmor.go index 914f0daf8cf..68906cf70b8 100644 --- a/test/e2e/common/apparmor.go +++ b/test/e2e/common/apparmor.go @@ -32,8 +32,11 @@ const ( appArmorDeniedPath = "/expect_permission_denied" ) +// AppArmorDistros are distros with AppArmor support +var AppArmorDistros = []string{"gci", "ubuntu"} + func SkipIfAppArmorNotSupported() { - framework.SkipUnlessNodeOSDistroIs("gci", "ubuntu") + framework.SkipUnlessNodeOSDistroIs(AppArmorDistros...) } func LoadAppArmorProfiles(f *framework.Framework) { diff --git a/test/e2e/upgrades/apparmor.go b/test/e2e/upgrades/apparmor.go index 44cf56aba71..fe8fdc689eb 100644 --- a/test/e2e/upgrades/apparmor.go +++ b/test/e2e/upgrades/apparmor.go @@ -34,9 +34,22 @@ type AppArmorUpgradeTest struct { func (AppArmorUpgradeTest) Name() string { return "apparmor-upgrade" } +func (AppArmorUpgradeTest) Skip(upgCtx UpgradeContext) bool { + var supportedImages map[string]bool + for _, d := range common.AppArmorDistros { + supportedImages[d] = true + } + + for _, vCtx := range upgCtx.Versions { + if !supportedImages[vCtx.NodeImage] { + return true + } + } + return false +} + // Setup creates a secret and then verifies that a pod can consume it. func (t *AppArmorUpgradeTest) Setup(f *framework.Framework) { - common.SkipIfAppArmorNotSupported() By("Loading AppArmor profiles to nodes") common.LoadAppArmorProfiles(f)