diff options
author | Martin Polden <mpolden@mpolden.no> | 2022-04-04 10:13:47 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2022-04-04 15:26:43 +0200 |
commit | 6e75b2fbedc7e6af66d3758499e26d99f61d0944 (patch) | |
tree | 912d5c3a66d00252c618c8ab5f8d8851f76298db /vespajlib/src/test/java | |
parent | 9430b3bb0bafaa2e31381f1956a3699a77512dc7 (diff) |
Move relevant tests to ArchiveStreamReaderTest
Diffstat (limited to 'vespajlib/src/test/java')
-rw-r--r-- | vespajlib/src/test/java/com/yahoo/compress/ArchiveStreamReaderTest.java | 66 |
1 files changed, 62 insertions, 4 deletions
diff --git a/vespajlib/src/test/java/com/yahoo/compress/ArchiveStreamReaderTest.java b/vespajlib/src/test/java/com/yahoo/compress/ArchiveStreamReaderTest.java index 9a292e8b3ea..a2ad82b0722 100644 --- a/vespajlib/src/test/java/com/yahoo/compress/ArchiveStreamReaderTest.java +++ b/vespajlib/src/test/java/com/yahoo/compress/ArchiveStreamReaderTest.java @@ -16,6 +16,9 @@ import java.util.HashMap; import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; /** * @author mpolden @@ -27,15 +30,70 @@ class ArchiveStreamReaderTest { Map<String, String> zipContents = Map.of("foo", "contents of foo", "bar", "contents of bar", "baz", "0".repeat(2049)); - ArchiveStreamReader reader = ArchiveStreamReader.ofZip(zip(zipContents), Options.standard()); + Map<String, String> extracted = readAll(zip(zipContents), Options.standard()); + assertEquals(zipContents, extracted); + } + + @Test + void entry_size_limit() { + Map<String, String> entries = Map.of("foo.xml", "foobar"); + Options options = Options.standard().pathPredicate("foo.xml"::equals).entrySizeLimit(1); + try { + readAll(zip(entries), options); + fail("Expected exception"); + } catch (IllegalArgumentException ignored) {} + + entries = Map.of("foo.xml", "foobar", + "foo.jar", "0".repeat(100) // File not extracted and thus not subject to size limit + ); + Map<String, String> extracted = readAll(zip(entries), options.entrySizeLimit(10)); + assertEquals(Map.of("foo.xml", "foobar"), extracted); + } + + @Test + void size_limit() { + Map<String, String> entries = Map.of("foo.xml", "foo", "bar.xml", "bar"); + try { + readAll(zip(entries), Options.standard().sizeLimit(4)); + fail("Expected exception"); + } catch (IllegalArgumentException ignored) {} + } + + @Test + void paths() { + Map<String, Boolean> tests = Map.of( + "../../services.xml", true, + "/../.././services.xml", true, + "./application/././services.xml", true, + "application//services.xml", true, + "artifacts/", false, // empty dir + "services..xml", false, + "application/services.xml", false, + "components/foo-bar-deploy.jar", false, + "services.xml", false + ); + + Options options = Options.standard().entrySizeLimit(1024); + tests.forEach((name, expectException) -> { + try { + readAll(zip(Map.of(name, "foo")), options.pathPredicate(name::equals)); + assertFalse(expectException, "Expected exception for '" + name + "'"); + } catch (IllegalArgumentException ignored) { + assertTrue(expectException, "Unexpected exception for '" + name + "'"); + } + }); + } + + private static Map<String, String> readAll(InputStream inputStream, Options options) { + ArchiveStreamReader reader = ArchiveStreamReader.ofZip(inputStream, options); ArchiveStreamReader.ArchiveFile file; - Map<String, String> extracted = new HashMap<>(); + Map<String, String> entries = new HashMap<>(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); while ((file = reader.readNextTo(baos)) != null) { - extracted.put(file.path().toString(), baos.toString(StandardCharsets.UTF_8)); + entries.put(file.path().toString(), baos.toString(StandardCharsets.UTF_8)); baos.reset(); } - assertEquals(zipContents, extracted); + return entries; } private static InputStream zip(Map<String, String> entries) { |