mirror of
https://github.com/deepset-ai/haystack.git
synced 2025-07-31 04:38:23 +00:00

* requests.py -> requests_utils.py * fix tests * reimport requrests * fix more tests * review feedback
73 lines
2.8 KiB
Python
73 lines
2.8 KiB
Python
from unittest.mock import patch, Mock
|
|
|
|
import pytest
|
|
import requests
|
|
|
|
from haystack.utils.requests_utils import request_with_retry
|
|
|
|
|
|
@pytest.mark.unit
|
|
@patch("haystack.utils.requests_utils.requests.request")
|
|
def test_request_with_retry_defaults_successfully(mock_request):
|
|
# Make requests with default retry configuration
|
|
request_with_retry(method="GET", url="https://example.com")
|
|
|
|
# Verifies request has not been retried
|
|
mock_request.assert_called_once_with(method="GET", url="https://example.com", timeout=10)
|
|
|
|
|
|
@pytest.mark.unit
|
|
@patch("haystack.utils.requests_utils.requests.request")
|
|
def test_request_with_retry_custom_timeout(mock_request):
|
|
# Make requests with default retry configuration
|
|
request_with_retry(method="GET", url="https://example.com", timeout=5)
|
|
|
|
# Verifies request has not been retried
|
|
mock_request.assert_called_once_with(method="GET", url="https://example.com", timeout=5)
|
|
|
|
|
|
@pytest.mark.unit
|
|
@patch("haystack.utils.requests_utils.requests.request")
|
|
def test_request_with_retry_failing_request_and_expected_status_code(mock_request):
|
|
# Create fake failed response with status code that triggers retry
|
|
fake_response = requests.Response()
|
|
fake_response.status_code = 408
|
|
mock_request.return_value = fake_response
|
|
|
|
# Make request with expected status code and verify error is raised
|
|
with pytest.raises(requests.HTTPError):
|
|
request_with_retry(method="GET", url="https://example.com", timeout=1, attempts=2, status_codes_to_retry=[408])
|
|
|
|
# Veries request has been retried the expected number of times
|
|
assert mock_request.call_count == 2
|
|
|
|
|
|
@pytest.mark.unit
|
|
@patch("haystack.utils.requests_utils.requests.request")
|
|
def test_request_with_retry_failing_request_and_ignored_status_code(mock_request):
|
|
# Create fake failed response with status code that doesn't trigger retry
|
|
fake_response = requests.Response()
|
|
fake_response.status_code = 500
|
|
mock_request.return_value = fake_response
|
|
|
|
# Make request with status code that won't trigger a retry and verify error is raised
|
|
with pytest.raises(requests.HTTPError):
|
|
request_with_retry(method="GET", url="https://example.com", timeout=1, status_codes_to_retry=[404])
|
|
|
|
# Verify request has not been retried
|
|
mock_request.assert_called_once()
|
|
|
|
|
|
@pytest.mark.unit
|
|
@patch("haystack.utils.requests_utils.requests.request")
|
|
def test_request_with_retry_timed_out_request(mock_request: Mock):
|
|
# Make request fail cause of a timeout
|
|
mock_request.side_effect = TimeoutError()
|
|
|
|
# Make request and verifies it fails
|
|
with pytest.raises(TimeoutError):
|
|
request_with_retry(method="GET", url="https://example.com", timeout=1, attempts=2)
|
|
|
|
# Verifies request has been retried the expected number of times
|
|
assert mock_request.call_count == 2
|