diff --git a/test/e2e/framework/BUILD b/test/e2e/framework/BUILD index 40e784d81ae..6815ff953d1 100644 --- a/test/e2e/framework/BUILD +++ b/test/e2e/framework/BUILD @@ -94,6 +94,7 @@ go_library( "//test/e2e/system:go_default_library", "//test/utils:go_default_library", "//test/utils/image:go_default_library", + "//vendor/github.com/davecgh/go-spew/spew:go_default_library", "//vendor/github.com/onsi/ginkgo:go_default_library", "//vendor/github.com/onsi/ginkgo/config:go_default_library", "//vendor/github.com/onsi/gomega:go_default_library", diff --git a/test/e2e/framework/util.go b/test/e2e/framework/util.go index 1200e998771..45075ab7cc4 100644 --- a/test/e2e/framework/util.go +++ b/test/e2e/framework/util.go @@ -40,6 +40,7 @@ import ( "syscall" "time" + "github.com/davecgh/go-spew/spew" "golang.org/x/net/websocket" "k8s.io/klog" @@ -871,8 +872,11 @@ func deleteNS(c clientset.Interface, dynamicClient dynamic.Interface, namespace } // wait for namespace to delete or timeout. + var lastNamespace *v1.Namespace err := wait.PollImmediate(2*time.Second, timeout, func() (bool, error) { - if _, err := c.CoreV1().Namespaces().Get(namespace, metav1.GetOptions{}); err != nil { + var err error + lastNamespace, err = c.CoreV1().Namespaces().Get(namespace, metav1.GetOptions{}) + if err != nil { if apierrs.IsNotFound(err) { return true, nil } @@ -902,6 +906,9 @@ func deleteNS(c clientset.Interface, dynamicClient dynamic.Interface, namespace // a timeout waiting for namespace deletion happened! if err != nil { + // namespaces now have conditions that are useful for debugging generic resources and finalizers + e2elog.Logf("namespace did not cleanup: %s", spew.Sdump(lastNamespace)) + // some content remains in the namespace if remainingContent { // pods remain