From 9758a0fedda19abfd2ff8494ff9ce4ed57bef711 Mon Sep 17 00:00:00 2001 From: Jun Xiang Tee Date: Fri, 2 Mar 2018 13:37:58 -0800 Subject: [PATCH] improve daemonset's retry creating failed daemon pods e2e test --- test/e2e/apps/daemon_set.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/e2e/apps/daemon_set.go b/test/e2e/apps/daemon_set.go index eeacc5c0009..dffdcc4e011 100644 --- a/test/e2e/apps/daemon_set.go +++ b/test/e2e/apps/daemon_set.go @@ -24,6 +24,7 @@ import ( apps "k8s.io/api/apps/v1" "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" apierrs "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" @@ -261,6 +262,10 @@ var _ = SIGDescribe("Daemon set [Serial]", func() { Expect(err).NotTo(HaveOccurred(), "error failing a daemon pod") err = wait.PollImmediate(dsRetryPeriod, dsRetryTimeout, checkRunningOnAllNodes(f, ds)) Expect(err).NotTo(HaveOccurred(), "error waiting for daemon pod to revive") + + By("Wait for the failed daemon pod to be completely deleted.") + err = wait.PollImmediate(dsRetryPeriod, dsRetryTimeout, waitFailedDaemonPodDeleted(c, &pod)) + Expect(err).NotTo(HaveOccurred(), "error waiting for the failed daemon pod to be completely deleted") }) // This test should not be added to conformance. We will consider deprecating OnDelete when the @@ -466,6 +471,9 @@ func newDaemonSet(dsName, image string, label map[string]string) *apps.DaemonSet Name: dsName, }, Spec: apps.DaemonSetSpec{ + Selector: &metav1.LabelSelector{ + MatchLabels: label, + }, Template: v1.PodTemplateSpec{ ObjectMeta: metav1.ObjectMeta{ Labels: label, @@ -857,3 +865,15 @@ func curHistory(historyList *apps.ControllerRevisionList, ds *apps.DaemonSet) *a Expect(curHistory).NotTo(BeNil()) return curHistory } + +func waitFailedDaemonPodDeleted(c clientset.Interface, pod *v1.Pod) func() (bool, error) { + return func() (bool, error) { + if _, err := c.CoreV1().Pods(pod.Namespace).Get(pod.Name, metav1.GetOptions{}); err != nil { + if errors.IsNotFound(err) { + return true, nil + } + return false, fmt.Errorf("failed to get failed daemon pod %q: %v", pod.Name, err) + } + return false, nil + } +}