Skip to content

Commit

Permalink
Prepare for release
Browse files Browse the repository at this point in the history
  • Loading branch information
mgedmin committed Jul 25, 2008
2 parents 2f91f5c + 6ebf4cc commit 5e91bbe
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 6 deletions.
6 changes: 6 additions & 0 deletions CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@
CHANGES
=======

3.4.3 (2008-07-25)
------------------

- Fix memory leak in all functional tests.
see: https://bugs.launchpad.net/zope3/+bug/251273

3.4.2 (2008-02-02)
------------------

Expand Down
7 changes: 5 additions & 2 deletions buildout.cfg
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
[buildout]
develop = .
parts = test
develop = . ../zope.component
parts = test tags

[test]
recipe = zc.recipe.testrunner
eggs = zope.app.testing [test]

[tags]
recipe = z3c.recipe.tag:tags
eggs = zope.app.testing
13 changes: 9 additions & 4 deletions src/zope/app/testing/functional.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
from transaction import abort, commit
from ZODB.DB import DB
from ZODB.DemoStorage import DemoStorage
from ZODB.interfaces import IDatabase

from zope import component
from zope.publisher.browser import BrowserRequest, setDefaultSkin
Expand Down Expand Up @@ -231,12 +232,17 @@ def _set_base_storage(self, value):

base_storage = property(_get_base_storage, _set_base_storage)

def _close_databases(self):
base = component.getGlobalSiteManager()
for name, db in self.db.databases.iteritems():
db.close()
base.unregisterUtility(db, IDatabase, name)

def setUp(self):
"""Prepares for a functional test case."""
# Tear down the old demo storages (if any) and create fresh ones
abort()
for db in self.db.databases.itervalues():
db.close()
self._close_databases()
self.db = self.app.db = multi_database(
DerivedDatabaseFactory(name, self._base_storages)
for name in self._database_names
Expand All @@ -249,8 +255,7 @@ def tearDown(self):
if self.connection:
self.connection.close()
self.connection = None
for db in self.db.databases.itervalues():
db.close()
self._close_databases()
setSite(None)

def tearDownCompletely(self):
Expand Down
27 changes: 27 additions & 0 deletions src/zope/app/testing/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@

from zope.testing.doctestunit import DocTestSuite
from zope.testing.renormalizing import RENormalizing
from zope.component import getAllUtilitiesRegisteredFor
from ZODB.interfaces import IDatabase

import zope.app.testing
from zope.app.publication.requestpublicationregistry import factoryRegistry
Expand All @@ -32,6 +34,7 @@
from zope.app.testing.functional import SampleFunctionalTest, BrowserTestCase
from zope.app.testing.functional import FunctionalDocFileSuite
from zope.app.testing.functional import FunctionalTestCase
from zope.app.testing.functional import FunctionalTestSetup
from zope.app.testing.testing import AppTestingLayer

from zope.app.testing.testing import FailingKlass
Expand Down Expand Up @@ -400,6 +403,30 @@ def test_retryOnConflictErrorBrowser(self):
self.assertNotEqual(response.getStatus(), 599)
self.assertEqual(response.getStatus(), 500)


ftesting_zcml = os.path.join(os.path.split(zope.app.testing.__file__)[0],
'ftesting.zcml')

def doctest_FunctionalTestSetup_clears_global_utilities():
"""Test that FunctionalTestSetup doesn't leave global utilities.
Leaving global IDatabase utilities makes a nice juicy memory leak.
See https://bugs.launchpad.net/zope3/+bug/251273
>>> setup = FunctionalTestSetup(ftesting_zcml)
>>> setup.setUp()
>>> setup.tearDown()
>>> len(getAllUtilitiesRegisteredFor(IDatabase))
0
Clean up:
>>> setup.tearDownCompletely()
"""


def test_suite():
checker = RENormalizing([
(re.compile(r'^HTTP/1.1 (\d{3}) .*?\n'), 'HTTP/1.1 \\1\n')
Expand Down

0 comments on commit 5e91bbe

Please sign in to comment.