Fixed #16329 -- Fixed detection of transaction-handling capabilities when all test databases are sqlite3, in-memory.
Thanks canassa for the report and agriffis (#17762) and lrekucki (in #17758) for their contribution to the fix. git-svn-id: http://code.djangoproject.com/svn/django/trunk@17702 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
f5afa22abd
commit
69b96f824d
|
@ -72,3 +72,18 @@ class DatabaseCreation(BaseDatabaseCreation):
|
||||||
|
|
||||||
def set_autocommit(self):
|
def set_autocommit(self):
|
||||||
self.connection.connection.isolation_level = None
|
self.connection.connection.isolation_level = None
|
||||||
|
|
||||||
|
def test_db_signature(self):
|
||||||
|
"""
|
||||||
|
Returns a tuple that uniquely identifies a test database.
|
||||||
|
|
||||||
|
This takes into account the special cases of ":memory:" and "" for
|
||||||
|
SQLite since the databases will be distinct despite having the same
|
||||||
|
TEST_NAME. See http://www.sqlite.org/inmemorydb.html
|
||||||
|
"""
|
||||||
|
settings_dict = self.connection.settings_dict
|
||||||
|
test_dbname = self._get_test_db_name()
|
||||||
|
sig = [self.connection.settings_dict['NAME']]
|
||||||
|
if test_dbname == ':memory:':
|
||||||
|
sig.append(self.connection.alias)
|
||||||
|
return tuple(sig)
|
||||||
|
|
|
@ -11,6 +11,7 @@ from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.core.management import call_command
|
from django.core.management import call_command
|
||||||
from django.test import simple
|
from django.test import simple
|
||||||
from django.test.simple import DjangoTestSuiteRunner, get_tests
|
from django.test.simple import DjangoTestSuiteRunner, get_tests
|
||||||
|
from django.test.testcases import connections_support_transactions
|
||||||
from django.test.utils import get_warnings_state, restore_warnings_state
|
from django.test.utils import get_warnings_state, restore_warnings_state
|
||||||
from django.utils import unittest
|
from django.utils import unittest
|
||||||
from django.utils.importlib import import_module
|
from django.utils.importlib import import_module
|
||||||
|
@ -262,3 +263,38 @@ class ModulesTestsPackages(unittest.TestCase):
|
||||||
"Test for #12658 - Tests with ImportError's shouldn't fail silently"
|
"Test for #12658 - Tests with ImportError's shouldn't fail silently"
|
||||||
module = import_module(TEST_APP_ERROR)
|
module = import_module(TEST_APP_ERROR)
|
||||||
self.assertRaises(ImportError, get_tests, module)
|
self.assertRaises(ImportError, get_tests, module)
|
||||||
|
|
||||||
|
|
||||||
|
class Sqlite3InMemoryTestDbs(unittest.TestCase):
|
||||||
|
def test_transaction_support(self):
|
||||||
|
"""Ticket #16329: sqlite3 in-memory test databases"""
|
||||||
|
from django import db
|
||||||
|
old_db_connections = db.connections
|
||||||
|
for option in ('NAME', 'TEST_NAME'):
|
||||||
|
try:
|
||||||
|
db.connections = db.ConnectionHandler({
|
||||||
|
'default': {
|
||||||
|
'ENGINE': 'django.db.backends.sqlite3',
|
||||||
|
option: ':memory:',
|
||||||
|
},
|
||||||
|
'other': {
|
||||||
|
'ENGINE': 'django.db.backends.sqlite3',
|
||||||
|
option: ':memory:',
|
||||||
|
},
|
||||||
|
})
|
||||||
|
other = db.connections['other']
|
||||||
|
self.assertEqual(other.features.supports_transactions, None)
|
||||||
|
DjangoTestSuiteRunner(verbosity=0).setup_databases()
|
||||||
|
# Transaction support should be properly initialised for the 'other' DB
|
||||||
|
self.assertNotEqual(
|
||||||
|
other.features.supports_transactions,
|
||||||
|
None,
|
||||||
|
"DATABASES setting '%s' option set to sqlite3's ':memory:' value causes problems with transaction support detection." % option
|
||||||
|
)
|
||||||
|
# And all the DBs should report that they support transactions
|
||||||
|
self.assertTrue(
|
||||||
|
connections_support_transactions(),
|
||||||
|
"DATABASES setting '%s' option set to sqlite3's ':memory:' value causes problems with transaction support detection." % option
|
||||||
|
)
|
||||||
|
finally:
|
||||||
|
db.connections = old_db_connections
|
||||||
|
|
Loading…
Reference in New Issue