64 lines
1.5 KiB
Python
64 lines
1.5 KiB
Python
from __future__ import absolute_import, unicode_literals
|
|
|
|
import mock
|
|
|
|
import pytest
|
|
|
|
import requests
|
|
|
|
import responses
|
|
|
|
from mopidy.internal import http
|
|
|
|
|
|
TIMEOUT = 1000
|
|
URI = 'http://example.com/foo.txt'
|
|
BODY = "This is the contents of foo.txt."
|
|
|
|
|
|
@pytest.fixture
|
|
def session():
|
|
return requests.Session()
|
|
|
|
|
|
@pytest.fixture
|
|
def session_mock():
|
|
return mock.Mock(spec=requests.Session)
|
|
|
|
|
|
@responses.activate
|
|
def test_download_on_server_side_error(session, caplog):
|
|
responses.add(responses.GET, URI, body=BODY, status=500)
|
|
|
|
result = http.download(session, URI)
|
|
|
|
assert result is None
|
|
assert 'Problem downloading' in caplog.text
|
|
|
|
|
|
def test_download_times_out_if_connection_times_out(session_mock, caplog):
|
|
session_mock.get.side_effect = requests.exceptions.Timeout
|
|
|
|
result = http.download(session_mock, URI, timeout=1.0)
|
|
|
|
session_mock.get.assert_called_once_with(URI, timeout=1.0, stream=True)
|
|
assert result is None
|
|
assert (
|
|
'Download of %r failed due to connection timeout after 1.000s' % URI
|
|
in caplog.text)
|
|
|
|
|
|
@responses.activate
|
|
def test_download_times_out_if_download_is_slow(session, caplog):
|
|
responses.add(responses.GET, URI, body=BODY, content_type='text/plain')
|
|
|
|
with mock.patch.object(http, 'time') as time_mock:
|
|
time_mock.time.side_effect = [0, TIMEOUT + 1]
|
|
|
|
result = http.download(session, URI)
|
|
|
|
assert result is None
|
|
assert (
|
|
'Download of %r failed due to download taking more than 1.000s' % URI
|
|
in caplog.text)
|