Skip to content

Commit 08856bb

Browse files
committed
XFAIL when iteration takes much longer than retry_period
1 parent aa1f743 commit 08856bb

File tree

1 file changed

+22
-8
lines changed

1 file changed

+22
-8
lines changed

src/silx/utils/test/test_retry.py

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import sys
3333
import time
3434
import tempfile
35+
import pytest
3536

3637
from .. import retry
3738

@@ -212,26 +213,39 @@ def method():
212213
yield from range(3)
213214

214215
def test_retry_iter_reset(self):
216+
"""Test would fail when the timer does not get reset after every iteration"""
217+
failure_t0 = None
215218
failure_count = 0
216-
retry_period = 0.2
217-
failure_duration = 0.6
219+
retry_period = 0.1
220+
failure_duration = 0.7
221+
nretry_offset = 10
218222

219-
nfailures = int(failure_duration/retry_period + 0.5)
223+
nfailures = int(failure_duration / retry_period + 0.5)
220224
retry_timeout = failure_duration + retry_period
225+
xfail_timeout = failure_duration + retry_period * 0.5
221226

222227
@retry.retry(retry_period=retry_period, retry_timeout=retry_timeout)
223-
def iter_silx(start_index=0):
224-
nonlocal failure_count
228+
def iter_with_failure(start_index=0):
229+
nonlocal failure_count, failure_t0
225230

226-
# This takes `10 * retry_period` seconds
231+
# This takes `nretry_offset * retry_period` seconds
227232
if start_index == 0:
228-
for i in range(10):
233+
for i in range(nretry_offset):
229234
time.sleep(retry_period)
230235
yield i
236+
failure_t0 = time.time()
231237

232238
# This will fail for slightly longer than `failure_duration` seconds
233239
if failure_count <= nfailures:
234240
failure_count += 1
241+
if failure_count > 1:
242+
iter_time = (time.time() - failure_t0) / (failure_count - 1)
243+
if (iter_time * nfailures) >= xfail_timeout:
244+
pytest.xfail("iteration takes much longer than retry_period")
235245
raise retry.RetryError()
236246

237-
assert list(iter_silx()) == list(range(10))
247+
yield nretry_offset
248+
249+
yielded = list(iter_with_failure())
250+
expected = list(range(nretry_offset + 1))
251+
assert yielded == expected

0 commit comments

Comments
 (0)