summaryrefslogtreecommitdiff
path: root/django/test
diff options
context:
space:
mode:
Diffstat (limited to 'django/test')
-rw-r--r--django/test/utils.py18
1 files changed, 14 insertions, 4 deletions
diff --git a/django/test/utils.py b/django/test/utils.py
index ddb85127dc..a4e80b0b53 100644
--- a/django/test/utils.py
+++ b/django/test/utils.py
@@ -189,6 +189,7 @@ def setup_databases(
test_databases, mirrored_aliases = get_unique_databases_and_mirrors(aliases)
old_names = []
+ serialize_connections = []
for db_name, aliases in test_databases.values():
first_alias = None
@@ -200,15 +201,14 @@ def setup_databases(
if first_alias is None:
first_alias = alias
with time_keeper.timed(" Creating '%s'" % alias):
- serialize_alias = (
- serialized_aliases is None or alias in serialized_aliases
- )
connection.creation.create_test_db(
verbosity=verbosity,
autoclobber=not interactive,
keepdb=keepdb,
- serialize=serialize_alias,
+ serialize=False,
)
+ if serialized_aliases is None or alias in serialized_aliases:
+ serialize_connections.append(connection)
if parallel > 1:
for index in range(parallel):
with time_keeper.timed(" Cloning '%s'" % alias):
@@ -229,6 +229,16 @@ def setup_databases(
connections[mirror_alias].settings_dict
)
+ # Serialize content of test databases only once all of them are setup to
+ # account for database mirroring and routing during serialization. This
+ # slightly horrific process is so people who are testing on databases
+ # without transactions or using TransactionTestCase still get a clean
+ # database on every test run.
+ for serialize_connection in serialize_connections:
+ serialize_connection._test_serialized_contents = (
+ serialize_connection.creation.serialize_db_to_string()
+ )
+
if debug_sql:
for alias in connections:
connections[alias].force_debug_cursor = True