From 130437b94eaef4b672abb7e07a642939b0fb0819 Mon Sep 17 00:00:00 2001 From: Chao Xu Date: Thu, 9 Mar 2017 11:25:05 -0800 Subject: [PATCH] wait for the deletionTimestamp set instead of waiting for the final deletion --- test/e2e/generated_clientset.go | 44 ++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/test/e2e/generated_clientset.go b/test/e2e/generated_clientset.go index c060a717f68..9e2c7950d39 100644 --- a/test/e2e/generated_clientset.go +++ b/test/e2e/generated_clientset.go @@ -120,9 +120,31 @@ func observeObjectDeletion(w watch.Interface) (obj runtime.Object) { return } +func observerUpdate(w watch.Interface, expectedUpdate func(runtime.Object) bool) { + timer := time.After(30 * time.Second) + updated := false + timeout := false + for !updated && !timeout { + select { + case event, _ := <-w.ResultChan(): + if event.Type == watch.Modified { + if expectedUpdate(event.Object) { + updated = true + } + } + case <-timer: + timeout = true + } + } + if !updated { + framework.Failf("Failed to observe pod update") + } + return +} + var _ = framework.KubeDescribe("Generated release_1_5 clientset", func() { f := framework.NewDefaultFramework("clientset") - It("should create pods, delete pods, watch pods", func() { + It("should create pods, set the deletionTimestamp and deletionGracePeriodSeconds of the pod", func() { podClient := f.ClientSet.Core().Pods(f.Namespace.Name) By("constructing the pod") name := "pod" + string(uuid.NewUUID()) @@ -171,22 +193,16 @@ var _ = framework.KubeDescribe("Generated release_1_5 clientset", func() { framework.ExpectNoError(f.WaitForPodRunning(pod.Name)) By("deleting the pod gracefully") - if err := podClient.Delete(pod.Name, metav1.NewDeleteOptions(30)); err != nil { + gracePeriod := int64(31) + if err := podClient.Delete(pod.Name, metav1.NewDeleteOptions(gracePeriod)); err != nil { framework.Failf("Failed to delete pod: %v", err) } - By("verifying pod deletion was observed") - obj := observeObjectDeletion(w) - lastPod := obj.(*v1.Pod) - Expect(lastPod.DeletionTimestamp).ToNot(BeNil()) - Expect(lastPod.Spec.TerminationGracePeriodSeconds).ToNot(BeZero()) - - options = metav1.ListOptions{LabelSelector: selector} - pods, err = podClient.List(options) - if err != nil { - framework.Failf("Failed to list pods to verify deletion: %v", err) - } - Expect(len(pods.Items)).To(Equal(0)) + By("verifying the deletionTimestamp and deletionGracePeriodSeconds of the pod is set") + observerUpdate(w, func(obj runtime.Object) bool { + pod := obj.(*v1.Pod) + return pod.ObjectMeta.DeletionTimestamp != nil && *pod.ObjectMeta.DeletionGracePeriodSeconds == gracePeriod + }) }) })