mirror of
				https://github.com/deepset-ai/haystack.git
				synced 2025-10-30 17:29:29 +00:00 
			
		
		
		
	 49e037a055
			
		
	
	
		49e037a055
		
			
		
	
	
	
	
		
			
			* 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
 |