Spaces:
Running
Running
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) | |