summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorShai Berger <shai@platonix.com>2014-03-30 20:03:35 +0300
committerShai Berger <shai@platonix.com>2014-04-10 02:15:14 +0300
commit690a5984a3c0a706b8cc296bdcccd524b2079559 (patch)
tree09293d29771b03a44e0b00abc47e840e6f508982 /tests
parent6fa7d7c594597ab7072ffa740da5b6f4a5a6cd26 (diff)
[1.6.x] Fixed #22343 -- Disallowed select_for_update in autocommit mode
The ticket was originally about two failing tests, which are fixed by putting their queries in transactions. Thanks Tim Graham for the report, Aymeric Augustin for the fix, and Simon Charette, Tim Graham & Loïc Bistuer for review. Backport of b990df1d63 from master
Diffstat (limited to 'tests')
-rw-r--r--tests/select_for_update/tests.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/select_for_update/tests.py b/tests/select_for_update/tests.py
index edef455154..687d7d5f5d 100644
--- a/tests/select_for_update/tests.py
+++ b/tests/select_for_update/tests.py
@@ -151,6 +151,34 @@ class SelectForUpdateTests(TransactionTestCase):
Person.objects.all().select_for_update(nowait=True)
)
+ @skipUnlessDBFeature('has_select_for_update')
+ def test_for_update_requires_transaction(self):
+ """
+ Test that a TransactionManagementError is raised
+ when a select_for_update query is executed outside of a transaction.
+ """
+ transaction.set_autocommit(True)
+ try:
+ with self.assertRaises(transaction.TransactionManagementError):
+ list(Person.objects.all().select_for_update())
+ finally:
+ transaction.set_autocommit(True)
+
+ @skipUnlessDBFeature('has_select_for_update')
+ def test_for_update_requires_transaction_only_in_execution(self):
+ """
+ Test that no TransactionManagementError is raised
+ when select_for_update is invoked outside of a transaction -
+ only when the query is executed.
+ """
+ transaction.set_autocommit(True)
+ try:
+ people = Person.objects.all().select_for_update()
+ with self.assertRaises(transaction.TransactionManagementError):
+ list(people)
+ finally:
+ transaction.set_autocommit(True)
+
def run_select_for_update(self, status, nowait=False):
"""
Utility method that runs a SELECT FOR UPDATE against all