30 lines
723 B
Python
30 lines
723 B
Python
"""
|
|
Helpers for testing.
|
|
"""
|
|
|
|
import time
|
|
from typing import Callable, TypeVar
|
|
|
|
|
|
T = TypeVar("T")
|
|
|
|
|
|
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()
|