Skip to content

Commit 19c80d6

Browse files
committed
Avoid use mutable CIMultiDict kw param in make_mocked_request
Even though is hard to get an issue, there is still chances to get unwished behaviours as a side effect because of that.
1 parent 9b06e81 commit 19c80d6

File tree

3 files changed

+21
-7
lines changed

3 files changed

+21
-7
lines changed

CONTRIBUTORS.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,4 @@ Yury Selivanov
113113
Yusuke Tsutsumi
114114
Марк Коренберг
115115
Семён Марьясин
116+
Pau Freixes

aiohttp/test_utils.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,7 @@ def get_extra_info(key):
561561
_not_set = object()
562562

563563

564-
def make_mocked_request(method, path, headers=CIMultiDict(), *,
564+
def make_mocked_request(method, path, headers=None, *,
565565
version=HttpVersion(1, 1), closing=False,
566566
app=None,
567567
reader=_not_set,
@@ -616,10 +616,17 @@ def make_mocked_request(method, path, headers=CIMultiDict(), *,
616616

617617
if version < HttpVersion(1, 1):
618618
closing = True
619-
message = RawRequestMessage(method, path, version, headers,
620-
[(k.encode('utf-8'), v.encode('utf-8'))
621-
for k, v in headers.items()],
622-
closing, False)
619+
620+
if headers:
621+
hdrs = headers
622+
raw_hdrs = [
623+
(k.encode('utf-8'), v.encode('utf-8')) for k, v in headers.items()]
624+
else:
625+
hdrs = CIMultiDict()
626+
raw_hdrs = []
627+
628+
message = RawRequestMessage(method, path, version, hdrs,
629+
raw_hdrs, closing, False)
623630
if app is None:
624631
app = _create_app_mock()
625632

tests/test_web_request.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ def test_ctor(make_request, warning):
2020
assert '/path/to?a=1&b=2' == req.path_qs
2121
assert '/path/to' == req.path
2222
assert 'a=1&b=2' == req.query_string
23+
assert CIMultiDict() == req.headers
24+
assert () == req.raw_headers
2325

2426
get = req.GET
2527
assert MultiDict([('a', '1'), ('b', '2')]) == get
@@ -29,18 +31,22 @@ def test_ctor(make_request, warning):
2931
assert req.keep_alive
3032

3133
# just make sure that all lines of make_mocked_request covered
34+
headers = CIMultiDict(FOO='bar')
3235
reader = mock.Mock()
3336
writer = mock.Mock()
3437
payload = mock.Mock()
3538
transport = mock.Mock()
3639
app = mock.Mock()
37-
req = make_request('GET', '/path/to?a=1&b=2', writer=writer, reader=reader,
38-
payload=payload, transport=transport, app=app)
40+
req = make_request('GET', '/path/to?a=1&b=2', headers=headers,
41+
writer=writer, reader=reader, payload=payload,
42+
transport=transport, app=app)
3943
assert req.app is app
4044
assert req.content is payload
4145
assert req.transport is transport
4246
assert req._reader is reader
4347
assert req._writer is writer
48+
assert req.headers == headers
49+
assert req.raw_headers == ((b'FOO', b'bar'),)
4450

4551

4652
def test_doubleslashes(make_request):

0 commit comments

Comments
 (0)