toot/tests/utils.py

48 wiersze
1.1 KiB
Python
Czysty Zwykły widok Historia

2018-06-07 08:00:50 +00:00
"""
Helpers for testing.
"""
import time
from typing import Callable, TypeVar
T = TypeVar("T")
2017-04-15 12:46:22 +00:00
class MockResponse:
def __init__(self, response_data={}, ok=True, is_redirect=False):
2017-04-15 12:46:22 +00:00
self.response_data = response_data
self.content = response_data
self.ok = ok
self.is_redirect = is_redirect
2017-04-15 12:46:22 +00:00
def raise_for_status(self):
pass
def json(self):
return self.response_data
def retval(val):
return lambda *args, **kwargs: val
def run_with_retries(fn: Callable[..., T]) -> T:
"""
Run the the given function repeatedly until it finishes without raising an
AssertionError. Sleep a bit between attempts. If the function doesn't
succeed in the given number of tries raises the AssertionError. Used for
tests which should eventually succeed.
"""
# Wait upto 6 seconds with incrementally longer sleeps
delays = [0.1, 0.2, 0.3, 0.4, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5]
for delay in delays:
try:
return fn()
except AssertionError:
time.sleep(delay)
return fn()