summaryrefslogtreecommitdiff
path: root/django/test/testcases.py
diff options
context:
space:
mode:
authorIan Foote <python@ian.feete.org>2020-11-22 16:20:56 +0000
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-11-27 21:43:15 +0100
commit3828879eee09da95bf99886c1ae182a36b1d89b3 (patch)
treee0520c84e22ab5f275b30648f64149d46531dc47 /django/test/testcases.py
parent8b040e3cbbb2e81420e777afc3ca48a1c8f4dd5a (diff)
Fixed #32220 -- Added durable argument to transaction.atomic().
Diffstat (limited to 'django/test/testcases.py')
-rw-r--r--django/test/testcases.py42
1 files changed, 25 insertions, 17 deletions
diff --git a/django/test/testcases.py b/django/test/testcases.py
index 716eef5e42..114ca85012 100644
--- a/django/test/testcases.py
+++ b/django/test/testcases.py
@@ -1181,29 +1181,37 @@ class TestCase(TransactionTestCase):
super().setUpClass()
if not cls._databases_support_transactions():
return
- cls.cls_atomics = cls._enter_atomics()
-
- if cls.fixtures:
- for db_name in cls._databases_names(include_mirrors=False):
- try:
- call_command('loaddata', *cls.fixtures, **{'verbosity': 0, 'database': db_name})
- except Exception:
- cls._rollback_atomics(cls.cls_atomics)
- cls._remove_databases_failures()
- raise
- pre_attrs = cls.__dict__.copy()
+ # Disable the durability check to allow testing durable atomic blocks
+ # in a transaction for performance reasons.
+ transaction.Atomic._ensure_durability = False
try:
- cls.setUpTestData()
+ cls.cls_atomics = cls._enter_atomics()
+
+ if cls.fixtures:
+ for db_name in cls._databases_names(include_mirrors=False):
+ try:
+ call_command('loaddata', *cls.fixtures, **{'verbosity': 0, 'database': db_name})
+ except Exception:
+ cls._rollback_atomics(cls.cls_atomics)
+ cls._remove_databases_failures()
+ raise
+ pre_attrs = cls.__dict__.copy()
+ try:
+ cls.setUpTestData()
+ except Exception:
+ cls._rollback_atomics(cls.cls_atomics)
+ cls._remove_databases_failures()
+ raise
+ for name, value in cls.__dict__.items():
+ if value is not pre_attrs.get(name):
+ setattr(cls, name, TestData(name, value))
except Exception:
- cls._rollback_atomics(cls.cls_atomics)
- cls._remove_databases_failures()
+ transaction.Atomic._ensure_durability = True
raise
- for name, value in cls.__dict__.items():
- if value is not pre_attrs.get(name):
- setattr(cls, name, TestData(name, value))
@classmethod
def tearDownClass(cls):
+ transaction.Atomic._ensure_durability = True
if cls._databases_support_transactions():
cls._rollback_atomics(cls.cls_atomics)
for conn in connections.all():