[Checkins] SVN: zope.app.testing/trunk/ improve isolation of test product configuration so changes performed by
Fred L. Drake, Jr.
fdrake at gmail.com
Fri Aug 22 09:37:36 EDT 2008
Log message for revision 90123:
improve isolation of test product configuration so changes performed by
test-specific setup (or inside tests!) do not leak to other tests
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-08-22 11:53:16 UTC (rev 90122)
+++ zope.app.testing/trunk/CHANGES.txt 2008-08-22 13:37:35 UTC (rev 90123)
@@ -2,6 +2,11 @@
CHANGES
=======
+3.5.3 (2008-08-22)
+------------------
+
+- Fix isolation enforcement for product configuration around individual tests.
+
3.5.2 (2008-08-21)
------------------
Modified: zope.app.testing/trunk/src/zope/app/testing/functional.py
===================================================================
--- zope.app.testing/trunk/src/zope/app/testing/functional.py 2008-08-22 11:53:16 UTC (rev 90122)
+++ zope.app.testing/trunk/src/zope/app/testing/functional.py 2008-08-22 13:37:35 UTC (rev 90123)
@@ -17,6 +17,7 @@
$Id$
"""
+import copy
import logging
import os.path
import re
@@ -189,14 +190,18 @@
# Make it silent but keep the log available for debugging
logging.root.addHandler(logging.StreamHandler(self.log))
- product_configs = []
+ self.old_product_config = copy.deepcopy(
+ zope.app.appsetup.product.saveConfiguration())
+ configs = []
if product_config:
configs = zope.app.appsetup.product.loadConfiguration(
StringIO(product_config))
- zope.app.appsetup.product.setProductConfigurations([
+ configs = [
zope.app.appsetup.product.FauxConfiguration(name, values)
for name, values in configs.items()
- ])
+ ]
+ self.local_product_config = configs
+ zope.app.appsetup.product.setProductConfigurations(configs)
self._base_storages = {}
self.db = multi_database(
@@ -272,6 +277,8 @@
abort()
self.dbstack.append((self.db, self.connection))
self.connection = None
+ zope.app.appsetup.product.setProductConfigurations(
+ self.local_product_config)
self.db = self.app.db = multi_database(
DerivedDatabaseFactory(name, self._base_storages)
for name in self._database_names
@@ -289,6 +296,8 @@
self._close_databases()
assert self.dbstack == []
zope.app.testing.setup.placefulTearDown()
+ zope.app.appsetup.product.restoreConfiguration(
+ self.old_product_config)
self._config_file = False
self._product_config = None
self._database_names = None
Modified: zope.app.testing/trunk/src/zope/app/testing/tests.py
===================================================================
--- zope.app.testing/trunk/src/zope/app/testing/tests.py 2008-08-22 11:53:16 UTC (rev 90122)
+++ zope.app.testing/trunk/src/zope/app/testing/tests.py 2008-08-22 13:37:35 UTC (rev 90123)
@@ -489,8 +489,6 @@
>>> setup = FunctionalTestSetup(
... empty_zcml, product_config=product_config)
- >>> setup.setUp()
-
The configuration was visible to our database-opened subscriber:
>>> pprint.pprint(config, width=1)
@@ -503,8 +501,25 @@
{'key1': 'value1',
'key2': 'value2'}
+ Let's run a test that mutates the product configuration:
+
+ >>> setup.setUp()
+ >>> zope.app.appsetup.product.setProductConfiguration(
+ ... 'abc', {'another': 'value'})
+ >>> zope.app.appsetup.product.getProductConfiguration('abc')
+ {'another': 'value'}
>>> setup.tearDown()
+ A second test run in the layer sees the original product configuration:
+
+ >>> setup.setUp()
+ >>> config = zope.app.appsetup.product.getProductConfiguration(
+ ... 'abc')
+ >>> pprint.pprint(config, width=1)
+ {'key1': 'value1',
+ 'key2': 'value2'}
+ >>> setup.tearDown()
+
After the layer is cleaned up, there's no longer any product
configuration:
More information about the Checkins
mailing list