def mock_sender(*responses, is_async: bool = False): sender = MagicMock() sender.is_async = is_async if is_async: sender.send = AsyncMock(side_effect=responses) else: sender.send.side_effect = responses return sender
async def test_async_retry_returns_on_first_success(self): fail = failed_response() success = ok_response() sender = mock_sender(fail, fail, success, fail, is_async=True) s = RetryingSender(retries=5, sender=sender) with patch(module + '.asyncio', AsyncMock()): await s.send(mock_request()) assert sender.send.call_count == 3
async def test_async_failing_request_retried_max_times(self): fail = failed_response() success = ok_response() sender = mock_sender(fail, fail, fail, success, is_async=True) s = RetryingSender(retries=2, sender=sender) with patch(module + '.asyncio', AsyncMock()): await s.send(mock_request()) assert sender.send.call_count == 3
def test_async_retry_returns_on_first_success(self): fail = failed_response() success = ok_response() sender = mock_sender(fail, fail, success, fail, is_async=True) s = RetryingSender(retries=5, sender=sender) with patch('tekore.sender.asyncio', AsyncMock()): run(s.send(Request())) self.assertEqual(sender.send.call_count, 3)
async def test_async_rate_limited_request_retried_after_set_seconds(self): asyncio = AsyncMock() fail = rate_limit_response() success = ok_response() sender = mock_sender(fail, success, is_async=True) s = RetryingSender(sender=sender) with patch(module + '.asyncio', asyncio): await s.send(mock_request()) asyncio.sleep.assert_called_once_with(1 + 1)
async def test_async_default_retry_after_is_one(self): asyncio = AsyncMock() fail = rate_limit_response() del fail.headers['Retry-After'] success = ok_response() sender = mock_sender(fail, success, is_async=True) s = RetryingSender(sender=sender) with patch(module + '.asyncio', asyncio): await s.send(mock_request()) asyncio.sleep.assert_called_once_with(1 + 1)
async def test_async_rate_limited_retry_doesnt_decrease_retry_count(self): fail = failed_response() rate = rate_limit_response() success = ok_response() sender = mock_sender(fail, rate, fail, success, is_async=True) s = RetryingSender(retries=2, sender=sender) with patch(module + '.asyncio', AsyncMock()): await s.send(mock_request()) assert sender.send.call_count == 4
def test_async_rate_limited_retry_doesnt_decrease_retry_count(self): fail = failed_response() rate = rate_limit_response() success = ok_response() sender = mock_sender(fail, rate, fail, success, is_async=True) s = RetryingSender(retries=2, sender=sender) with patch('tekore.sender.asyncio', AsyncMock()): run(s.send(Request())) self.assertEqual(sender.send.call_count, 4)