Switch test manifests to apps/v1, remove beta workloads calls
This commit is contained in:
@@ -18,7 +18,6 @@ package deployment
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
@@ -168,25 +167,7 @@ func TestDeploymentRollingUpdate(t *testing.T) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// 2. Roll back to the last revision.
|
||||
revision := int64(0)
|
||||
rollback := newDeploymentRollback(tester.deployment.Name, nil, revision)
|
||||
if err = c.ExtensionsV1beta1().Deployments(ns.Name).Rollback(rollback); err != nil {
|
||||
t.Fatalf("failed to roll back deployment %s to last revision: %v", tester.deployment.Name, err)
|
||||
}
|
||||
// Wait for the deployment to start rolling back
|
||||
if err = tester.waitForDeploymentRollbackCleared(); err != nil {
|
||||
t.Fatalf("failed to roll back deployment %s to last revision: %v", tester.deployment.Name, err)
|
||||
}
|
||||
// Wait for the deployment to be rolled back to the template stored in revision 1 and rolled forward to revision 3.
|
||||
if err := tester.waitForDeploymentRevisionAndImage("3", oriImage); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := tester.waitForDeploymentCompleteAndCheckRollingAndMarkPodsReady(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// 3. Roll over a deployment before the previous rolling update finishes.
|
||||
// 2. Roll over a deployment before the previous rolling update finishes.
|
||||
image = "dont-finish"
|
||||
imageFn = func(update *apps.Deployment) {
|
||||
update.Spec.Template.Spec.Containers[0].Image = image
|
||||
@@ -195,9 +176,10 @@ func TestDeploymentRollingUpdate(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("failed to update deployment %s: %v", tester.deployment.Name, err)
|
||||
}
|
||||
if err := tester.waitForDeploymentRevisionAndImage("4", image); err != nil {
|
||||
if err := tester.waitForDeploymentRevisionAndImage("3", image); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// We don't mark pods as ready so that rollout won't finish.
|
||||
// Before the rollout finishes, trigger another rollout.
|
||||
image = "rollover"
|
||||
@@ -208,7 +190,7 @@ func TestDeploymentRollingUpdate(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("failed to update deployment %s: %v", tester.deployment.Name, err)
|
||||
}
|
||||
if err := tester.waitForDeploymentRevisionAndImage("5", image); err != nil {
|
||||
if err := tester.waitForDeploymentRevisionAndImage("4", image); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := tester.waitForDeploymentCompleteAndCheckRollingAndMarkPodsReady(); err != nil {
|
||||
@@ -240,62 +222,11 @@ func TestDeploymentSelectorImmutability(t *testing.T) {
|
||||
t.Fatalf("failed to create apps/v1 deployment %s: %v", tester.deployment.Name, err)
|
||||
}
|
||||
|
||||
// test to ensure extensions/v1beta1 selector is mutable
|
||||
// TODO: drop the extensions/v1beta1 portion of this test when extensions/v1beta1 is no longer served
|
||||
newSelectorLabels := map[string]string{"name_extensions_v1beta1": "test_extensions_v1beta1"}
|
||||
deploymentExtensionsV1beta1, err := c.ExtensionsV1beta1().Deployments(ns.Name).Get(name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
t.Fatalf("failed to get extensions/v1beta deployment %s: %v", name, err)
|
||||
}
|
||||
deploymentExtensionsV1beta1.Spec.Selector.MatchLabels = newSelectorLabels
|
||||
deploymentExtensionsV1beta1.Spec.Template.Labels = newSelectorLabels
|
||||
updatedDeploymentExtensionsV1beta1, err := c.ExtensionsV1beta1().Deployments(ns.Name).Update(deploymentExtensionsV1beta1)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to update extensions/v1beta1 deployment %s: %v", deploymentExtensionsV1beta1.Name, err)
|
||||
}
|
||||
if !reflect.DeepEqual(updatedDeploymentExtensionsV1beta1.Spec.Selector.MatchLabels, newSelectorLabels) {
|
||||
t.Errorf("selector should be changed for extensions/v1beta1, expected: %v, got: %v", newSelectorLabels, updatedDeploymentExtensionsV1beta1.Spec.Selector.MatchLabels)
|
||||
}
|
||||
|
||||
// test to ensure apps/v1beta1 selector is mutable
|
||||
deploymentAppsV1beta1, err := c.AppsV1beta1().Deployments(ns.Name).Get(updatedDeploymentExtensionsV1beta1.Name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
t.Fatalf("failed to get apps/v1beta1 deployment %s: %v", updatedDeploymentExtensionsV1beta1.Name, err)
|
||||
}
|
||||
|
||||
newSelectorLabels = map[string]string{"name_apps_v1beta1": "test_apps_v1beta1"}
|
||||
deploymentAppsV1beta1.Spec.Selector.MatchLabels = newSelectorLabels
|
||||
deploymentAppsV1beta1.Spec.Template.Labels = newSelectorLabels
|
||||
updatedDeploymentAppsV1beta1, err := c.AppsV1beta1().Deployments(ns.Name).Update(deploymentAppsV1beta1)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to update apps/v1beta1 deployment %s: %v", deploymentAppsV1beta1.Name, err)
|
||||
}
|
||||
if !reflect.DeepEqual(updatedDeploymentAppsV1beta1.Spec.Selector.MatchLabels, newSelectorLabels) {
|
||||
t.Errorf("selector should be changed for apps/v1beta1, expected: %v, got: %v", newSelectorLabels, updatedDeploymentAppsV1beta1.Spec.Selector.MatchLabels)
|
||||
}
|
||||
|
||||
// test to ensure apps/v1beta2 selector is immutable
|
||||
deploymentAppsV1beta2, err := c.AppsV1beta2().Deployments(ns.Name).Get(updatedDeploymentAppsV1beta1.Name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
t.Fatalf("failed to get apps/v1beta2 deployment %s: %v", updatedDeploymentAppsV1beta1.Name, err)
|
||||
}
|
||||
newSelectorLabels = map[string]string{"name_apps_v1beta2": "test_apps_v1beta2"}
|
||||
deploymentAppsV1beta2.Spec.Selector.MatchLabels = newSelectorLabels
|
||||
deploymentAppsV1beta2.Spec.Template.Labels = newSelectorLabels
|
||||
_, err = c.AppsV1beta2().Deployments(ns.Name).Update(deploymentAppsV1beta2)
|
||||
if err == nil {
|
||||
t.Fatalf("failed to provide validation error when changing immutable selector when updating apps/v1beta2 deployment %s", deploymentAppsV1beta2.Name)
|
||||
}
|
||||
expectedErrType := "Invalid value"
|
||||
expectedErrDetail := "field is immutable"
|
||||
if !strings.Contains(err.Error(), expectedErrType) || !strings.Contains(err.Error(), expectedErrDetail) {
|
||||
t.Errorf("error message does not match, expected type: %s, expected detail: %s, got: %s", expectedErrType, expectedErrDetail, err.Error())
|
||||
}
|
||||
|
||||
// test to ensure apps/v1 selector is immutable
|
||||
deploymentAppsV1, err := c.AppsV1().Deployments(ns.Name).Get(updatedDeploymentAppsV1beta1.Name, metav1.GetOptions{})
|
||||
newSelectorLabels := map[string]string{"name_apps_v1beta1": "test_apps_v1beta1"}
|
||||
deploymentAppsV1, err := c.AppsV1().Deployments(ns.Name).Get(name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
t.Fatalf("failed to get apps/v1 deployment %s: %v", updatedDeploymentAppsV1beta1.Name, err)
|
||||
t.Fatalf("failed to get apps/v1 deployment %s: %v", name, err)
|
||||
}
|
||||
newSelectorLabels = map[string]string{"name_apps_v1": "test_apps_v1"}
|
||||
deploymentAppsV1.Spec.Selector.MatchLabels = newSelectorLabels
|
||||
@@ -304,6 +235,8 @@ func TestDeploymentSelectorImmutability(t *testing.T) {
|
||||
if err == nil {
|
||||
t.Fatalf("failed to provide validation error when changing immutable selector when updating apps/v1 deployment %s", deploymentAppsV1.Name)
|
||||
}
|
||||
expectedErrType := "Invalid value"
|
||||
expectedErrDetail := "field is immutable"
|
||||
if !strings.Contains(err.Error(), expectedErrType) || !strings.Contains(err.Error(), expectedErrDetail) {
|
||||
t.Errorf("error message does not match, expected type: %s, expected detail: %s, got: %s", expectedErrType, expectedErrDetail, err.Error())
|
||||
}
|
||||
@@ -555,124 +488,6 @@ func TestDeploymentHashCollision(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// Deployment supports rollback even when there's old replica set without revision.
|
||||
// TODO: drop this test when extensions/v1beta1 is no longer served
|
||||
func TestRollbackDeploymentRSNoRevision(t *testing.T) {
|
||||
s, closeFn, rm, dc, informers, c := dcSetup(t)
|
||||
defer closeFn()
|
||||
name := "test-rollback-no-revision-deployment"
|
||||
ns := framework.CreateTestingNamespace(name, s, t)
|
||||
defer framework.DeleteTestingNamespace(ns, s, t)
|
||||
|
||||
// Create an old RS without revision
|
||||
rsName := "test-rollback-no-revision-controller"
|
||||
rsReplicas := int32(1)
|
||||
rs := newReplicaSet(rsName, ns.Name, rsReplicas)
|
||||
rs.Annotations = make(map[string]string)
|
||||
rs.Annotations["make"] = "difference"
|
||||
rs.Spec.Template.Spec.Containers[0].Image = "different-image"
|
||||
_, err := c.AppsV1().ReplicaSets(ns.Name).Create(rs)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create replicaset %s: %v", rsName, err)
|
||||
}
|
||||
|
||||
replicas := int32(1)
|
||||
tester := &deploymentTester{t: t, c: c, deployment: newDeployment(name, ns.Name, replicas)}
|
||||
oriImage := tester.deployment.Spec.Template.Spec.Containers[0].Image
|
||||
// Set absolute rollout limits (defaults changed to percentages)
|
||||
max := intstr.FromInt(1)
|
||||
tester.deployment.Spec.Strategy.RollingUpdate.MaxUnavailable = &max
|
||||
tester.deployment.Spec.Strategy.RollingUpdate.MaxSurge = &max
|
||||
|
||||
// Create a deployment which have different template than the replica set created above.
|
||||
if tester.deployment, err = c.AppsV1().Deployments(ns.Name).Create(tester.deployment); err != nil {
|
||||
t.Fatalf("failed to create deployment %s: %v", tester.deployment.Name, err)
|
||||
}
|
||||
|
||||
// Start informer and controllers
|
||||
stopCh := make(chan struct{})
|
||||
defer close(stopCh)
|
||||
informers.Start(stopCh)
|
||||
go rm.Run(5, stopCh)
|
||||
go dc.Run(5, stopCh)
|
||||
|
||||
// Wait for the Deployment to be updated to revision 1
|
||||
if err = tester.waitForDeploymentRevisionAndImage("1", fakeImage); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// 1. Rollback to the last revision
|
||||
// Since there's only 1 revision in history, it should still be revision 1
|
||||
revision := int64(0)
|
||||
rollback := newDeploymentRollback(tester.deployment.Name, nil, revision)
|
||||
if err = c.ExtensionsV1beta1().Deployments(ns.Name).Rollback(rollback); err != nil {
|
||||
t.Fatalf("failed to roll back deployment %s to last revision: %v", tester.deployment.Name, err)
|
||||
}
|
||||
|
||||
// Wait for the deployment to start rolling back
|
||||
if err = tester.waitForDeploymentRollbackCleared(); err != nil {
|
||||
t.Fatalf("failed to roll back deployment %s to last revision: %v", tester.deployment.Name, err)
|
||||
}
|
||||
// TODO: report RollbackRevisionNotFound in deployment status and check it here
|
||||
|
||||
// The pod template shouldn't change since there's no last revision
|
||||
// Check if the deployment is still revision 1 and still has the old pod template
|
||||
err = tester.checkDeploymentRevisionAndImage("1", oriImage)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// 2. Update the deployment to revision 2.
|
||||
updatedImage := "update"
|
||||
tester.deployment, err = tester.updateDeployment(func(update *apps.Deployment) {
|
||||
update.Spec.Template.Spec.Containers[0].Name = updatedImage
|
||||
update.Spec.Template.Spec.Containers[0].Image = updatedImage
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("failed updating deployment %s: %v", tester.deployment.Name, err)
|
||||
}
|
||||
|
||||
// Use observedGeneration to determine if the controller noticed the pod template update.
|
||||
// Wait for the controller to notice the resume.
|
||||
if err = tester.waitForObservedDeployment(tester.deployment.Generation); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Wait for it to be updated to revision 2
|
||||
if err = tester.waitForDeploymentRevisionAndImage("2", updatedImage); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Wait for the Deployment to complete while manually marking Deployment pods as ready at the same time
|
||||
if err = tester.waitForDeploymentCompleteAndCheckRollingAndMarkPodsReady(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// 3. Update the deploymentRollback to rollback to revision 1
|
||||
revision = int64(1)
|
||||
rollback = newDeploymentRollback(tester.deployment.Name, nil, revision)
|
||||
if err = c.ExtensionsV1beta1().Deployments(ns.Name).Rollback(rollback); err != nil {
|
||||
t.Fatalf("failed to roll back deployment %s to revision %d: %v", tester.deployment.Name, revision, err)
|
||||
}
|
||||
|
||||
// Wait for the deployment to start rolling back
|
||||
if err = tester.waitForDeploymentRollbackCleared(); err != nil {
|
||||
t.Fatalf("failed to roll back deployment %s to revision %d: %v", tester.deployment.Name, revision, err)
|
||||
}
|
||||
// TODO: report RollbackDone in deployment status and check it here
|
||||
|
||||
// The pod template should be updated to the one in revision 1
|
||||
// Wait for it to be updated to revision 3
|
||||
if err = tester.waitForDeploymentRevisionAndImage("3", oriImage); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// Wait for the Deployment to complete while manually marking Deployment pods as ready at the same time
|
||||
if err = tester.waitForDeploymentCompleteAndCheckRollingAndMarkPodsReady(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func checkRSHashLabels(rs *apps.ReplicaSet) (string, error) {
|
||||
hash := rs.Labels[apps.DefaultDeploymentUniqueLabelKey]
|
||||
selectorHash := rs.Spec.Selector.MatchLabels[apps.DefaultDeploymentUniqueLabelKey]
|
||||
|
Reference in New Issue
Block a user