From e769c33de441b73e2223afd9ef481d6ae541f9d3 Mon Sep 17 00:00:00 2001 From: Maru Newby Date: Tue, 4 Apr 2017 17:25:21 -0700 Subject: [PATCH] fed: Improve e2e framework setup/teardown - reuse default framework setup rather than duplicating - skip namespace creation for each test in hosting cluster - ensure FederationAfterEach is called if BeforeEach fails --- test/e2e_federation/framework/framework.go | 37 ++++++++++++++-------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/test/e2e_federation/framework/framework.go b/test/e2e_federation/framework/framework.go index 38247ded63e..2f38e06e881 100644 --- a/test/e2e_federation/framework/framework.go +++ b/test/e2e_federation/framework/framework.go @@ -40,33 +40,40 @@ import ( type Framework struct { *framework.Framework + // To make sure that this framework cleans up after itself, no matter what, + // we install a Cleanup action before each test and clear it after. If we + // should abort, the AfterSuite hook should run all Cleanup actions. + cleanupHandle framework.CleanupActionHandle + FederationClientset *federation_clientset.Clientset FederationNamespace *v1.Namespace } func NewDefaultFederatedFramework(baseName string) *Framework { - options := framework.FrameworkOptions{ - ClientQPS: 20, - ClientBurst: 50, - } + f := &Framework{} - f := &Framework{&framework.Framework{ - BaseName: baseName, - AddonResourceConstraints: make(map[string]framework.ResourceConstraint), - Options: options, - ClientSet: nil, - }, nil, &v1.Namespace{}} - - BeforeEach(f.BeforeEach) - BeforeEach(f.FederationBeforeEach) + // Register the federation cleanup before initializing the default + // e2e framework to ensure it gets called before the default + // framework's cleanup. AfterEach(f.FederationAfterEach) - AfterEach(f.AfterEach) + + f.Framework = framework.NewDefaultFramework(baseName) + f.Framework.SkipNamespaceCreation = true + + // Register the federation setup after initializing the default + // e2e framework to ensure it gets called after the default + // framework's setup. + BeforeEach(f.FederationBeforeEach) return f } // FederationBeforeEach checks for federation apiserver is ready and makes a namespace. func (f *Framework) FederationBeforeEach() { + // The fact that we need this feels like a bug in ginkgo. + // https://github.com/onsi/ginkgo/issues/222 + f.cleanupHandle = framework.AddCleanupAction(f.FederationAfterEach) + if f.FederationClientset == nil { By("Creating a release 1.5 federation Clientset") var err error @@ -122,6 +129,8 @@ func (f *Framework) deleteFederationNs() { // FederationAfterEach deletes the namespace, after reading its events. func (f *Framework) FederationAfterEach() { + framework.RemoveCleanupAction(f.cleanupHandle) + // DeleteNamespace at the very end in defer, to avoid any // expectation failures preventing deleting the namespace. defer func() {