From eb96b28004481c91cfaebffa240b26f91609fdf9 Mon Sep 17 00:00:00 2001 From: Janet Kuo Date: Fri, 15 Apr 2016 15:20:41 -0700 Subject: [PATCH] Avoid relying on events in deployment rollover e2e test --- test/e2e/deployment.go | 14 +++++++------- test/e2e/framework/util.go | 20 +++++++++++++++++++- 2 files changed, 26 insertions(+), 8 deletions(-) diff --git a/test/e2e/deployment.go b/test/e2e/deployment.go index d9a8fb87493..c2791de04ae 100644 --- a/test/e2e/deployment.go +++ b/test/e2e/deployment.go @@ -175,25 +175,25 @@ func stopDeployment(c *clientset.Clientset, oldC client.Interface, ns, deploymen deployment, err := c.Extensions().Deployments(ns).Get(deploymentName) Expect(err).NotTo(HaveOccurred()) - framework.Logf("deleting deployment %s", deploymentName) + framework.Logf("Deleting deployment %s", deploymentName) reaper, err := kubectl.ReaperFor(extensions.Kind("Deployment"), oldC) Expect(err).NotTo(HaveOccurred()) timeout := 1 * time.Minute err = reaper.Stop(ns, deployment.Name, timeout, api.NewDeleteOptions(0)) Expect(err).NotTo(HaveOccurred()) - framework.Logf("ensuring deployment %s was deleted", deploymentName) + framework.Logf("Ensuring deployment %s was deleted", deploymentName) _, err = c.Extensions().Deployments(ns).Get(deployment.Name) Expect(err).To(HaveOccurred()) Expect(errors.IsNotFound(err)).To(BeTrue()) - framework.Logf("ensuring deployment %s RSes were deleted", deploymentName) + framework.Logf("Ensuring deployment %s's RSes were deleted", deploymentName) selector, err := unversioned.LabelSelectorAsSelector(deployment.Spec.Selector) Expect(err).NotTo(HaveOccurred()) options := api.ListOptions{LabelSelector: selector} rss, err := c.Extensions().ReplicaSets(ns).List(options) Expect(err).NotTo(HaveOccurred()) Expect(rss.Items).Should(HaveLen(0)) - framework.Logf("ensuring deployment %s pods were deleted", deploymentName) + framework.Logf("Ensuring deployment %s's Pods were deleted", deploymentName) var pods *api.PodList if err := wait.PollImmediate(time.Second, wait.ForeverTestTimeout, func() (bool, error) { pods, err = c.Core().Pods(ns).List(api.ListOptions{}) @@ -529,11 +529,11 @@ func testRolloverDeployment(f *framework.Framework) { Expect(err).NotTo(HaveOccurred()) defer stopDeployment(c, f.Client, ns, deploymentName) - // Verify that the pods were scaled up and down as expected. We use events to verify that. + // Verify that the pods were scaled up and down as expected. deployment, err := c.Extensions().Deployments(ns).Get(deploymentName) Expect(err).NotTo(HaveOccurred()) - // Make sure the deployment starts to scale up and down replica sets - framework.WaitForPartialEvents(unversionedClient, ns, deployment, 2) + // Make sure the deployment starts to scale up and down replica sets by checking if its updated replicas >= 1 + err = framework.WaitForDeploymentUpdatedReplicasLTE(c, ns, deploymentName, 1, deployment.Generation) // Check if it's updated to revision 1 correctly _, newRS := checkDeploymentRevision(c, ns, deploymentName, "1", deploymentImageName, deploymentImage) diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index 05b0d3287e0..0d8ebb7db9f 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -2523,6 +2523,24 @@ func WaitForDeploymentStatus(c clientset.Interface, ns, deploymentName string, d return nil } +// WaitForDeploymentUpdatedReplicasLTE waits for given deployment to be observed by the controller and has at least a number of updatedReplicas +func WaitForDeploymentUpdatedReplicasLTE(c clientset.Interface, ns, deploymentName string, minUpdatedReplicas int, desiredGeneration int64) error { + err := wait.Poll(Poll, 5*time.Minute, func() (bool, error) { + deployment, err := c.Extensions().Deployments(ns).Get(deploymentName) + if err != nil { + return false, err + } + if deployment.Status.ObservedGeneration >= desiredGeneration && deployment.Status.UpdatedReplicas >= minUpdatedReplicas { + return true, nil + } + return false, nil + }) + if err != nil { + return fmt.Errorf("error waiting for deployment %s to have at least %d updpatedReplicas: %v", deploymentName, minUpdatedReplicas, err) + } + return nil +} + // WaitForDeploymentRollbackCleared waits for given deployment either started rolling back or doesn't need to rollback. // Note that rollback should be cleared shortly, so we only wait for 1 minute here to fail early. func WaitForDeploymentRollbackCleared(c clientset.Interface, ns, deploymentName string) error { @@ -2696,7 +2714,7 @@ func UpdateDeploymentWithRetries(c *clientset.Clientset, namespace, name string, // Apply the update, then attempt to push it to the apiserver. applyUpdate(deployment) if deployment, err = deployments.Update(deployment); err == nil { - Logf("updating deployment %s", name) + Logf("Updating deployment %s", name) return true, nil } return false, nil