From fffbbe406232fb7403ed33123cd21f9c0996f627 Mon Sep 17 00:00:00 2001 From: Russell Keith-Magee Date: Sat, 30 Oct 2010 13:03:37 +0000 Subject: [PATCH] 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 --- django/test/testcases.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/django/test/testcases.py b/django/test/testcases.py index 6772370f09..926fccdfda 100644 --- a/django/test/testcases.py +++ b/django/test/testcases.py @@ -305,9 +305,20 @@ class TransactionTestCase(ut2.TestCase): """ Performs any post-test things. This includes: * 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._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): pass @@ -575,9 +586,6 @@ class TestCase(TransactionTestCase): transaction.rollback(using=db) transaction.leave_transaction_management(using=db) - for connection in connections.all(): - connection.close() - def _deferredSkip(condition, reason): def decorator(test_func): if not (isinstance(test_func, type) and issubclass(test_func, TestCase)):