fix default download timeout not being set

This commit is contained in:
Jack Robison 2019-03-14 13:07:11 -04:00
parent 2df7284c29
commit 2ab2b846b1
No known key found for this signature in database
GPG key ID: DF25C68FE0239BB2
2 changed files with 34 additions and 7 deletions

View file

@ -390,9 +390,8 @@ class StreamManager:
self.streams.add(stream) self.streams.add(stream)
return stream return stream
async def _download_stream_from_uri(self, uri, exchange_rate_manager: 'ExchangeRateManager', async def _download_stream_from_uri(self, uri, timeout: float, exchange_rate_manager: 'ExchangeRateManager',
file_name: typing.Optional[str] = None, file_name: typing.Optional[str] = None) -> ManagedStream:
timeout: typing.Optional[float] = None) -> ManagedStream:
start_time = self.loop.time() start_time = self.loop.time()
parsed_uri = parse_lbry_uri(uri) parsed_uri = parse_lbry_uri(uri)
if parsed_uri.is_channel: if parsed_uri.is_channel:
@ -496,12 +495,13 @@ class StreamManager:
async def download_stream_from_uri(self, uri, exchange_rate_manager: 'ExchangeRateManager', async def download_stream_from_uri(self, uri, exchange_rate_manager: 'ExchangeRateManager',
file_name: typing.Optional[str] = None, file_name: typing.Optional[str] = None,
timeout: typing.Optional[float] = None) -> ManagedStream: timeout: typing.Optional[float] = None) -> ManagedStream:
timeout = timeout or self.config.download_timeout
if uri in self.starting_streams: if uri in self.starting_streams:
return await self.starting_streams[uri] return await self.starting_streams[uri]
fut = asyncio.Future(loop=self.loop) fut = asyncio.Future(loop=self.loop)
self.starting_streams[uri] = fut self.starting_streams[uri] = fut
try: try:
stream = await self._download_stream_from_uri(uri, exchange_rate_manager, file_name, timeout) stream = await self._download_stream_from_uri(uri, timeout, exchange_rate_manager, file_name)
fut.set_result(stream) fut.set_result(stream)
return stream return stream
except Exception as err: except Exception as err:

View file

@ -17,12 +17,12 @@ from lbrynet.dht.node import Node
from lbrynet.schema.claim import ClaimDict from lbrynet.schema.claim import ClaimDict
def get_mock_node(peer): def get_mock_node(peer=None):
def mock_accumulate_peers(q1: asyncio.Queue, q2: asyncio.Queue): def mock_accumulate_peers(q1: asyncio.Queue, q2: asyncio.Queue):
async def _task(): async def _task():
pass pass
if peer:
q2.put_nowait([peer]) q2.put_nowait([peer])
return q2, asyncio.create_task(_task()) return q2, asyncio.create_task(_task())
mock_node = mock.Mock(spec=Node) mock_node = mock.Mock(spec=Node)
@ -132,6 +132,33 @@ class TestStreamManager(BlobExchangeTestBase):
await asyncio.sleep(0, loop=self.loop) await asyncio.sleep(0, loop=self.loop)
self.assertTrue(checked_post) self.assertTrue(checked_post)
async def test_no_peers_timeout(self):
self.server_from_client = None
self.client_config.fixed_peer_delay = 9001.0
self.client_config.download_timeout = 3.0
await self.setup_stream_manager()
checked_post = False
async def check_post(event):
self.assertEqual(event['event'], 'Time To First Bytes')
self.assertEqual(event['properties']['error'], 'DownloadSDTimeout')
self.assertEqual(event['properties']['tried_peers_count'], None)
self.assertEqual(event['properties']['active_peer_count'], None)
self.assertEqual(event['properties']['use_fixed_peers'], False)
self.assertEqual(event['properties']['added_fixed_peers'], False)
self.assertEqual(event['properties']['fixed_peer_delay'], 9001)
nonlocal checked_post
checked_post = True
self.stream_manager.analytics_manager._post = check_post
start = self.loop.time()
with self.assertRaises(DownloadSDTimeout):
await self.stream_manager.download_stream_from_uri(self.uri, self.exchange_rate_manager)
duration = self.loop.time() - start
await asyncio.sleep(0, loop=self.loop)
self.assertTrue(4.0 >= duration >= 3.0)
self.assertTrue(checked_post)
async def test_download_stop_resume_delete(self): async def test_download_stop_resume_delete(self):
await self.setup_stream_manager() await self.setup_stream_manager()
received = [] received = []