[Checkins] SVN: zope.app.testing/trunk/ Fix memory leak in all
functional tests.
Marius Gedminas
marius at pov.lt
Fri Jul 25 13:06:13 EDT 2008
Log message for revision 88823:
Fix memory leak in all functional tests.
See: https://bugs.launchpad.net/zope3/+bug/251273
Changed:
U zope.app.testing/trunk/CHANGES.txt
U zope.app.testing/trunk/src/zope/app/testing/functional.py
U zope.app.testing/trunk/src/zope/app/testing/tests.py
-=-
Modified: zope.app.testing/trunk/CHANGES.txt
===================================================================
--- zope.app.testing/trunk/CHANGES.txt 2008-07-25 16:20:48 UTC (rev 88822)
+++ zope.app.testing/trunk/CHANGES.txt 2008-07-25 17:06:12 UTC (rev 88823)
@@ -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)
------------------
Modified: zope.app.testing/trunk/src/zope/app/testing/functional.py
===================================================================
--- zope.app.testing/trunk/src/zope/app/testing/functional.py 2008-07-25 16:20:48 UTC (rev 88822)
+++ zope.app.testing/trunk/src/zope/app/testing/functional.py 2008-07-25 17:06:12 UTC (rev 88823)
@@ -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
@@ -231,12 +232,17 @@
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
@@ -249,8 +255,7 @@
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):
Modified: zope.app.testing/trunk/src/zope/app/testing/tests.py
===================================================================
--- zope.app.testing/trunk/src/zope/app/testing/tests.py 2008-07-25 16:20:48 UTC (rev 88822)
+++ zope.app.testing/trunk/src/zope/app/testing/tests.py 2008-07-25 17:06:12 UTC (rev 88823)
@@ -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
@@ -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
@@ -400,6 +403,30 @@
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')
More information about the Checkins
mailing list