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() {