aboutsummaryrefslogtreecommitdiff
path: root/java/org/brotli/wrapper/common/SetRfcDictionaryTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/org/brotli/wrapper/common/SetRfcDictionaryTest.java')
-rwxr-xr-xjava/org/brotli/wrapper/common/SetRfcDictionaryTest.java102
1 files changed, 102 insertions, 0 deletions
diff --git a/java/org/brotli/wrapper/common/SetRfcDictionaryTest.java b/java/org/brotli/wrapper/common/SetRfcDictionaryTest.java
new file mode 100755
index 0000000..8577800
--- /dev/null
+++ b/java/org/brotli/wrapper/common/SetRfcDictionaryTest.java
@@ -0,0 +1,102 @@
+/* Copyright 2015 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+package org.brotli.wrapper.common;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import org.brotli.wrapper.dec.BrotliInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.JUnit4;
+
+/**
+ * Tests for {@link BrotliCommon}.
+ */
+@RunWith(JUnit4.class)
+public class SetRfcDictionaryTest {
+
+ // TODO: remove when Bazel get JNI support.
+ static {
+ System.load(new java.io.File(new java.io.File(System.getProperty("java.library.path")),
+ "liblibjni_Uno_Udictionary_Udata.so").getAbsolutePath());
+ }
+
+ @Test
+ public void testRfcDictionaryChecksums() throws IOException, NoSuchAlgorithmException {
+ FileInputStream dictionary = new FileInputStream(System.getProperty("RFC_DICTIONARY"));
+ byte[] data = new byte[BrotliCommon.RFC_DICTIONARY_SIZE + 1];
+ int offset = 0;
+ try {
+ int readBytes;
+ while ((readBytes = dictionary.read(data, offset, data.length - offset)) != -1) {
+ offset += readBytes;
+ if (offset > BrotliCommon.RFC_DICTIONARY_SIZE) {
+ break;
+ }
+ }
+ } finally {
+ dictionary.close();
+ }
+ if (offset != BrotliCommon.RFC_DICTIONARY_SIZE) {
+ fail("dictionary size mismatch");
+ }
+
+ MessageDigest md5 = MessageDigest.getInstance("MD5");
+ md5.update(data, 0, offset);
+ assertTrue(BrotliCommon.checkDictionaryDataMd5(md5.digest()));
+
+ MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
+ sha1.update(data, 0, offset);
+ assertTrue(BrotliCommon.checkDictionaryDataSha1(sha1.digest()));
+
+ MessageDigest sha256 = MessageDigest.getInstance("SHA-256");
+ sha256.update(data, 0, offset);
+ assertTrue(BrotliCommon.checkDictionaryDataSha256(sha256.digest()));
+ }
+
+ @Test
+ public void testSetRfcDictionary() throws IOException {
+ /* "leftdatadataleft" encoded with dictionary words. */
+ byte[] data = {27, 15, 0, 0, 0, 0, -128, -29, -76, 13, 0, 0, 7, 91, 38, 49, 64, 2, 0, -32, 78,
+ 27, 65, -128, 32, 80, 16, 36, 8, 6};
+ FileInputStream dictionary = new FileInputStream(System.getProperty("RFC_DICTIONARY"));
+ try {
+ BrotliCommon.setDictionaryData(dictionary);
+ } finally {
+ dictionary.close();
+ }
+
+ BrotliInputStream decoder = new BrotliInputStream(new ByteArrayInputStream(data));
+ byte[] output = new byte[17];
+ int offset = 0;
+ try {
+ int bytesRead;
+ while ((bytesRead = decoder.read(output, offset, 17 - offset)) != -1) {
+ offset += bytesRead;
+ }
+ } finally {
+ decoder.close();
+ }
+ assertEquals(16, offset);
+ byte[] expected = {
+ 'l', 'e', 'f', 't',
+ 'd', 'a', 't', 'a',
+ 'd', 'a', 't', 'a',
+ 'l', 'e', 'f', 't',
+ 0
+ };
+ assertArrayEquals(expected, output);
+ }
+}