Adding a batch of decompression tests.
Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/617860eb Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/617860eb Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/617860eb Branch: refs/heads/master Commit: 617860eb422480c46f74b3c1fa6b1087f491db38 Parents: ebeb53d Author: Dawid Weiss <dawid.we...@carrotsearch.com> Authored: Tue Feb 23 15:52:15 2016 +0100 Committer: Stefan Bodewig <bode...@apache.org> Committed: Wed Feb 24 15:42:19 2016 +0100 ---------------------------------------------------------------------- .../archivers/sevenz/SevenZFileTest.java | 63 +++++++++++++++++++ src/test/resources/COMPRESS-320/BZip2-solid.7z | Bin 0 -> 66992 bytes src/test/resources/COMPRESS-320/BZip2.7z | Bin 0 -> 98148 bytes src/test/resources/COMPRESS-320/Copy-solid.7z | Bin 0 -> 325679 bytes src/test/resources/COMPRESS-320/Copy.7z | Bin 0 -> 325669 bytes .../resources/COMPRESS-320/Deflate-solid.7z | Bin 0 -> 73730 bytes src/test/resources/COMPRESS-320/Deflate.7z | Bin 0 -> 97803 bytes src/test/resources/COMPRESS-320/LZMA-solid.7z | Bin 0 -> 64813 bytes src/test/resources/COMPRESS-320/LZMA.7z | Bin 0 -> 95391 bytes src/test/resources/COMPRESS-320/LZMA2-solid.7z | Bin 0 -> 64845 bytes src/test/resources/COMPRESS-320/LZMA2.7z | Bin 0 -> 95705 bytes src/test/resources/COMPRESS-320/PPMd-solid.7z | Bin 0 -> 61452 bytes src/test/resources/COMPRESS-320/PPMd.7z | Bin 0 -> 86170 bytes src/test/resources/COMPRESS-320/recreate.sh | 9 +++ 14 files changed, 72 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java index 196d040..ce17218 100644 --- a/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java +++ b/src/test/java/org/apache/commons/compress/archivers/sevenz/SevenZFileTest.java @@ -19,10 +19,16 @@ package org.apache.commons.compress.archivers.sevenz; import static org.junit.Assert.*; +import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.IOException; import java.security.NoSuchAlgorithmException; import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + import javax.crypto.Cipher; + import org.apache.commons.compress.AbstractTestCase; import org.apache.commons.compress.PasswordRequiredException; import org.junit.Test; @@ -31,6 +37,63 @@ public class SevenZFileTest extends AbstractTestCase { private static final String TEST2_CONTENT = "<?xml version = '1.0'?>\r\n<!DOCTYPE" + " connections>\r\n<meinxml>\r\n\t<leer />\r\n</meinxml>\n"; + // https://issues.apache.org/jira/browse/COMPRESS-320 + @Test + public void testRandomlySkippingEntries() throws Exception { + // Read sequential reference. + Map<String, byte[]> entriesByName = new HashMap<String, byte[]>(); + SevenZFile archive = new SevenZFile(getFile("COMPRESS-320/Copy.7z")); + SevenZArchiveEntry entry; + while ((entry = archive.getNextEntry()) != null) { + if (entry.hasStream()) { + entriesByName.put(entry.getName(), readFully(archive)); + } + } + archive.close(); + + String[] variants = { + "BZip2-solid.7z", + "BZip2.7z", + "Copy-solid.7z", + "Copy.7z", + "Deflate-solid.7z", + "Deflate.7z", + "LZMA-solid.7z", + "LZMA.7z", + "LZMA2-solid.7z", + "LZMA2.7z", + // TODO: unsupported compression method. + // "PPMd-solid.7z", + // "PPMd.7z", + }; + + for (String fileName : variants) { + archive = new SevenZFile(getFile("COMPRESS-320/" + fileName)); + + while ((entry = archive.getNextEntry()) != null) { + // TODO: randomly skip reading entries. + + if (entry.hasStream()) { + assertTrue(entriesByName.containsKey(entry.getName())); + byte [] content = readFully(archive); + assertTrue("Content mismatch on: " + fileName + "!" + entry.getName(), + Arrays.equals(content, entriesByName.get(entry.getName()))); + } + } + + archive.close(); + } + } + + private byte [] readFully(SevenZFile archive) throws IOException { + byte [] buf = new byte [1024]; + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + for (int len = 0; (len = archive.read(buf)) > 0;) { + baos.write(buf, 0, len); + } + return baos.toByteArray(); + } + @Test public void testAllEmptyFilesArchive() throws Exception { SevenZFile archive = new SevenZFile(getFile("7z-empty-mhc-off.7z")); http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/resources/COMPRESS-320/BZip2-solid.7z ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-320/BZip2-solid.7z b/src/test/resources/COMPRESS-320/BZip2-solid.7z new file mode 100644 index 0000000..a1ff11b Binary files /dev/null and b/src/test/resources/COMPRESS-320/BZip2-solid.7z differ http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/resources/COMPRESS-320/BZip2.7z ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-320/BZip2.7z b/src/test/resources/COMPRESS-320/BZip2.7z new file mode 100644 index 0000000..3272ecd Binary files /dev/null and b/src/test/resources/COMPRESS-320/BZip2.7z differ http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/resources/COMPRESS-320/Copy-solid.7z ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-320/Copy-solid.7z b/src/test/resources/COMPRESS-320/Copy-solid.7z new file mode 100644 index 0000000..008564d Binary files /dev/null and b/src/test/resources/COMPRESS-320/Copy-solid.7z differ http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/resources/COMPRESS-320/Copy.7z ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-320/Copy.7z b/src/test/resources/COMPRESS-320/Copy.7z new file mode 100644 index 0000000..958cd8f Binary files /dev/null and b/src/test/resources/COMPRESS-320/Copy.7z differ http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/resources/COMPRESS-320/Deflate-solid.7z ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-320/Deflate-solid.7z b/src/test/resources/COMPRESS-320/Deflate-solid.7z new file mode 100644 index 0000000..00eb84d Binary files /dev/null and b/src/test/resources/COMPRESS-320/Deflate-solid.7z differ http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/resources/COMPRESS-320/Deflate.7z ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-320/Deflate.7z b/src/test/resources/COMPRESS-320/Deflate.7z new file mode 100644 index 0000000..b5e3570 Binary files /dev/null and b/src/test/resources/COMPRESS-320/Deflate.7z differ http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/resources/COMPRESS-320/LZMA-solid.7z ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-320/LZMA-solid.7z b/src/test/resources/COMPRESS-320/LZMA-solid.7z new file mode 100644 index 0000000..5f55993 Binary files /dev/null and b/src/test/resources/COMPRESS-320/LZMA-solid.7z differ http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/resources/COMPRESS-320/LZMA.7z ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-320/LZMA.7z b/src/test/resources/COMPRESS-320/LZMA.7z new file mode 100644 index 0000000..3416d11 Binary files /dev/null and b/src/test/resources/COMPRESS-320/LZMA.7z differ http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/resources/COMPRESS-320/LZMA2-solid.7z ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-320/LZMA2-solid.7z b/src/test/resources/COMPRESS-320/LZMA2-solid.7z new file mode 100644 index 0000000..5a9f807 Binary files /dev/null and b/src/test/resources/COMPRESS-320/LZMA2-solid.7z differ http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/resources/COMPRESS-320/LZMA2.7z ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-320/LZMA2.7z b/src/test/resources/COMPRESS-320/LZMA2.7z new file mode 100644 index 0000000..c6c8347 Binary files /dev/null and b/src/test/resources/COMPRESS-320/LZMA2.7z differ http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/resources/COMPRESS-320/PPMd-solid.7z ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-320/PPMd-solid.7z b/src/test/resources/COMPRESS-320/PPMd-solid.7z new file mode 100644 index 0000000..5a3ee0a Binary files /dev/null and b/src/test/resources/COMPRESS-320/PPMd-solid.7z differ http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/resources/COMPRESS-320/PPMd.7z ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-320/PPMd.7z b/src/test/resources/COMPRESS-320/PPMd.7z new file mode 100644 index 0000000..237396a Binary files /dev/null and b/src/test/resources/COMPRESS-320/PPMd.7z differ http://git-wip-us.apache.org/repos/asf/commons-compress/blob/617860eb/src/test/resources/COMPRESS-320/recreate.sh ---------------------------------------------------------------------- diff --git a/src/test/resources/COMPRESS-320/recreate.sh b/src/test/resources/COMPRESS-320/recreate.sh new file mode 100644 index 0000000..09bd0dc --- /dev/null +++ b/src/test/resources/COMPRESS-320/recreate.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +rm *.7z +for COMPRESSION in "LZMA" "LZMA2" "PPMd" "BZip2" "Deflate" "Copy"; do + # New solid block every 10 files. + 7za a -m0=$COMPRESSION -ms10f $COMPRESSION-solid.7z ../../../../src/main/java/org/apache/commons/compress/compressors + # Each file in isolation + 7za a -m0=$COMPRESSION -ms=off $COMPRESSION.7z ../../../../src/main/java/org/apache/commons/compress/compressors +done