瀏覽代碼

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

Wassef Ben Ahmed 6 月之前
父節點
當前提交
957c54d945
共有 1 個文件被更改,包括 25 次插入0 次删除
  1. 25 0
      tests/cache/tests.py

+ 25 - 0
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".