diff options
Diffstat (limited to 'django/test')
| -rw-r--r-- | django/test/runner.py | 19 | ||||
| -rw-r--r-- | django/test/utils.py | 35 |
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): |
