From 8e838d9c869083597dc9e161ae2fe37acaa90de9 Mon Sep 17 00:00:00 2001 From: Emre Yilmaz Date: Wed, 2 Dec 2015 12:34:31 +0200 Subject: Fixed #25840 -- Fixed BaseCache.get_or_set() on the DummyCache backend. This also fixes a possible data eviction race condition between setting and getting a key. Another thread could remove the key before get_and_set() accesses it again. In this case, now the default value will be returned instead of None. --- tests/cache/tests.py | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'tests/cache') diff --git a/tests/cache/tests.py b/tests/cache/tests.py index ba3745847b..cd61690d34 100644 --- a/tests/cache/tests.py +++ b/tests/cache/tests.py @@ -202,6 +202,15 @@ class DummyCacheTests(SimpleTestCase): self.assertRaises(ValueError, cache.decr_version, 'answer') self.assertRaises(ValueError, cache.decr_version, 'does_not_exist') + def test_get_or_set(self): + self.assertEqual(cache.get_or_set('mykey', 'default'), 'default') + + def test_get_or_set_callable(self): + def my_callable(): + return 'default' + + self.assertEqual(cache.get_or_set('mykey', my_callable), 'default') + def custom_key_func(key, key_prefix, version): "A customized cache key function" -- cgit v1.3