Example #1
0
    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
Example #2
0
    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
Example #3
0
    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']
Example #4
0
    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
Example #5
0
    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