diff --git a/pom.xml b/pom.xml index 81e0f86..c597224 100644 --- a/pom.xml +++ b/pom.xml @@ -171,10 +171,27 @@ cobbzilla-utils is available under the Apache License, version 2: http://www.apa commons-compress ${commons-compress.version} - - org.meteogroup.jbrotli - jbrotli - 0.5.0 + + + + + + + + + + + + + com.nixxcode.jvmbrotli + jvmbrotli + 0.2.0 + + + + com.nixxcode.jvmbrotli + jvmbrotli-linux-x86-amd64 + 0.2.0 diff --git a/src/main/java/org/cobbzilla/util/http/HttpContentEncodingType.java b/src/main/java/org/cobbzilla/util/http/HttpContentEncodingType.java index 897eeef..4e1e843 100644 --- a/src/main/java/org/cobbzilla/util/http/HttpContentEncodingType.java +++ b/src/main/java/org/cobbzilla/util/http/HttpContentEncodingType.java @@ -1,10 +1,11 @@ package org.cobbzilla.util.http; import com.fasterxml.jackson.annotation.JsonCreator; +import com.nixxcode.jvmbrotli.common.BrotliLoader; +import com.nixxcode.jvmbrotli.dec.BrotliInputStream; +import com.nixxcode.jvmbrotli.enc.BrotliOutputStream; import lombok.AllArgsConstructor; import org.cobbzilla.util.io.FilterInputStreamViaOutputStream; -import org.meteogroup.jbrotli.io.BrotliInputStream; -import org.meteogroup.jbrotli.io.BrotliOutputStream; import java.io.IOException; import java.io.InputStream; @@ -23,6 +24,10 @@ public enum HttpContentEncodingType { br (BrotliInputStream::new, BrotliOutputStream::new, BrotliOutputStream.class), bro (BrotliInputStream::new, BrotliOutputStream::new, BrotliOutputStream.class); + static { + BrotliLoader.isBrotliAvailable(); + } + private final HttpContentEncodingInputWrapper inputWrapper; private final HttpContentEncodingOutputWrapper outputWrapper; private final HttpContentEncodingInputAsOutputWrapper inputAsOutputWrapper; diff --git a/src/test/java/org/cobbzilla/util/http/HttpContentEncodingTypeTest.java b/src/test/java/org/cobbzilla/util/http/HttpContentEncodingTypeTest.java new file mode 100644 index 0000000..c80ead6 --- /dev/null +++ b/src/test/java/org/cobbzilla/util/http/HttpContentEncodingTypeTest.java @@ -0,0 +1,35 @@ +package org.cobbzilla.util.http; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.RandomUtils; +import org.cobbzilla.util.system.Bytes; +import org.junit.Test; + +import java.io.*; + +import static org.junit.Assert.assertArrayEquals; + +public class HttpContentEncodingTypeTest { + + @Test public void testEncodingTypes () throws Exception { + for (HttpContentEncodingType encoding : HttpContentEncodingType.values()) { + testEncodingType(encoding); + } + } + + private void testEncodingType(HttpContentEncodingType encoding) throws IOException { + final byte[] expectedData = RandomUtils.nextBytes((int) (65*Bytes.KB)); + final ByteArrayInputStream in = new ByteArrayInputStream(expectedData); + final ByteArrayOutputStream out = new ByteArrayOutputStream(); + + final OutputStream encOut = encoding.wrapOutput(out); + IOUtils.copyLarge(in, encOut); + in.close(); + encOut.close(); + + final InputStream decIn = encoding.wrapInput(new ByteArrayInputStream(out.toByteArray())); + final ByteArrayOutputStream actualData = new ByteArrayOutputStream(); + IOUtils.copyLarge(decIn, actualData); + assertArrayEquals("data was not the same", expectedData, actualData.toByteArray()); + } +}