summaryrefslogtreecommitdiff
path: root/tests/cache
diff options
context:
space:
mode:
authorPrzemysław Suliga <suligap@gmail.com>2016-03-06 11:34:23 +0100
committerTim Graham <timograham@gmail.com>2016-03-08 11:45:09 -0500
commit76926f343a91e47bf5dc801373e9da2747d08e29 (patch)
treea40d98b39870d75effbd33490040fc166a709ee0 /tests/cache
parent809eb5ddeeca388b2a1d339f7d5ee1f29119ecea (diff)
[1.9.x] Fixed #26332 -- Fixed a race condition in BaseCache.get_or_set().
Backport of 96ec67a7cf89a136e793305343c5bba8521cdb47 from master
Diffstat (limited to 'tests/cache')
-rw-r--r--tests/cache/tests.py9
1 files changed, 8 insertions, 1 deletions
diff --git a/tests/cache/tests.py b/tests/cache/tests.py
index b1df2c3eb9..0a76b82bcc 100644
--- a/tests/cache/tests.py
+++ b/tests/cache/tests.py
@@ -30,7 +30,7 @@ from django.template import engines
from django.template.context_processors import csrf
from django.template.response import TemplateResponse
from django.test import (
- RequestFactory, SimpleTestCase, TestCase, TransactionTestCase,
+ RequestFactory, SimpleTestCase, TestCase, TransactionTestCase, mock,
override_settings,
)
from django.test.signals import setting_changed
@@ -915,6 +915,13 @@ class BaseCacheTests(object):
self.assertEqual(cache.get_or_set('brian', 1979, version=2), 1979)
self.assertIsNone(cache.get('brian', version=3))
+ def test_get_or_set_racing(self):
+ with mock.patch('%s.%s' % (settings.CACHES['default']['BACKEND'], 'add')) as cache_add:
+ # Simulate cache.add() failing to add a value. In that case, the
+ # default value should be returned.
+ cache_add.return_value = False
+ self.assertEqual(cache.get_or_set('key', 'default'), 'default')
+
@override_settings(CACHES=caches_setting_for_tests(
BACKEND='django.core.cache.backends.db.DatabaseCache',