class ExponentialBackoffTests(TestCase): TEST_CASES = [ {"attempts": 0, "expected_delay": 0}, {"attempts": 1, "expected_delay": BASE_DELAY}, {"attempts": 4, "expected_delay": BASE_DELAY * fake_pick_up_to(2**4-1)} ] def setUp(self): self.backoff = ExponentialBackoff(BASE_DELAY) @patch.object(ExponentialBackoff, "_pick_up_to", side_effect=fake_pick_up_to) def test_delay(self, mock): for each_case in self.TEST_CASES: self._do_test_delay(**each_case) def _do_test_delay(self, attempts, expected_delay): delay = self.backoff.delay(attempts) self.assertEqual(expected_delay, delay, "Error! delay({0:d}) = {1:d} (found {2:d})".format(attempts, expected_delay, delay)) def test_pick_up_to(self): limit = BASE_DELAY * (2 ** 5 - 1) for i in range(100): delay = self.backoff.delay(5) self.assertGreaterEqual(limit, delay)
def create_backoff(self, delay): if delay.strategy == delay.CONSTANT: return ConstantBackoff(delay.base_delay) elif delay.strategy == delay.EXPONENTIAL: return ExponentialBackoff(delay.base_delay) else: raise ValueError("Unknown backoff strategy '{0:s}' (options are 'constant' and 'exponential')")
class ExponentialBackoffTests(TestCase): TEST_CASES = [{ "attempts": 0, "expected_delay": 0 }, { "attempts": 1, "expected_delay": BASE_DELAY }, { "attempts": 4, "expected_delay": BASE_DELAY * fake_pick_up_to(2**4 - 1) }] def setUp(self): self.backoff = ExponentialBackoff(BASE_DELAY) @patch.object(ExponentialBackoff, "_pick_up_to", side_effect=fake_pick_up_to) def test_delay(self, mock): for each_case in self.TEST_CASES: self._do_test_delay(**each_case) def _do_test_delay(self, attempts, expected_delay): delay = self.backoff.delay(attempts) self.assertEqual( expected_delay, delay, "Error! delay({0:d}) = {1:d} (found {2:d})".format( attempts, expected_delay, delay)) def test_pick_up_to(self): limit = BASE_DELAY * (2**5 - 1) for i in range(100): delay = self.backoff.delay(5) self.assertGreaterEqual(limit, delay)
def setUp(self): self.backoff = ExponentialBackoff(BASE_DELAY)
def setUp(self): self.backoff = ExponentialBackoff(BASE_DELAY)