From 71d8fb20832dd36454b80d1fa3383f56eaac4128 Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Fri, 10 May 2019 15:33:19 +0100 Subject: [PATCH] Add unit tests for Base32 encoding and decoding. --- .../briarproject/bramble/util/Base32Test.java | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 bramble-core/src/test/java/org/briarproject/bramble/util/Base32Test.java diff --git a/bramble-core/src/test/java/org/briarproject/bramble/util/Base32Test.java b/bramble-core/src/test/java/org/briarproject/bramble/util/Base32Test.java new file mode 100644 index 0000000000..41b5824e4a --- /dev/null +++ b/bramble-core/src/test/java/org/briarproject/bramble/util/Base32Test.java @@ -0,0 +1,71 @@ +package org.briarproject.bramble.util; + +import org.briarproject.bramble.test.BrambleTestCase; +import org.junit.Test; + +import java.util.Random; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; + +public class Base32Test extends BrambleTestCase { + + // Test vectors from RFC 4648 + // https://tools.ietf.org/html/rfc4648#section-10 + + @Test + public void testEncoding() { + assertEquals("", Base32.encode(new byte[0])); + assertEquals("MY", Base32.encode(new byte[] {'f'})); + assertEquals("MZXQ", Base32.encode(new byte[] {'f', 'o'})); + assertEquals("MZXW6", Base32.encode(new byte[] {'f', 'o', 'o'})); + assertEquals("MZXW6YQ", Base32.encode(new byte[] {'f', 'o', 'o', 'b'})); + assertEquals("MZXW6YTB", + Base32.encode(new byte[] {'f', 'o', 'o', 'b', 'a'})); + assertEquals("MZXW6YTBOI", + Base32.encode(new byte[] {'f', 'o', 'o', 'b', 'a', 'r'})); + } + + @Test + public void testStrictDecoding() { + testDecoding(true); + } + + @Test + public void testNonStrictDecoding() { + testDecoding(false); + } + + private void testDecoding(boolean strict) { + assertArrayEquals(new byte[0], Base32.decode("", strict)); + assertArrayEquals(new byte[] {'f'}, Base32.decode("MY", strict)); + assertArrayEquals(new byte[] {'f', 'o'}, Base32.decode("MZXQ", strict)); + assertArrayEquals(new byte[] {'f', 'o', 'o'}, + Base32.decode("MZXW6", strict)); + assertArrayEquals(new byte[] {'f', 'o', 'o', 'b'}, + Base32.decode("MZXW6YQ", strict)); + assertArrayEquals(new byte[] {'f', 'o', 'o', 'b', 'a'}, + Base32.decode("MZXW6YTB", strict)); + assertArrayEquals(new byte[] {'f', 'o', 'o', 'b', 'a', 'r'}, + Base32.decode("MZXW6YTBOI", strict)); + } + + @Test(expected = IllegalArgumentException.class) + public void testStrictDecodingRejectsNonZeroUnusedBits() { + Base32.decode("MZ", true); + } + + @Test + public void testNonStrictDecodingAcceptsNonZeroUnusedBits() { + assertArrayEquals(new byte[] {'f'}, Base32.decode("MZ", false)); + } + + @Test + public void testRoundTrip() { + Random random = new Random(); + byte[] data = new byte[100 + random.nextInt(100)]; + random.nextBytes(data); + assertArrayEquals(data, Base32.decode(Base32.encode(data), true)); + assertArrayEquals(data, Base32.decode(Base32.encode(data), false)); + } +} -- GitLab