def test_consume_next_chunk(self): start = 1536 stream = io.BytesIO() data = b'Just one chunk.' chunk_size = len(data) download = download_mod.ChunkedDownload( EXAMPLE_URL, chunk_size, stream, start=start) total_bytes = 16384 transport = self._mock_transport( start, chunk_size, total_bytes, content=data) # Verify the internal state before consuming a chunk. assert not download.finished assert download.bytes_downloaded == 0 assert download.total_bytes is None # Actually consume the chunk and check the output. ret_val = download.consume_next_chunk(transport) assert ret_val is transport.request.return_value range_bytes = u'bytes={:d}-{:d}'.format(start, start + chunk_size - 1) download_headers = {u'range': range_bytes} transport.request.assert_called_once_with( u'GET', EXAMPLE_URL, data=None, headers=download_headers) assert stream.getvalue() == data # Go back and check the internal state after consuming the chunk. assert not download.finished assert download.bytes_downloaded == chunk_size assert download.total_bytes == total_bytes
def test_consume_next_chunk_with_custom_timeout(self): start = 1536 stream = io.BytesIO() data = b"Just one chunk." chunk_size = len(data) download = download_mod.ChunkedDownload(EXAMPLE_URL, chunk_size, stream, start=start) total_bytes = 16384 transport = self._mock_transport(start, chunk_size, total_bytes, content=data) # Actually consume the chunk and check the output. download.consume_next_chunk(transport, timeout=14.7) range_bytes = u"bytes={:d}-{:d}".format(start, start + chunk_size - 1) download_headers = {u"range": range_bytes} transport.request.assert_called_once_with( u"GET", EXAMPLE_URL, data=None, headers=download_headers, timeout=14.7, )
def test_consume_next_chunk_already_finished(self): download = download_mod.ChunkedDownload(EXAMPLE_URL, 512, None) download._finished = True with pytest.raises(ValueError): download.consume_next_chunk(None)