private void verifyCompressedData(byte[] originalUncompressed, byte[] compressed, int compressedLength) { byte[] uncompressed = new byte[originalUncompressed.length]; int uncompressedSize = getVerifyDecompressor().decompress(compressed, 0, compressedLength, uncompressed, 0, uncompressed.length); assertByteArraysEqual(uncompressed, 0, uncompressedSize, originalUncompressed, 0, originalUncompressed.length); }
@Test(dataProvider = "data") public void testDecompressionBufferOverrun(DataSet dataSet) { byte[] uncompressedOriginal = dataSet.getUncompressed(); byte[] compressed = prepareCompressedData(uncompressedOriginal); // add padding with random bytes that we can verify later byte[] padding = new byte[100]; ThreadLocalRandom.current().nextBytes(padding); byte[] uncompressed = Bytes.concat(new byte[uncompressedOriginal.length], padding); Decompressor decompressor = getDecompressor(); int uncompressedSize = decompressor.decompress( compressed, 0, compressed.length, uncompressed, 0, uncompressedOriginal.length); assertByteArraysEqual(uncompressed, 0, uncompressedSize, uncompressedOriginal, 0, uncompressedOriginal.length); // verify padding is intact assertByteArraysEqual(padding, 0, padding.length, uncompressed, uncompressed.length - padding.length, padding.length); }
@Test(dataProvider = "data") public void testDecompress(DataSet dataSet) throws Exception { byte[] uncompressedOriginal = dataSet.getUncompressed(); byte[] compressed = prepareCompressedData(uncompressedOriginal); byte[] uncompressed = new byte[uncompressedOriginal.length]; Decompressor decompressor = getDecompressor(); int uncompressedSize = decompressor.decompress( compressed, 0, compressed.length, uncompressed, 0, uncompressed.length); assertByteArraysEqual(uncompressed, 0, uncompressedSize, uncompressedOriginal, 0, uncompressedOriginal.length); }
@Test(dataProvider = "data") public void testDecompressWithOutputPadding(DataSet dataSet) { int padding = 1021; byte[] uncompressedOriginal = dataSet.getUncompressed(); byte[] compressed = prepareCompressedData(uncompressedOriginal); byte[] uncompressed = new byte[uncompressedOriginal.length + 2 * padding]; // pre + post padding Decompressor decompressor = getDecompressor(); int uncompressedSize = decompressor.decompress( compressed, 0, compressed.length, uncompressed, padding, uncompressedOriginal.length + padding); assertByteArraysEqual(uncompressed, padding, uncompressedSize, uncompressedOriginal, 0, uncompressedOriginal.length); }
@Test public void testRoundTripSmallLiteral() throws Exception { byte[] data = new byte[256]; for (int i = 0; i < data.length; i++) { data[i] = (byte) i; } Compressor compressor = getCompressor(); byte[] compressed = new byte[compressor.maxCompressedLength(data.length)]; byte[] uncompressed = new byte[data.length]; for (int i = 1; i < data.length; i++) { try { int written = compressor.compress( data, 0, i, compressed, 0, compressed.length); int decompressedSize = getDecompressor().decompress(compressed, 0, written, uncompressed, 0, uncompressed.length); assertByteArraysEqual(data, 0, i, uncompressed, 0, decompressedSize); assertEquals(decompressedSize, i); } catch (MalformedInputException e) { throw new RuntimeException("Failed with " + i + " bytes of input", e); } } }