1
0
mirror of https://github.com/django/django.git synced 2025-06-05 11:39:13 +00:00

[5.1.x] Fixed #32831 -– Allowed cache tests to be retried via a new "retry" decorator.

Backport of 957c54d945fedb58febff05e4ce82377cc43f9f4 from main.
This commit is contained in:
Wassef Ben Ahmed 2024-09-05 22:25:05 +01:00 committed by Natalia
parent 1b7b5e0d17
commit 33cd593420

25
tests/cache/tests.py vendored
View File

@ -11,6 +11,7 @@ import tempfile
import threading import threading
import time import time
import unittest import unittest
from functools import wraps
from pathlib import Path from pathlib import Path
from unittest import mock, skipIf 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( @override_settings(
CACHES={ CACHES={
"default": { "default": {
@ -489,6 +509,7 @@ class BaseCacheTests:
self.assertEqual(cache.get("expire2"), "newvalue") self.assertEqual(cache.get("expire2"), "newvalue")
self.assertIs(cache.has_key("expire3"), False) self.assertIs(cache.has_key("expire3"), False)
@retry()
def test_touch(self): def test_touch(self):
# cache.touch() updates the timeout. # cache.touch() updates the timeout.
cache.set("expire1", "very quickly", timeout=1) cache.set("expire1", "very quickly", timeout=1)
@ -616,6 +637,7 @@ class BaseCacheTests:
self.assertEqual(cache.get("key3"), "sausage") self.assertEqual(cache.get("key3"), "sausage")
self.assertEqual(cache.get("key4"), "lobster bisque") self.assertEqual(cache.get("key4"), "lobster bisque")
@retry()
def test_forever_timeout(self): def test_forever_timeout(self):
""" """
Passing in None into timeout results in a value that is cached forever 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(cache.decr(key), 1)
self.assertEqual(expire, cache._expire_info[_key]) self.assertEqual(expire, cache._expire_info[_key])
@retry()
@limit_locmem_entries @limit_locmem_entries
def test_lru_get(self): def test_lru_get(self):
"""get() moves cache keys.""" """get() moves cache keys."""
@ -1424,6 +1447,7 @@ class LocMemCacheTests(BaseCacheTests, TestCase):
for key in range(3): for key in range(3):
self.assertIsNone(cache.get(key)) self.assertIsNone(cache.get(key))
@retry()
@limit_locmem_entries @limit_locmem_entries
def test_lru_incr(self): def test_lru_incr(self):
"""incr() moves cache keys.""" """incr() moves cache keys."""
@ -2674,6 +2698,7 @@ class CacheMiddlewareTest(SimpleTestCase):
response = other_with_prefix_view(request, "16") response = other_with_prefix_view(request, "16")
self.assertEqual(response.content, b"Hello World 16") self.assertEqual(response.content, b"Hello World 16")
@retry()
def test_cache_page_timeout(self): def test_cache_page_timeout(self):
# Page timeout takes precedence over the "max-age" section of the # Page timeout takes precedence over the "max-age" section of the
# "Cache-Control". # "Cache-Control".