diff --git a/boxsdk/session/session.py b/boxsdk/session/session.py index 3d6e989d7..f9012aaab 100644 --- a/boxsdk/session/session.py +++ b/boxsdk/session/session.py @@ -337,7 +337,9 @@ def _prepare_and_send_request( network_response = None if 'EOF occurred in violation of protocol' in str(request_exc): reauthentication_needed = True - elif 'Connection aborted' in str(request_exc): + elif any(text in str(request_exc) for text in [ + 'Connection aborted', 'Connection broken', 'Connection reset' + ]): reauthentication_needed = False else: raise diff --git a/test/unit/session/test_session.py b/test/unit/session/test_session.py index f05eecf62..b6b24412f 100644 --- a/test/unit/session/test_session.py +++ b/test/unit/session/test_session.py @@ -222,8 +222,14 @@ def test_box_session_raises_for_failed_response(box_session, mock_network_layer, box_session.get(url=test_url) -def test_box_session_retries_connection_aborted_exception(box_session, mock_network_layer, generic_successful_request_response, test_url): - mock_network_layer.request.side_effect = [RequestsConnectionError('Connection aborted'), generic_successful_request_response] +@pytest.mark.parametrize('exc_message', [ + 'Connection aborted', + "Connection broken: ConnectionResetError(54, 'Connection reset by peer')" +]) +def test_box_session_retries_connection_aborted_exception( + box_session, mock_network_layer, generic_successful_request_response, test_url, exc_message +): + mock_network_layer.request.side_effect = [RequestsConnectionError(exc_message), generic_successful_request_response] mock_network_layer.retry_after.side_effect = lambda delay, request, *args, **kwargs: request(*args, **kwargs) box_response = box_session.get(url=test_url)