summaryrefslogtreecommitdiff
path: root/django/test
diff options
context:
space:
mode:
Diffstat (limited to 'django/test')
-rw-r--r--django/test/runner.py19
-rw-r--r--django/test/utils.py35
2 files changed, 47 insertions, 7 deletions
diff --git a/django/test/runner.py b/django/test/runner.py
index e14c6381eb..ff646b7692 100644
--- a/django/test/runner.py
+++ b/django/test/runner.py
@@ -682,14 +682,18 @@ class DiscoverRunner:
return len(result.failures) + len(result.errors)
def _get_databases(self, suite):
- databases = set()
+ databases = {}
for test in suite:
if isinstance(test, unittest.TestCase):
test_databases = getattr(test, 'databases', None)
if test_databases == '__all__':
- return set(connections)
+ test_databases = connections
if test_databases:
- databases.update(test_databases)
+ serialized_rollback = getattr(test, 'serialized_rollback', False)
+ databases.update(
+ (alias, serialized_rollback or databases.get(alias, False))
+ for alias in test_databases
+ )
else:
databases.update(self._get_databases(test))
return databases
@@ -717,8 +721,15 @@ class DiscoverRunner:
self.setup_test_environment()
suite = self.build_suite(test_labels, extra_tests)
databases = self.get_databases(suite)
+ serialized_aliases = set(
+ alias
+ for alias, serialize in databases.items() if serialize
+ )
with self.time_keeper.timed('Total database setup'):
- old_config = self.setup_databases(aliases=databases)
+ old_config = self.setup_databases(
+ aliases=databases,
+ serialized_aliases=serialized_aliases,
+ )
run_failed = False
try:
self.run_checks(databases)
diff --git a/django/test/utils.py b/django/test/utils.py
index b91532e597..c019d77354 100644
--- a/django/test/utils.py
+++ b/django/test/utils.py
@@ -25,6 +25,7 @@ from django.db.models.options import Options
from django.template import Template
from django.test.signals import setting_changed, template_rendered
from django.urls import get_script_prefix, set_script_prefix
+from django.utils.deprecation import RemovedInDjango50Warning
from django.utils.translation import deactivate
try:
@@ -156,8 +157,18 @@ def teardown_test_environment():
del mail.outbox
-def setup_databases(verbosity, interactive, *, time_keeper=None, keepdb=False, debug_sql=False, parallel=0,
- aliases=None, **kwargs):
+def setup_databases(
+ verbosity,
+ interactive,
+ *,
+ time_keeper=None,
+ keepdb=False,
+ debug_sql=False,
+ parallel=0,
+ aliases=None,
+ serialized_aliases=None,
+ **kwargs,
+):
"""Create the test databases."""
if time_keeper is None:
time_keeper = NullTimeKeeper()
@@ -176,11 +187,29 @@ def setup_databases(verbosity, interactive, *, time_keeper=None, keepdb=False, d
if first_alias is None:
first_alias = alias
with time_keeper.timed(" Creating '%s'" % alias):
+ # RemovedInDjango50Warning: when the deprecation ends,
+ # replace with:
+ # serialize_alias = serialized_aliases is None or alias in serialized_aliases
+ try:
+ serialize_alias = connection.settings_dict['TEST']['SERIALIZE']
+ except KeyError:
+ serialize_alias = (
+ serialized_aliases is None or
+ alias in serialized_aliases
+ )
+ else:
+ warnings.warn(
+ 'The SERIALIZE test database setting is '
+ 'deprecated as it can be inferred from the '
+ 'TestCase/TransactionTestCase.databases that '
+ 'enable the serialized_rollback feature.',
+ category=RemovedInDjango50Warning,
+ )
connection.creation.create_test_db(
verbosity=verbosity,
autoclobber=not interactive,
keepdb=keepdb,
- serialize=connection.settings_dict['TEST'].get('SERIALIZE', True),
+ serialize=serialize_alias,
)
if parallel > 1:
for index in range(parallel):