Reordered the shutdown process for tests so that all tests force a connection close. This is required to prevent some cross-test failures. Thanks to Florian Apolloner for the report and help tracking down the problem.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@14399 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Russell Keith-Magee 2010-10-30 13:03:37 +00:00
parent 52e0bcbc62
commit fffbbe4062
1 changed files with 11 additions and 3 deletions

View File

@ -305,9 +305,20 @@ class TransactionTestCase(ut2.TestCase):
""" Performs any post-test things. This includes: """ Performs any post-test things. This includes:
* Putting back the original ROOT_URLCONF if it was changed. * Putting back the original ROOT_URLCONF if it was changed.
* Force closing the connection, so that the next test gets
a clean cursor.
""" """
self._fixture_teardown() self._fixture_teardown()
self._urlconf_teardown() self._urlconf_teardown()
# Some DB cursors include SQL statements as part of cursor
# creation. If you have a test that does rollback, the effect
# of these statements is lost, which can effect the operation
# of tests (e.g., losing a timezone setting causing objects to
# be created with the wrong time).
# To make sure this doesn't happen, get a clean connection at the
# start of every test.
for connection in connections.all():
connection.close()
def _fixture_teardown(self): def _fixture_teardown(self):
pass pass
@ -575,9 +586,6 @@ class TestCase(TransactionTestCase):
transaction.rollback(using=db) transaction.rollback(using=db)
transaction.leave_transaction_management(using=db) transaction.leave_transaction_management(using=db)
for connection in connections.all():
connection.close()
def _deferredSkip(condition, reason): def _deferredSkip(condition, reason):
def decorator(test_func): def decorator(test_func):
if not (isinstance(test_func, type) and issubclass(test_func, TestCase)): if not (isinstance(test_func, type) and issubclass(test_func, TestCase)):