Skip to content

Commit

Permalink
Add test accessing request.url when transport is closed (aio-libs#3177)
Browse files Browse the repository at this point in the history
  • Loading branch information
jcugat authored and asvetlov committed Sep 2, 2018
1 parent 7b71302 commit 596bf39
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 9 deletions.
18 changes: 10 additions & 8 deletions aiohttp/web_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ class BaseRequest(collections.MutableMapping, HeadersMixin):
ATTRS = HeadersMixin.ATTRS | frozenset([
'_message', '_protocol', '_payload_writer', '_payload', '_headers',
'_method', '_version', '_rel_url', '_post', '_read_bytes',
'_state', '_cache', '_task', '_client_max_size', '_loop'])
'_state', '_cache', '_task', '_client_max_size', '_loop',
'_transport_sslcontext', '_transport_peername'])

def __init__(self, message, payload, protocol, payload_writer, task,
loop,
Expand All @@ -105,6 +106,10 @@ def __init__(self, message, payload, protocol, payload_writer, task,
self._client_max_size = client_max_size
self._loop = loop

transport = self._protocol.transport
self._transport_sslcontext = transport.get_extra_info('sslcontext')
self._transport_peername = transport.get_extra_info('peername')

if scheme is not None:
self._cache['scheme'] = scheme
if host is not None:
Expand Down Expand Up @@ -292,7 +297,7 @@ def scheme(self) -> str:
'http' or 'https'.
"""
if self.transport.get_extra_info('sslcontext'):
if self._transport_sslcontext:
return 'https'
else:
return 'http'
Expand Down Expand Up @@ -338,13 +343,10 @@ def remote(self) -> Optional[str]:
- overridden value by .clone(remote=new_remote) call.
- peername of opened socket
"""
if self.transport is None:
return None
peername = self.transport.get_extra_info('peername')
if isinstance(peername, (list, tuple)):
return peername[0]
if isinstance(self._transport_peername, (list, tuple)):
return self._transport_peername[0]
else:
return peername
return self._transport_peername

@reify
def url(self) -> URL:
Expand Down
16 changes: 15 additions & 1 deletion tests/test_web_request.py
Original file line number Diff line number Diff line change
Expand Up @@ -631,9 +631,23 @@ def test_request_custom_attr():


def test_remote_with_closed_transport():
transp = mock.Mock()
transp.get_extra_info.return_value = ('10.10.10.10', 1234)
req = make_mocked_request('GET', '/', transport=transp)
req._protocol = None
assert req.remote == '10.10.10.10'


def test_url_http_with_closed_transport():
req = make_mocked_request('GET', '/')
req._protocol = None
assert req.remote is None
assert str(req.url).startswith('http://')


def test_url_https_with_closed_transport():
req = make_mocked_request('GET', '/', sslcontext=True)
req._protocol = None
assert str(req.url).startswith('https://')


def test_eq():
Expand Down

0 comments on commit 596bf39

Please sign in to comment.