Skip to content

Commit 125dc51

Browse files
Add test
1 parent 9c71bab commit 125dc51

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed

test/unit/test_retry_network.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,11 @@
5151
try:
5252
import snowflake.connector.vendored.urllib3.contrib.pyopenssl
5353
from snowflake.connector.vendored import requests, urllib3
54+
from snowflake.connector.vendored.requests.exceptions import SSLError
5455
except ImportError: # pragma: no cover
5556
import requests
5657
import urllib3
58+
from requests.exceptions import SSLError
5759

5860
THIS_DIR = os.path.dirname(os.path.realpath(__file__))
5961

@@ -477,3 +479,58 @@ def test_retry_request_timeout(mockSessionRequest, next_action_result):
477479
# 13 seconds should be enough for authenticator to attempt thrice
478480
# however, loosen restrictions to avoid thread scheduling causing failure
479481
assert 1 < mockSessionRequest.call_count < 5
482+
483+
484+
def test_sslerror_with_econnreset_retries():
485+
"""Test that SSLError with ECONNRESET raises RetryRequest."""
486+
connection = mock_connection()
487+
connection.errorhandler = Error.default_errorhandler
488+
rest = SnowflakeRestful(
489+
host="testaccount.snowflakecomputing.com",
490+
port=443,
491+
connection=connection,
492+
)
493+
494+
default_parameters = {
495+
"method": "POST",
496+
"full_url": "https://testaccount.snowflakecomputing.com/",
497+
"headers": {},
498+
"data": '{"code": 12345}',
499+
"token": None,
500+
}
501+
502+
# Test SSLError with ECONNRESET in the message
503+
econnreset_ssl_error = SSLError("Connection broken: ECONNRESET")
504+
session = MagicMock()
505+
session.request = Mock(side_effect=econnreset_ssl_error)
506+
507+
with pytest.raises(RetryRequest, match="Connection broken: ECONNRESET"):
508+
rest._request_exec(session=session, **default_parameters)
509+
510+
511+
def test_sslerror_without_econnreset_does_not_retry():
512+
"""Test that SSLError without ECONNRESET does not retry but raises OperationalError."""
513+
connection = mock_connection()
514+
connection.errorhandler = Error.default_errorhandler
515+
rest = SnowflakeRestful(
516+
host="testaccount.snowflakecomputing.com",
517+
port=443,
518+
connection=connection,
519+
)
520+
521+
default_parameters = {
522+
"method": "POST",
523+
"full_url": "https://testaccount.snowflakecomputing.com/",
524+
"headers": {},
525+
"data": '{"code": 12345}',
526+
"token": None,
527+
}
528+
529+
# Test SSLError without ECONNRESET in the message
530+
regular_ssl_error = SSLError("SSL handshake failed")
531+
session = MagicMock()
532+
session.request = Mock(side_effect=regular_ssl_error)
533+
534+
# This should raise OperationalError, not RetryRequest
535+
with pytest.raises(OperationalError):
536+
rest._request_exec(session=session, **default_parameters)

0 commit comments

Comments
 (0)