From 957c54d945fedb58febff05e4ce82377cc43f9f4 Mon Sep 17 00:00:00 2001 From: Wassef Ben Ahmed <1.wassef911@gmail.com> Date: Thu, 5 Sep 2024 22:25:05 +0100 Subject: [PATCH] =?UTF-8?q?Fixed=20#32831=20-=E2=80=93=20Allowed=20cache?= =?UTF-8?q?=20tests=20to=20be=20retried=20via=20a=20new=20"retry"=20decora?= =?UTF-8?q?tor.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/cache/tests.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tests/cache/tests.py b/tests/cache/tests.py index 978efdd9d38..2636a7d6ce0 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".