def test_zlib_compressed_stream_writer(self): compressed_ref = zlib.compress(b'abcd') # Read parts from the beginning for x in range(1, len(compressed_ref)): bytesio = six.BytesIO(b'abcd') s = utils.ZlibCompressedStream(bytesio) compressed = s.read(x) self.assertEqual(x, len(compressed)) self.assertEqual(compressed_ref[0:x], compressed[0:x]) # Try now with bigger data sizes for size in [2 ** x + y for x in range(3, 18) for y in (-1, 0, 1)]: original_bytes = os.urandom(size) compressed_bytes = zlib.compress(original_bytes) # Try first with whole reads uncompressed_stream = six.BytesIO(original_bytes) compressed_stream = utils.ZlibCompressedStream(uncompressed_stream) b = compressed_stream.read() self.assertEqual(len(compressed_bytes), len(b), "Incorrect size when compressing %d bytes" % (size)) self.assertEqual(compressed_bytes, b) # Now read little by little read_size = min(size // 4, 1024) uncompressed_stream = six.BytesIO(original_bytes) compressed_stream = utils.ZlibCompressedStream(uncompressed_stream) b = b'' for c in iter(functools.partial(compressed_stream.read, read_size), b''): b += c self.assertEqual(len(compressed_bytes), len(b), "Incorrect size when compressing %d bytes" % (size)) self.assertEqual(compressed_bytes, b)
def _test_zlib_streams_combined(self, gen_bytes): sizes = [2 ** x + y for x in range(1, 18) for y in (-1, 0, 1)] for size in sizes: original_bytes = gen_bytes(size) # Read the whole thing original_stream = six.BytesIO(original_bytes) compressed_stream = utils.ZlibCompressedStream(original_stream) uncompressed_stream = utils.ZlibUncompressedStream(compressed_stream) b = uncompressed_stream.read() self.assertEqual(size, len(b)) self.assertEqual(original_bytes, b) # There's nothing left now to read for x in range(10): self.assertEqual(0, len(uncompressed_stream.read(100))) # Read with given number of bytes for n in (1, len(original_bytes) // 2, len(original_bytes)): these_bytes = original_bytes[0:n] original_stream = six.BytesIO(these_bytes) compressed_stream = utils.ZlibCompressedStream(original_stream) uncompressed_stream = utils.ZlibUncompressedStream(compressed_stream) b = uncompressed_stream.read(n) self.assertEqual(n, len(b)) self.assertEqual(these_bytes, b) # There's nothing left now to read for x in range(10): self.assertEqual(0, len(uncompressed_stream.read(100)))