summaryrefslogtreecommitdiff
path: root/tests/cache
diff options
context:
space:
mode:
authorWassef Ben Ahmed <1.wassef911@gmail.com>2024-09-05 22:25:05 +0100
committerGitHub <noreply@github.com>2024-09-05 18:25:05 -0300
commit957c54d945fedb58febff05e4ce82377cc43f9f4 (patch)
treeb35cdaa0dfb8d8fa9beaddb272c780c8377520b7 /tests/cache
parentaa5293068782dfa2d2173c75c8477f58a9989942 (diff)
Fixed #32831 -– Allowed cache tests to be retried via a new "retry" decorator.
Diffstat (limited to 'tests/cache')
-rw-r--r--tests/cache/tests.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/cache/tests.py b/tests/cache/tests.py
index 978efdd9d3..2636a7d6ce 100644
--- a/tests/cache/tests.py
+++ b/tests/cache/tests.py
@@ -11,6 +11,7 @@ import tempfile
import threading
import time
import unittest
+from functools import wraps
from pathlib import Path
from unittest import mock, skipIf
@@ -89,6 +90,25 @@ KEY_ERRORS_WITH_MEMCACHED_MSG = (
)
+def retry(retries=3, delay=1):
+ def decorator(func):
+ @wraps(func)
+ def wrapper(*args, **kwargs):
+ attempts = 0
+ while attempts < retries:
+ try:
+ return func(*args, **kwargs)
+ except AssertionError:
+ attempts += 1
+ if attempts >= retries:
+ raise
+ time.sleep(delay)
+
+ return wrapper
+
+ return decorator
+
+
@override_settings(
CACHES={
"default": {
@@ -489,6 +509,7 @@ class BaseCacheTests:
self.assertEqual(cache.get("expire2"), "newvalue")
self.assertIs(cache.has_key("expire3"), False)
+ @retry()
def test_touch(self):
# cache.touch() updates the timeout.
cache.set("expire1", "very quickly", timeout=1)
@@ -616,6 +637,7 @@ class BaseCacheTests:
self.assertEqual(cache.get("key3"), "sausage")
self.assertEqual(cache.get("key4"), "lobster bisque")
+ @retry()
def test_forever_timeout(self):
"""
Passing in None into timeout results in a value that is cached forever
@@ -1397,6 +1419,7 @@ class LocMemCacheTests(BaseCacheTests, TestCase):
self.assertEqual(cache.decr(key), 1)
self.assertEqual(expire, cache._expire_info[_key])
+ @retry()
@limit_locmem_entries
def test_lru_get(self):
"""get() moves cache keys."""
@@ -1424,6 +1447,7 @@ class LocMemCacheTests(BaseCacheTests, TestCase):
for key in range(3):
self.assertIsNone(cache.get(key))
+ @retry()
@limit_locmem_entries
def test_lru_incr(self):
"""incr() moves cache keys."""
@@ -2674,6 +2698,7 @@ class CacheMiddlewareTest(SimpleTestCase):
response = other_with_prefix_view(request, "16")
self.assertEqual(response.content, b"Hello World 16")
+ @retry()
def test_cache_page_timeout(self):
# Page timeout takes precedence over the "max-age" section of the
# "Cache-Control".