Skip to content

Commit 7df1646

Browse files
committed
Attempt to mock a werkzeug server with range requests
Please see the CI logs since I'm not exactly sure how to interpret it.
1 parent da574fb commit 7df1646

File tree

2 files changed

+48
-3
lines changed

2 files changed

+48
-3
lines changed

tests/lib/server.py

+35
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
from mock import Mock
99
from pip._vendor.contextlib2 import nullcontext
10+
from werkzeug.http import parse_range_header
1011
from werkzeug.serving import WSGIRequestHandler
1112
from werkzeug.serving import make_server as _make_server
1213

@@ -217,6 +218,40 @@ def responder(environ, start_response):
217218
return responder
218219

219220

221+
def file_range_response(path):
222+
# type: (str) -> Responder
223+
def responder(environ, start_response):
224+
# type: (Environ, StartResponse) -> Body
225+
size = os.stat(path).st_size
226+
if 'Range' not in environ:
227+
start_response(
228+
"200 OK", [
229+
("Accept-Ranges", "bytes"),
230+
("Content-Length", str(size)),
231+
("Content-Type", "application/octet-stream"),
232+
],
233+
)
234+
if environ['REQUEST_METHOD'] == 'HEAD':
235+
return []
236+
with open(path, 'rb') as f:
237+
return [f.read()]
238+
239+
# TODO: Multipart ranges
240+
start, end = parse_range_header(environ['Range']).ranges[0]
241+
length = end - start + 1
242+
start_response(
243+
"206 Partial Content", [
244+
("Content-Length", str(length)),
245+
("Content-Range", "{}-{}/{}".format(start, end, size)),
246+
("Content-Type", "application/octet-stream"),
247+
],
248+
)
249+
with open(path, 'rb') as f:
250+
f.seek(start)
251+
return [f.read(length)]
252+
return responder
253+
254+
220255
def authorization_response(path):
221256
def responder(environ, start_response):
222257
# type: (Environ, StartResponse) -> Body

tests/unit/test_network_lazy_wheel.py

+13-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
dist_from_wheel_url,
99
)
1010
from pip._internal.network.session import PipSession
11-
from tests.lib.server import file_response
11+
from tests.lib.server import file_range_response, file_response
1212

1313
MYPY_0_782_WHL = (
1414
'https://files.pythonhosted.org/packages/9d/65/'
@@ -28,6 +28,16 @@ def session():
2828
return PipSession()
2929

3030

31+
@fixture
32+
def mypy_whl_range(mock_server, shared_data):
33+
mypy_whl = shared_data.packages / 'mypy-0.782-py3-none-any.whl'
34+
mock_server.set_responses([file_range_response(mypy_whl)])
35+
mock_server.start()
36+
base_address = 'http://{}:{}'.format(mock_server.host, mock_server.port)
37+
yield "{}/{}".format(base_address, 'mypy-0.782-py3-none-any.whl')
38+
mock_server.stop()
39+
40+
3141
@fixture
3242
def mypy_whl_no_range(mock_server, shared_data):
3343
mypy_whl = shared_data.packages / 'mypy-0.782-py3-none-any.whl'
@@ -39,9 +49,9 @@ def mypy_whl_no_range(mock_server, shared_data):
3949

4050

4151
@mark.network
42-
def test_dist_from_wheel_url(session):
52+
def test_dist_from_wheel_url(session, mypy_whl_range):
4353
"""Test if the acquired distribution contain correct information."""
44-
dist = dist_from_wheel_url('mypy', MYPY_0_782_WHL, session)
54+
dist = dist_from_wheel_url('mypy', mypy_whl_range, session)
4555
assert dist.key == 'mypy'
4656
assert dist.version == '0.782'
4757
assert dist.extras == ['dmypy']

0 commit comments

Comments
 (0)