3
3
from nose.tools import eq_
4
from nose.tools import raises
7
6
class TestRetrySleeper(unittest.TestCase):
11
def _fail(self, times=1):
12
from kazoo.retry import ForceRetryError
16
if scope['times'] >= times:
20
raise ForceRetryError('Failed!')
9
23
def _makeOne(self, *args, **kwargs):
10
from kazoo.retry import RetrySleeper
11
return RetrySleeper(*args, **kwargs)
24
from kazoo.retry import KazooRetry
25
return KazooRetry(*args, **kwargs)
13
27
def test_reset(self):
14
retry = self._makeOne(delay=0)
28
retry = self._makeOne(delay=0, max_tries=2)
16
30
eq_(retry._attempts, 1)
18
32
eq_(retry._attempts, 0)
20
34
def test_too_many_tries(self):
35
from kazoo.retry import RetryFailedError
21
36
retry = self._makeOne(delay=0)
37
self.assertRaises(RetryFailedError, retry, self._fail(times=999))
38
eq_(retry._attempts, 1)
29
40
def test_maximum_delay(self):
41
def sleep_func(_time):
33
44
retry = self._makeOne(delay=10, max_tries=100, sleep_func=sleep_func)
45
retry(self._fail(times=10))
36
46
self.assertTrue(retry._cur_delay < 4000, retry._cur_delay)
37
47
# gevent's sleep function is picky about the type
38
48
eq_(type(retry._cur_delay), float)