Skip to content

Commit

Permalink
Add testcase for SSLError on read()
Browse files Browse the repository at this point in the history
  • Loading branch information
sethmlarson committed Aug 31, 2020
1 parent cb80f84 commit fcb90ef
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions test/test_response.py
@@ -1,7 +1,9 @@
# -*- coding: utf-8 -*-

import contextlib
import re
import socket
import ssl
import zlib

from io import BytesIO, BufferedReader, TextIOWrapper
Expand All @@ -19,6 +21,7 @@
httplib_IncompleteRead,
IncompleteRead,
InvalidChunkLength,
SSLError,
)
from urllib3.packages.six.moves import http_client as httplib
from urllib3.util.retry import Retry, RequestHistory
Expand Down Expand Up @@ -936,6 +939,30 @@ def stream():

assert b"foo\nbar" == data

def test_non_timeout_ssl_error_on_read(self):
mac_error = ssl.SSLError(
"SSL routines", "ssl3_get_record", "decryption failed or bad record mac"
)

@contextlib.contextmanager
def make_bad_mac_fp():
fp = BytesIO(b"")
with mock.patch.object(fp, "read") as fp_read:
# mac/decryption error
fp_read.side_effect = mac_error
yield fp

with make_bad_mac_fp() as fp:
with pytest.raises(SSLError) as e:
HTTPResponse(fp)
assert e.value.args[0] == mac_error

with make_bad_mac_fp() as fp:
resp = HTTPResponse(fp, preload_content=False)
with pytest.raises(SSLError) as e:
resp.read()
assert e.value.args[0] == mac_error


class MockChunkedEncodingResponse(object):
def __init__(self, content):
Expand Down

0 comments on commit fcb90ef

Please sign in to comment.