File size: 1,762 Bytes
f4b4235 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import unittest
import requests
from unittest.mock import MagicMock
from gpt4free.quora.api import retry_request
class TestRetryRequest(unittest.TestCase):
def test_successful_request(self):
# Mock a successful request with a 200 status code
mock_response = MagicMock()
mock_response.status_code = 200
requests.get = MagicMock(return_value=mock_response)
# Call the function and assert that it returns the response
response = retry_request(requests.get, "http://example.com", max_attempts=3)
self.assertEqual(response.status_code, 200)
def test_exponential_backoff(self):
# Mock a failed request that succeeds after two retries
mock_response = MagicMock()
mock_response.status_code = 200
requests.get = MagicMock(side_effect=[requests.exceptions.RequestException] * 2 + [mock_response])
# Call the function and assert that it retries with exponential backoff
with self.assertLogs() as logs:
response = retry_request(requests.get, "http://example.com", max_attempts=3, delay=1)
self.assertEqual(response.status_code, 200)
self.assertGreaterEqual(len(logs.output), 2)
self.assertIn("Retrying in 1 seconds...", logs.output[0])
self.assertIn("Retrying in 2 seconds...", logs.output[1])
def test_too_many_attempts(self):
# Mock a failed request that never succeeds
requests.get = MagicMock(side_effect=requests.exceptions.RequestException)
# Call the function and assert that it raises an exception after the maximum number of attempts
with self.assertRaises(RuntimeError):
retry_request(requests.get, "http://example.com", max_attempts=3)
|