aboutsummaryrefslogtreecommitdiffstats
path: root/vespajlib/src/test/java
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-04-04 10:13:47 +0200
committerMartin Polden <mpolden@mpolden.no>2022-04-04 15:26:43 +0200
commit6e75b2fbedc7e6af66d3758499e26d99f61d0944 (patch)
tree912d5c3a66d00252c618c8ab5f8d8851f76298db /vespajlib/src/test/java
parent9430b3bb0bafaa2e31381f1956a3699a77512dc7 (diff)
Move relevant tests to ArchiveStreamReaderTest
Diffstat (limited to 'vespajlib/src/test/java')
-rw-r--r--vespajlib/src/test/java/com/yahoo/compress/ArchiveStreamReaderTest.java66
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) {