mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 21:47:07 +00:00
Merge pull request #42588 from krousey/upgrades
Automatic merge from submit-queue Create "framework" per upgrade test There were already a few tests just using the default framework namespace instead of creating a new one. Also there are several testing libraries that use the default framework's default namespace as well. It's just easier this way.
This commit is contained in:
commit
d6ae61c3c9
@ -45,6 +45,13 @@ var upgradeTests = []upgrades.Test{
|
|||||||
var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() {
|
var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() {
|
||||||
f := framework.NewDefaultFramework("cluster-upgrade")
|
f := framework.NewDefaultFramework("cluster-upgrade")
|
||||||
|
|
||||||
|
// Create the frameworks here because we can only create them
|
||||||
|
// in a "Describe".
|
||||||
|
testFrameworks := map[string]*framework.Framework{}
|
||||||
|
for _, t := range upgradeTests {
|
||||||
|
testFrameworks[t.Name()] = framework.NewDefaultFramework(t.Name())
|
||||||
|
}
|
||||||
|
|
||||||
framework.KubeDescribe("master upgrade", func() {
|
framework.KubeDescribe("master upgrade", func() {
|
||||||
It("should maintain a functioning cluster [Feature:MasterUpgrade]", func() {
|
It("should maintain a functioning cluster [Feature:MasterUpgrade]", func() {
|
||||||
cm := chaosmonkey.New(func() {
|
cm := chaosmonkey.New(func() {
|
||||||
@ -56,7 +63,7 @@ var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() {
|
|||||||
for _, t := range upgradeTests {
|
for _, t := range upgradeTests {
|
||||||
cm.RegisterInterface(&chaosMonkeyAdapter{
|
cm.RegisterInterface(&chaosMonkeyAdapter{
|
||||||
test: t,
|
test: t,
|
||||||
framework: f,
|
framework: testFrameworks[t.Name()],
|
||||||
upgradeType: upgrades.MasterUpgrade,
|
upgradeType: upgrades.MasterUpgrade,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -76,7 +83,7 @@ var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() {
|
|||||||
for _, t := range upgradeTests {
|
for _, t := range upgradeTests {
|
||||||
cm.RegisterInterface(&chaosMonkeyAdapter{
|
cm.RegisterInterface(&chaosMonkeyAdapter{
|
||||||
test: t,
|
test: t,
|
||||||
framework: f,
|
framework: testFrameworks[t.Name()],
|
||||||
upgradeType: upgrades.NodeUpgrade,
|
upgradeType: upgrades.NodeUpgrade,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -97,7 +104,7 @@ var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() {
|
|||||||
for _, t := range upgradeTests {
|
for _, t := range upgradeTests {
|
||||||
cm.RegisterInterface(&chaosMonkeyAdapter{
|
cm.RegisterInterface(&chaosMonkeyAdapter{
|
||||||
test: t,
|
test: t,
|
||||||
framework: f,
|
framework: testFrameworks[t.Name()],
|
||||||
upgradeType: upgrades.ClusterUpgrade,
|
upgradeType: upgrades.ClusterUpgrade,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -107,7 +114,12 @@ var _ = framework.KubeDescribe("Upgrade [Feature:Upgrade]", func() {
|
|||||||
})
|
})
|
||||||
|
|
||||||
var _ = framework.KubeDescribe("etcd Upgrade [Feature:EtcdUpgrade]", func() {
|
var _ = framework.KubeDescribe("etcd Upgrade [Feature:EtcdUpgrade]", func() {
|
||||||
f := framework.NewDefaultFramework("etcd-upgrade")
|
// Create the frameworks here because we can only create them
|
||||||
|
// in a "Describe".
|
||||||
|
testFrameworks := map[string]*framework.Framework{}
|
||||||
|
for _, t := range upgradeTests {
|
||||||
|
testFrameworks[t.Name()] = framework.NewDefaultFramework(t.Name())
|
||||||
|
}
|
||||||
|
|
||||||
framework.KubeDescribe("etcd upgrade", func() {
|
framework.KubeDescribe("etcd upgrade", func() {
|
||||||
It("should maintain a functioning cluster", func() {
|
It("should maintain a functioning cluster", func() {
|
||||||
@ -118,7 +130,7 @@ var _ = framework.KubeDescribe("etcd Upgrade [Feature:EtcdUpgrade]", func() {
|
|||||||
for _, t := range upgradeTests {
|
for _, t := range upgradeTests {
|
||||||
cm.RegisterInterface(&chaosMonkeyAdapter{
|
cm.RegisterInterface(&chaosMonkeyAdapter{
|
||||||
test: t,
|
test: t,
|
||||||
framework: f,
|
framework: testFrameworks[t.Name()],
|
||||||
upgradeType: upgrades.EtcdUpgrade,
|
upgradeType: upgrades.EtcdUpgrade,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -33,13 +33,13 @@ type ConfigMapUpgradeTest struct {
|
|||||||
configMap *v1.ConfigMap
|
configMap *v1.ConfigMap
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ConfigMapUpgradeTest) Name() string { return "configmap-upgrade" }
|
||||||
|
|
||||||
// Setup creates a ConfigMap and then verifies that a pod can consume it.
|
// Setup creates a ConfigMap and then verifies that a pod can consume it.
|
||||||
func (t *ConfigMapUpgradeTest) Setup(f *framework.Framework) {
|
func (t *ConfigMapUpgradeTest) Setup(f *framework.Framework) {
|
||||||
configMapName := "upgrade-configmap"
|
configMapName := "upgrade-configmap"
|
||||||
|
|
||||||
// Grab a unique namespace so we don't collide.
|
ns := f.Namespace
|
||||||
ns, err := f.CreateNamespace("configmap-upgrade", nil)
|
|
||||||
framework.ExpectNoError(err)
|
|
||||||
|
|
||||||
t.configMap = &v1.ConfigMap{
|
t.configMap = &v1.ConfigMap{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
@ -52,6 +52,7 @@ func (t *ConfigMapUpgradeTest) Setup(f *framework.Framework) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
By("Creating a ConfigMap")
|
By("Creating a ConfigMap")
|
||||||
|
var err error
|
||||||
if t.configMap, err = f.ClientSet.Core().ConfigMaps(ns.Name).Create(t.configMap); err != nil {
|
if t.configMap, err = f.ClientSet.Core().ConfigMaps(ns.Name).Create(t.configMap); err != nil {
|
||||||
framework.Failf("unable to create test ConfigMap %s: %v", t.configMap.Name, err)
|
framework.Failf("unable to create test ConfigMap %s: %v", t.configMap.Name, err)
|
||||||
}
|
}
|
||||||
|
@ -36,16 +36,15 @@ type DaemonSetUpgradeTest struct {
|
|||||||
daemonSet *extensions.DaemonSet
|
daemonSet *extensions.DaemonSet
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (DaemonSetUpgradeTest) Name() string { return "daemonset-upgrade" }
|
||||||
|
|
||||||
// Setup creates a DaemonSet and verifies that it's running
|
// Setup creates a DaemonSet and verifies that it's running
|
||||||
func (t *DaemonSetUpgradeTest) Setup(f *framework.Framework) {
|
func (t *DaemonSetUpgradeTest) Setup(f *framework.Framework) {
|
||||||
namespace := "daemonset-upgrade"
|
|
||||||
daemonSetName := "ds1"
|
daemonSetName := "ds1"
|
||||||
labelSet := map[string]string{"ds-name": daemonSetName}
|
labelSet := map[string]string{"ds-name": daemonSetName}
|
||||||
image := "gcr.io/google_containers/serve_hostname:v1.4"
|
image := "gcr.io/google_containers/serve_hostname:v1.4"
|
||||||
|
|
||||||
// Grab a unique namespace so we don't collide.
|
ns := f.Namespace
|
||||||
ns, err := f.CreateNamespace(namespace, nil)
|
|
||||||
framework.ExpectNoError(err)
|
|
||||||
|
|
||||||
t.daemonSet = &extensions.DaemonSet{
|
t.daemonSet = &extensions.DaemonSet{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
@ -71,6 +70,7 @@ func (t *DaemonSetUpgradeTest) Setup(f *framework.Framework) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
By("Creating a DaemonSet")
|
By("Creating a DaemonSet")
|
||||||
|
var err error
|
||||||
if t.daemonSet, err = f.ClientSet.Extensions().DaemonSets(ns.Name).Create(t.daemonSet); err != nil {
|
if t.daemonSet, err = f.ClientSet.Extensions().DaemonSets(ns.Name).Create(t.daemonSet); err != nil {
|
||||||
framework.Failf("unable to create test DaemonSet %s: %v", t.daemonSet.Name, err)
|
framework.Failf("unable to create test DaemonSet %s: %v", t.daemonSet.Name, err)
|
||||||
}
|
}
|
||||||
|
@ -39,16 +39,15 @@ type DeploymentUpgradeTest struct {
|
|||||||
newRS *extensions.ReplicaSet
|
newRS *extensions.ReplicaSet
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (DeploymentUpgradeTest) Name() string { return "deployment-upgrade" }
|
||||||
|
|
||||||
// Setup creates a deployment and makes sure it has a new and an old replica set running.
|
// Setup creates a deployment and makes sure it has a new and an old replica set running.
|
||||||
func (t *DeploymentUpgradeTest) Setup(f *framework.Framework) {
|
func (t *DeploymentUpgradeTest) Setup(f *framework.Framework) {
|
||||||
deploymentName := "deployment-hash-test"
|
deploymentName := "deployment-hash-test"
|
||||||
c := f.ClientSet
|
c := f.ClientSet
|
||||||
nginxImage := "gcr.io/google_containers/nginx-slim:0.8"
|
nginxImage := "gcr.io/google_containers/nginx-slim:0.8"
|
||||||
|
|
||||||
// Grab a unique namespace so we don't collide.
|
ns := f.Namespace.Name
|
||||||
namespace, err := f.CreateNamespace("deployment-upgrade", nil)
|
|
||||||
framework.ExpectNoError(err)
|
|
||||||
ns := namespace.Name
|
|
||||||
|
|
||||||
By(fmt.Sprintf("Creating a deployment %q in namespace %q", deploymentName, ns))
|
By(fmt.Sprintf("Creating a deployment %q in namespace %q", deploymentName, ns))
|
||||||
d := framework.NewDeployment(deploymentName, int32(1), map[string]string{"test": "upgrade"}, "nginx", nginxImage, extensions.RollingUpdateDeploymentStrategyType)
|
d := framework.NewDeployment(deploymentName, int32(1), map[string]string{"test": "upgrade"}, "nginx", nginxImage, extensions.RollingUpdateDeploymentStrategyType)
|
||||||
|
@ -18,6 +18,7 @@ package upgrades
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"k8s.io/kubernetes/test/e2e/common"
|
"k8s.io/kubernetes/test/e2e/common"
|
||||||
"k8s.io/kubernetes/test/e2e/framework"
|
"k8s.io/kubernetes/test/e2e/framework"
|
||||||
|
|
||||||
@ -29,6 +30,8 @@ type HPAUpgradeTest struct {
|
|||||||
rc *common.ResourceConsumer
|
rc *common.ResourceConsumer
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (HPAUpgradeTest) Name() string { return "hpa-upgrade" }
|
||||||
|
|
||||||
// Creates a resource consumer and an HPA object that autoscales the consumer.
|
// Creates a resource consumer and an HPA object that autoscales the consumer.
|
||||||
func (t *HPAUpgradeTest) Setup(f *framework.Framework) {
|
func (t *HPAUpgradeTest) Setup(f *framework.Framework) {
|
||||||
t.rc = common.NewDynamicResourceConsumer(
|
t.rc = common.NewDynamicResourceConsumer(
|
||||||
|
@ -36,6 +36,8 @@ type IngressUpgradeTest struct {
|
|||||||
ipName string
|
ipName string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (IngressUpgradeTest) Name() string { return "ingress-upgrade" }
|
||||||
|
|
||||||
// Setup creates a GLBC, allocates an ip, and an ingress resource,
|
// Setup creates a GLBC, allocates an ip, and an ingress resource,
|
||||||
// then waits for a successful connectivity check to the ip.
|
// then waits for a successful connectivity check to the ip.
|
||||||
func (t *IngressUpgradeTest) Setup(f *framework.Framework) {
|
func (t *IngressUpgradeTest) Setup(f *framework.Framework) {
|
||||||
@ -44,8 +46,7 @@ func (t *IngressUpgradeTest) Setup(f *framework.Framework) {
|
|||||||
// jig handles all Kubernetes testing logic
|
// jig handles all Kubernetes testing logic
|
||||||
jig := framework.NewIngressTestJig(f.ClientSet)
|
jig := framework.NewIngressTestJig(f.ClientSet)
|
||||||
|
|
||||||
ns, err := f.CreateNamespace("ingress-upgrade", nil)
|
ns := f.Namespace
|
||||||
framework.ExpectNoError(err)
|
|
||||||
|
|
||||||
// gceController handles all cloud testing logic
|
// gceController handles all cloud testing logic
|
||||||
gceController := &framework.GCEIngressController{
|
gceController := &framework.GCEIngressController{
|
||||||
|
@ -31,11 +31,11 @@ type JobUpgradeTest struct {
|
|||||||
namespace string
|
namespace string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (JobUpgradeTest) Name() string { return "job-upgrade" }
|
||||||
|
|
||||||
// Setup starts a Job with a parallelism of 2 and 2 completions running.
|
// Setup starts a Job with a parallelism of 2 and 2 completions running.
|
||||||
func (t *JobUpgradeTest) Setup(f *framework.Framework) {
|
func (t *JobUpgradeTest) Setup(f *framework.Framework) {
|
||||||
ns, err := f.CreateNamespace("service-upgrade", nil)
|
t.namespace = f.Namespace.Name
|
||||||
Expect(err).NotTo(HaveOccurred())
|
|
||||||
t.namespace = ns.Name
|
|
||||||
|
|
||||||
By("Creating a job")
|
By("Creating a job")
|
||||||
t.job = framework.NewTestJob("notTerminate", "foo", v1.RestartPolicyOnFailure, 2, 2)
|
t.job = framework.NewTestJob("notTerminate", "foo", v1.RestartPolicyOnFailure, 2, 2)
|
||||||
|
@ -30,6 +30,8 @@ type PersistentVolumeUpgradeTest struct {
|
|||||||
pvc *v1.PersistentVolumeClaim
|
pvc *v1.PersistentVolumeClaim
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (PersistentVolumeUpgradeTest) Name() string { return "persistent-volume-upgrade" }
|
||||||
|
|
||||||
const (
|
const (
|
||||||
pvTestFile string = "/mnt/pv_upgrade_test"
|
pvTestFile string = "/mnt/pv_upgrade_test"
|
||||||
pvTestData string = "keep it pv"
|
pvTestData string = "keep it pv"
|
||||||
|
@ -33,13 +33,13 @@ type SecretUpgradeTest struct {
|
|||||||
secret *v1.Secret
|
secret *v1.Secret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (SecretUpgradeTest) Name() string { return "secret-upgrade" }
|
||||||
|
|
||||||
// Setup creates a secret and then verifies that a pod can consume it.
|
// Setup creates a secret and then verifies that a pod can consume it.
|
||||||
func (t *SecretUpgradeTest) Setup(f *framework.Framework) {
|
func (t *SecretUpgradeTest) Setup(f *framework.Framework) {
|
||||||
secretName := "upgrade-secret"
|
secretName := "upgrade-secret"
|
||||||
|
|
||||||
// Grab a unique namespace so we don't collide.
|
ns := f.Namespace
|
||||||
ns, err := f.CreateNamespace("secret-upgrade", nil)
|
|
||||||
framework.ExpectNoError(err)
|
|
||||||
|
|
||||||
t.secret = &v1.Secret{
|
t.secret = &v1.Secret{
|
||||||
ObjectMeta: metav1.ObjectMeta{
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
@ -52,6 +52,7 @@ func (t *SecretUpgradeTest) Setup(f *framework.Framework) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
By("Creating a secret")
|
By("Creating a secret")
|
||||||
|
var err error
|
||||||
if t.secret, err = f.ClientSet.Core().Secrets(ns.Name).Create(t.secret); err != nil {
|
if t.secret, err = f.ClientSet.Core().Secrets(ns.Name).Create(t.secret); err != nil {
|
||||||
framework.Failf("unable to create test secret %s: %v", t.secret.Name, err)
|
framework.Failf("unable to create test secret %s: %v", t.secret.Name, err)
|
||||||
}
|
}
|
||||||
|
@ -34,14 +34,14 @@ type ServiceUpgradeTest struct {
|
|||||||
svcPort int
|
svcPort int
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ServiceUpgradeTest) Name() string { return "service-upgrade" }
|
||||||
|
|
||||||
// Setup creates a service with a load balancer and makes sure it's reachable.
|
// Setup creates a service with a load balancer and makes sure it's reachable.
|
||||||
func (t *ServiceUpgradeTest) Setup(f *framework.Framework) {
|
func (t *ServiceUpgradeTest) Setup(f *framework.Framework) {
|
||||||
serviceName := "service-test"
|
serviceName := "service-test"
|
||||||
jig := framework.NewServiceTestJig(f.ClientSet, serviceName)
|
jig := framework.NewServiceTestJig(f.ClientSet, serviceName)
|
||||||
|
|
||||||
// Grab a unique namespace so we don't collide.
|
ns := f.Namespace
|
||||||
ns, err := f.CreateNamespace("service-upgrade", nil)
|
|
||||||
framework.ExpectNoError(err)
|
|
||||||
|
|
||||||
By("creating a TCP service " + serviceName + " with type=LoadBalancer in namespace " + ns.Name)
|
By("creating a TCP service " + serviceName + " with type=LoadBalancer in namespace " + ns.Name)
|
||||||
tcpService := jig.CreateTCPServiceOrFail(ns.Name, func(s *v1.Service) {
|
tcpService := jig.CreateTCPServiceOrFail(ns.Name, func(s *v1.Service) {
|
||||||
|
@ -33,6 +33,8 @@ type StatefulSetUpgradeTest struct {
|
|||||||
set *apps.StatefulSet
|
set *apps.StatefulSet
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (StatefulSetUpgradeTest) Name() string { return "statefulset-upgrade" }
|
||||||
|
|
||||||
// Setup creates a StatefulSet and a HeadlessService. It verifies the basic SatefulSet properties
|
// Setup creates a StatefulSet and a HeadlessService. It verifies the basic SatefulSet properties
|
||||||
func (t *StatefulSetUpgradeTest) Setup(f *framework.Framework) {
|
func (t *StatefulSetUpgradeTest) Setup(f *framework.Framework) {
|
||||||
ssName := "ss"
|
ssName := "ss"
|
||||||
|
@ -41,6 +41,9 @@ const (
|
|||||||
|
|
||||||
// Test is an interface for upgrade tests.
|
// Test is an interface for upgrade tests.
|
||||||
type Test interface {
|
type Test interface {
|
||||||
|
// Name should return a test name sans spaces.
|
||||||
|
Name() string
|
||||||
|
|
||||||
// Setup should create and verify whatever objects need to
|
// Setup should create and verify whatever objects need to
|
||||||
// exist before the upgrade disruption starts.
|
// exist before the upgrade disruption starts.
|
||||||
Setup(f *framework.Framework)
|
Setup(f *framework.Framework)
|
||||||
|
Loading…
Reference in New Issue
Block a user