File size: 1,762 Bytes
d4adf88
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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)