async def test_single_large_file(self, temp_files): filename = 'foo.txt' path = temp_files.add_file(filename) random_data = os.urandom(2 ** 18) with open(path, 'wb') as f: f.write(random_data) with open(path, 'rb') as f: stream = streams.ZipStreamReader( AsyncIterator([ (filename, streams.FileStreamReader(f)) ]) ) data = await stream.read() zip = zipfile.ZipFile(io.BytesIO(data)) # Verify CRCs assert zip.testzip() is None result = zip.open('foo.txt') # Check content of included file assert result.read() == random_data
async def test_zip_files(self, temp_files): files = [] for filename in ['file1.ext', 'zip.zip', 'file2.ext']: path = temp_files.add_file(filename) contents = os.urandom(2**5) with open(path, 'wb') as f: f.write(contents) files.append({ 'filename': filename, 'path': path, 'contents': contents, 'handle': open(path, 'rb') }) stream = streams.ZipStreamReader( AsyncIterator( (file['filename'], streams.FileStreamReader(file['handle'])) for file in files)) data = await stream.read() for file in files: file['handle'].close() zip = zipfile.ZipFile(io.BytesIO(data)) # Verify CRCs: `.testzip()` returns `None` if there are no bad files in the zipfile assert zip.testzip() is None for file in files: assert zip.open(file['filename']).read() == file['contents'] compression_type = zip.open(file['filename'])._compress_type if file['filename'].endswith('.zip'): assert compression_type == zipfile.ZIP_STORED else: assert compression_type != zipfile.ZIP_STORED
async def test_multiple_large_files(self, temp_files): files = [] for index in range(5): filename = 'file{}.ext'.format(index) path = temp_files.add_file(filename) contents = os.urandom(2 ** 18) with open(path, 'wb') as f: f.write(contents) files.append({ 'filename': filename, 'path': path, 'contents': contents }) for file in files: file['handle'] = open(file['path'], 'rb') stream = streams.ZipStreamReader( AsyncIterator( (file['filename'], streams.FileStreamReader(file['handle'])) for file in files ) ) data = await stream.read() for file in files: file['handle'].close() zip = zipfile.ZipFile(io.BytesIO(data)) # Verify CRCs assert zip.testzip() is None for file in files: assert zip.open(file['filename']).read() == file['contents']
async def test_single_large_file(self, temp_files): filename = 'foo.txt' path = temp_files.add_file(filename) random_data = os.urandom(2**18) with open(path, 'wb') as f: f.write(random_data) with open(path, 'rb') as f: stream = streams.ZipStreamReader( AsyncIterator([(filename, streams.FileStreamReader(f))])) data = await stream.read() zip = zipfile.ZipFile(io.BytesIO(data)) # Verify CRCs assert zip.testzip() is None result = zip.open('foo.txt') # Check content of included file assert result.read() == random_data
async def test_multiple_large_files(self, temp_files): files = [] for index in range(5): filename = 'file{}.ext'.format(index) path = temp_files.add_file(filename) contents = os.urandom(2**18) with open(path, 'wb') as f: f.write(contents) files.append({ 'filename': filename, 'path': path, 'contents': contents }) for file in files: file['handle'] = open(file['path'], 'rb') stream = streams.ZipStreamReader( AsyncIterator( (file['filename'], streams.FileStreamReader(file['handle'])) for file in files)) data = await stream.read() for file in files: file['handle'].close() zip = zipfile.ZipFile(io.BytesIO(data)) # Verify CRCs assert zip.testzip() is None for file in files: assert zip.open(file['filename']).read() == file['contents']
async def test_zip_files(self, temp_files): files = [] for filename in ['file1.ext', 'zip.zip', 'file2.ext']: path = temp_files.add_file(filename) contents = os.urandom(2 ** 5) with open(path, 'wb') as f: f.write(contents) files.append({ 'filename': filename, 'path': path, 'contents': contents, 'handle': open(path, 'rb') }) stream = streams.ZipStreamReader( AsyncIterator( (file['filename'], streams.FileStreamReader(file['handle'])) for file in files ) ) data = await stream.read() for file in files: file['handle'].close() zip = zipfile.ZipFile(io.BytesIO(data)) # Verify CRCs: `.testzip()` returns `None` if there are no bad files in the zipfile assert zip.testzip() is None for file in files: assert zip.open(file['filename']).read() == file['contents'] compression_type = zip.open(file['filename'])._compress_type if file['filename'].endswith('.zip'): assert compression_type == zipfile.ZIP_STORED else: assert compression_type != zipfile.ZIP_STORED