From 21706384f7e508ef78113d4de9f0673b3b788a3b Mon Sep 17 00:00:00 2001 From: Chao Xu Date: Mon, 16 May 2016 00:14:51 -0700 Subject: [PATCH] use garbage queue drained instead of a watch --- hack/test-integration.sh | 2 +- test/integration/garbage_collector_test.go | 70 ++++++---------------- 2 files changed, 19 insertions(+), 53 deletions(-) diff --git a/hack/test-integration.sh b/hack/test-integration.sh index 0b9844cfe5e..b903eb789dd 100755 --- a/hack/test-integration.sh +++ b/hack/test-integration.sh @@ -34,7 +34,7 @@ KUBE_TEST_API_VERSIONS=${KUBE_TEST_API_VERSIONS:-"v1,extensions/v1beta1;v1,autos # Give integration tests longer to run # TODO: allow a larger value to be passed in #KUBE_TIMEOUT=${KUBE_TIMEOUT:--timeout 240s} -KUBE_TIMEOUT="-timeout 1200s" +KUBE_TIMEOUT="-timeout 600s" KUBE_INTEGRATION_TEST_MAX_CONCURRENCY=${KUBE_INTEGRATION_TEST_MAX_CONCURRENCY:-"-1"} LOG_LEVEL=${LOG_LEVEL:-2} diff --git a/test/integration/garbage_collector_test.go b/test/integration/garbage_collector_test.go index cd2c87e19dc..4ebb5b1ecd4 100644 --- a/test/integration/garbage_collector_test.go +++ b/test/integration/garbage_collector_test.go @@ -28,6 +28,7 @@ import ( "time" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/errors" "k8s.io/kubernetes/pkg/api/unversioned" "k8s.io/kubernetes/pkg/api/v1" clientset "k8s.io/kubernetes/pkg/client/clientset_generated/release_1_3" @@ -37,7 +38,6 @@ import ( "k8s.io/kubernetes/pkg/master" "k8s.io/kubernetes/pkg/types" "k8s.io/kubernetes/pkg/util/wait" - "k8s.io/kubernetes/pkg/watch" "k8s.io/kubernetes/test/integration/framework" ) @@ -102,29 +102,6 @@ func newOwnerRC(name string) *v1.ReplicationController { } } -func observePodDeletion(t *testing.T, w watch.Interface) (deletedPod *api.Pod) { - deleted := false - timeout := false - timer := time.After(60 * time.Second) - for !deleted && !timeout { - select { - case event, _ := <-w.ResultChan(): - if event.Type == watch.Deleted { - // TODO: used the commented code once we fix the client. - // deletedPod = event.Object.(*v1.Pod) - deletedPod = event.Object.(*api.Pod) - deleted = true - } - case <-timer: - timeout = true - } - } - if !deleted { - t.Fatalf("Failed to observe pod deletion") - } - return -} - func setup(t *testing.T) (*garbagecollector.GarbageCollector, clientset.Interface) { var m *master.Master s := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { @@ -211,13 +188,6 @@ func TestCascadingDeletion(t *testing.T) { if len(pods.Items) != 3 { t.Fatalf("Expect only 3 pods") } - options := api.ListOptions{ - ResourceVersion: pods.ListMeta.ResourceVersion, - } - w, err := podClient.Watch(options) - if err != nil { - t.Fatalf("Failed to set up watch: %v", err) - } stopCh := make(chan struct{}) go gc.Run(5, stopCh) defer close(stopCh) @@ -225,16 +195,13 @@ func TestCascadingDeletion(t *testing.T) { if err := rcClient.Delete(toBeDeletedRCName, nil); err != nil { t.Fatalf("failed to delete replication controller: %v", err) } - - deletedPod := observePodDeletion(t, w) - if deletedPod == nil { - t.Fatalf("empty deletedPod") + // wait for the garbage collector to drain its queue + if err := wait.Poll(10*time.Second, 120*time.Second, func() (bool, error) { + return gc.QueuesDrained(), nil + }); err != nil { + t.Fatal(err) } - if deletedPod.Name != garbageCollectedPodName { - t.Fatalf("deleted unexpected pod: %v", *deletedPod) - } - // wait for another 30 seconds to give garbage collect a chance to make mistakes. - time.Sleep(30 * time.Second) + t.Logf("garbage collector queues drained") // checks the garbage collect doesn't delete pods it shouldn't do. if _, err := podClient.Get(independentPodName); err != nil { t.Fatal(err) @@ -242,6 +209,9 @@ func TestCascadingDeletion(t *testing.T) { if _, err := podClient.Get(oneValidOwnerPodName); err != nil { t.Fatal(err) } + if _, err := podClient.Get(garbageCollectedPodName); err == nil || !errors.IsNotFound(err) { + t.Fatalf("expect pod %s to be garbage collected", garbageCollectedPodName) + } } // This test simulates the case where an object is created with an owner that @@ -264,22 +234,18 @@ func TestCreateWithNonExisitentOwner(t *testing.T) { if len(pods.Items) != 1 { t.Fatalf("Expect only 1 pod") } - options := api.ListOptions{ - ResourceVersion: pods.ListMeta.ResourceVersion, - } - w, err := podClient.Watch(options) - if err != nil { - t.Fatalf("Failed to set up watch: %v", err) - } stopCh := make(chan struct{}) go gc.Run(5, stopCh) defer close(stopCh) - deletedPod := observePodDeletion(t, w) - if deletedPod == nil { - t.Fatalf("empty deletedPod") + // wait for the garbage collector to drain its queue + if err := wait.Poll(10*time.Second, 120*time.Second, func() (bool, error) { + return gc.QueuesDrained(), nil + }); err != nil { + t.Fatal(err) } - if deletedPod.Name != garbageCollectedPodName { - t.Fatalf("deleted unexpected pod: %v", *deletedPod) + t.Logf("garbage collector queues drained") + if _, err := podClient.Get(garbageCollectedPodName); err == nil || !errors.IsNotFound(err) { + t.Fatalf("expect pod %s to be garbage collected", garbageCollectedPodName) } }