diff --git a/core-util-jvm/src/test/java/org/signal/core/util/logging/LogTest.java b/core-util-jvm/src/test/java/org/signal/core/util/logging/LogTest.java deleted file mode 100644 index 0bb4880a43..0000000000 --- a/core-util-jvm/src/test/java/org/signal/core/util/logging/LogTest.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2023 Signal Messenger, LLC - * SPDX-License-Identifier: AGPL-3.0-only - */ - -package org.signal.core.util.logging; - -import org.junit.Assert; -import org.junit.Test; - -import static org.junit.Assert.assertEquals; - -public final class LogTest { - - @Test - public void tag_short_class_name() { - assertEquals("MyClass", Log.tag(MyClass.class)); - } - - @Test - public void tag_23_character_class_name() { - String tag = Log.tag(TwentyThreeCharacters23.class); - Assert.assertEquals("TwentyThreeCharacters23", tag); - Assert.assertEquals(23, tag.length()); - } - - @Test - public void tag_24_character_class_name() { - Assert.assertEquals(24, TwentyFour24Characters24.class.getSimpleName().length()); - String tag = Log.tag(TwentyFour24Characters24.class); - Assert.assertEquals("TwentyFour24Characters2", tag); - assertEquals(23, Log.tag(TwentyThreeCharacters23.class).length()); - } - - private class MyClass { - } - - private class TwentyThreeCharacters23 { - } - - private class TwentyFour24Characters24 { - } -} diff --git a/core-util-jvm/src/test/java/org/signal/core/util/logging/LogTest.kt b/core-util-jvm/src/test/java/org/signal/core/util/logging/LogTest.kt new file mode 100644 index 0000000000..ebb4d64374 --- /dev/null +++ b/core-util-jvm/src/test/java/org/signal/core/util/logging/LogTest.kt @@ -0,0 +1,36 @@ +/* + * Copyright 2023 Signal Messenger, LLC + * SPDX-License-Identifier: AGPL-3.0-only + */ +package org.signal.core.util.logging + +import org.junit.Assert.assertEquals +import org.junit.Test + +class LogTest { + @Test + fun tag_short_class_name() { + assertEquals("MyClass", Log.tag(MyClass::class)) + } + + @Test + fun tag_23_character_class_name() { + val tag = Log.tag(TwentyThreeCharacters23::class) + assertEquals("TwentyThreeCharacters23", tag) + assertEquals(23, tag.length) + } + + @Test + fun tag_24_character_class_name() { + assertEquals(24, TwentyFour24Characters24::class.simpleName!!.length) + val tag = Log.tag(TwentyFour24Characters24::class) + assertEquals("TwentyFour24Characters2", tag) + assertEquals(23, Log.tag(TwentyThreeCharacters23::class).length) + } + + private inner class MyClass + + private inner class TwentyThreeCharacters23 + + private inner class TwentyFour24Characters24 +} diff --git a/core-util/src/test/java/org/signal/core/util/BreakIteratorCompatTest.java b/core-util/src/test/java/org/signal/core/util/BreakIteratorCompatTest.java deleted file mode 100644 index 1d5dda3584..0000000000 --- a/core-util/src/test/java/org/signal/core/util/BreakIteratorCompatTest.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.signal.core.util; - -import org.junit.Test; - -import java.util.ArrayList; -import java.util.List; - -import static java.util.Arrays.asList; -import static org.junit.Assert.assertEquals; - -public final class BreakIteratorCompatTest { - - @Test - public void empty() { - BreakIteratorCompat breakIterator = BreakIteratorCompat.getInstance(); - breakIterator.setText(""); - - assertEquals(BreakIteratorCompat.DONE, breakIterator.next()); - } - - @Test - public void single() { - BreakIteratorCompat breakIterator = BreakIteratorCompat.getInstance(); - breakIterator.setText("a"); - - assertEquals(1, breakIterator.next()); - assertEquals(BreakIteratorCompat.DONE, breakIterator.next()); - } - - @Test - public void count_empty() { - BreakIteratorCompat breakIterator = BreakIteratorCompat.getInstance(); - breakIterator.setText(""); - - assertEquals(0, breakIterator.countBreaks()); - assertEquals(BreakIteratorCompat.DONE, breakIterator.next()); - } - - @Test - public void count_simple_text() { - BreakIteratorCompat breakIterator = BreakIteratorCompat.getInstance(); - breakIterator.setText("abc"); - - assertEquals(3, breakIterator.countBreaks()); - assertEquals(BreakIteratorCompat.DONE, breakIterator.next()); - } - - @Test - public void two_counts() { - BreakIteratorCompat breakIterator = BreakIteratorCompat.getInstance(); - breakIterator.setText("abc"); - - assertEquals(3, breakIterator.countBreaks()); - assertEquals(BreakIteratorCompat.DONE, breakIterator.next()); - assertEquals(3, breakIterator.countBreaks()); - } - - @Test - public void count_multi_character_graphemes() { - String hindi = "समाजो गयेग"; - - BreakIteratorCompat breakIterator = BreakIteratorCompat.getInstance(); - breakIterator.setText(hindi); - - assertEquals(7, breakIterator.countBreaks()); - assertEquals(BreakIteratorCompat.DONE, breakIterator.next()); - } - - @Test - public void iterate_multi_character_graphemes() { - String hindi = "समाजो गयेग"; - - BreakIteratorCompat breakIterator = BreakIteratorCompat.getInstance(); - breakIterator.setText(hindi); - - assertEquals(asList("स", "मा", "जो", " ", "ग", "ये", "ग"), toList(breakIterator)); - assertEquals(BreakIteratorCompat.DONE, breakIterator.next()); - } - - @Test - public void split_multi_character_graphemes() { - String hindi = "समाजो गयेग"; - - BreakIteratorCompat breakIterator = BreakIteratorCompat.getInstance(); - breakIterator.setText(hindi); - - assertEquals("समाजो गयेग", breakIterator.take(8)); - assertEquals("समाजो गयेग", breakIterator.take(7)); - assertEquals("समाजो गये", breakIterator.take(6)); - assertEquals("समाजो ग", breakIterator.take(5)); - assertEquals("समाजो ", breakIterator.take(4)); - assertEquals("समाजो", breakIterator.take(3)); - assertEquals("समा", breakIterator.take(2)); - assertEquals("स", breakIterator.take(1)); - assertEquals("", breakIterator.take(0)); - assertEquals("", breakIterator.take(-1)); - } - - private List toList(BreakIteratorCompat breakIterator) { - List list = new ArrayList<>(); - breakIterator.forEach(list::add); - return list; - } -} diff --git a/core-util/src/test/java/org/signal/core/util/BreakIteratorCompatTest.kt b/core-util/src/test/java/org/signal/core/util/BreakIteratorCompatTest.kt new file mode 100644 index 0000000000..42fd22f20a --- /dev/null +++ b/core-util/src/test/java/org/signal/core/util/BreakIteratorCompatTest.kt @@ -0,0 +1,92 @@ +package org.signal.core.util + +import org.junit.Assert.assertEquals +import org.junit.Test + +class BreakIteratorCompatTest { + @Test + fun empty() { + val breakIterator = BreakIteratorCompat.getInstance() + breakIterator.setText("") + + assertEquals(BreakIteratorCompat.DONE, breakIterator.next()) + } + + @Test + fun single() { + val breakIterator = BreakIteratorCompat.getInstance() + breakIterator.setText("a") + + assertEquals(1, breakIterator.next()) + assertEquals(BreakIteratorCompat.DONE, breakIterator.next()) + } + + @Test + fun count_empty() { + val breakIterator = BreakIteratorCompat.getInstance() + breakIterator.setText("") + + assertEquals(0, breakIterator.countBreaks()) + assertEquals(BreakIteratorCompat.DONE, breakIterator.next()) + } + + @Test + fun count_simple_text() { + val breakIterator = BreakIteratorCompat.getInstance() + breakIterator.setText("abc") + + assertEquals(3, breakIterator.countBreaks()) + assertEquals(BreakIteratorCompat.DONE, breakIterator.next()) + } + + @Test + fun two_counts() { + val breakIterator = BreakIteratorCompat.getInstance() + breakIterator.setText("abc") + + assertEquals(3, breakIterator.countBreaks()) + assertEquals(BreakIteratorCompat.DONE, breakIterator.next()) + assertEquals(3, breakIterator.countBreaks()) + } + + @Test + fun count_multi_character_graphemes() { + val hindi = "समाजो गयेग" + + val breakIterator = BreakIteratorCompat.getInstance() + breakIterator.setText(hindi) + + assertEquals(7, breakIterator.countBreaks()) + assertEquals(BreakIteratorCompat.DONE, breakIterator.next()) + } + + @Test + fun iterate_multi_character_graphemes() { + val hindi = "समाजो गयेग" + + val breakIterator = BreakIteratorCompat.getInstance() + breakIterator.setText(hindi) + + assertEquals(listOf("स", "मा", "जो", " ", "ग", "ये", "ग"), breakIterator.toList()) + assertEquals(BreakIteratorCompat.DONE, breakIterator.next()) + } + + @Test + fun split_multi_character_graphemes() { + val hindi = "समाजो गयेग" + + val breakIterator = BreakIteratorCompat.getInstance() + breakIterator.setText(hindi) + + assertEquals("समाजो गयेग", breakIterator.take(8)) + assertEquals("समाजो गयेग", breakIterator.take(7)) + assertEquals("समाजो गये", breakIterator.take(6)) + assertEquals("समाजो ग", breakIterator.take(5)) + assertEquals("समाजो ", breakIterator.take(4)) + assertEquals("समाजो", breakIterator.take(3)) + assertEquals("समा", breakIterator.take(2)) + assertEquals("स", breakIterator.take(1)) + assertEquals("", breakIterator.take(0)) + assertEquals("", breakIterator.take(-1)) + } +} diff --git a/core-util/src/test/java/org/signal/core/util/ListUtilTest.java b/core-util/src/test/java/org/signal/core/util/ListUtilTest.java deleted file mode 100644 index 47395f9d25..0000000000 --- a/core-util/src/test/java/org/signal/core/util/ListUtilTest.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.signal.core.util; - -import org.junit.Test; - -import java.util.Arrays; -import java.util.List; - -import static org.junit.Assert.assertEquals; - -public class ListUtilTest { - - @Test - public void chunk_oneChunk() { - List input = Arrays.asList("A", "B", "C"); - - List> output = ListUtil.chunk(input, 3); - assertEquals(1, output.size()); - assertEquals(input, output.get(0)); - - output = ListUtil.chunk(input, 4); - assertEquals(1, output.size()); - assertEquals(input, output.get(0)); - - output = ListUtil.chunk(input, 100); - assertEquals(1, output.size()); - assertEquals(input, output.get(0)); - } - - @Test - public void chunk_multipleChunks() { - List input = Arrays.asList("A", "B", "C", "D", "E"); - - List> output = ListUtil.chunk(input, 4); - assertEquals(2, output.size()); - assertEquals(Arrays.asList("A", "B", "C", "D"), output.get(0)); - assertEquals(Arrays.asList("E"), output.get(1)); - - output = ListUtil.chunk(input, 2); - assertEquals(3, output.size()); - assertEquals(Arrays.asList("A", "B"), output.get(0)); - assertEquals(Arrays.asList("C", "D"), output.get(1)); - assertEquals(Arrays.asList("E"), output.get(2)); - - output = ListUtil.chunk(input, 1); - assertEquals(5, output.size()); - assertEquals(Arrays.asList("A"), output.get(0)); - assertEquals(Arrays.asList("B"), output.get(1)); - assertEquals(Arrays.asList("C"), output.get(2)); - assertEquals(Arrays.asList("D"), output.get(3)); - assertEquals(Arrays.asList("E"), output.get(4)); - } -} diff --git a/core-util/src/test/java/org/signal/core/util/ListUtilTest.kt b/core-util/src/test/java/org/signal/core/util/ListUtilTest.kt new file mode 100644 index 0000000000..8099ca8c59 --- /dev/null +++ b/core-util/src/test/java/org/signal/core/util/ListUtilTest.kt @@ -0,0 +1,47 @@ +package org.signal.core.util + +import org.junit.Assert.assertEquals +import org.junit.Test + +class ListUtilTest { + @Test + fun chunk_oneChunk() { + val input = listOf("A", "B", "C") + + var output = ListUtil.chunk(input, 3) + assertEquals(1, output.size) + assertEquals(input, output[0]) + + output = ListUtil.chunk(input, 4) + assertEquals(1, output.size) + assertEquals(input, output[0]) + + output = ListUtil.chunk(input, 100) + assertEquals(1, output.size) + assertEquals(input, output[0]) + } + + @Test + fun chunk_multipleChunks() { + val input: List = listOf("A", "B", "C", "D", "E") + + var output = ListUtil.chunk(input, 4) + assertEquals(2, output.size) + assertEquals(listOf("A", "B", "C", "D"), output[0]) + assertEquals(listOf("E"), output[1]) + + output = ListUtil.chunk(input, 2) + assertEquals(3, output.size) + assertEquals(listOf("A", "B"), output[0]) + assertEquals(listOf("C", "D"), output[1]) + assertEquals(listOf("E"), output[2]) + + output = ListUtil.chunk(input, 1) + assertEquals(5, output.size) + assertEquals(listOf("A"), output[0]) + assertEquals(listOf("B"), output[1]) + assertEquals(listOf("C"), output[2]) + assertEquals(listOf("D"), output[3]) + assertEquals(listOf("E"), output[4]) + } +} diff --git a/core-util/src/test/java/org/signal/core/util/money/FiatMoneyTest.java b/core-util/src/test/java/org/signal/core/util/money/FiatMoneyTest.java deleted file mode 100644 index a883c0e169..0000000000 --- a/core-util/src/test/java/org/signal/core/util/money/FiatMoneyTest.java +++ /dev/null @@ -1,107 +0,0 @@ -package org.signal.core.util.money; - -import org.junit.Test; - -import java.math.BigDecimal; -import java.util.Currency; - -import static org.junit.Assert.assertEquals; - -public class FiatMoneyTest { - - @Test - public void given100USD_whenIGetDefaultPrecisionString_thenIExpect100dot00() { - // GIVEN - FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("USD")); - - // WHEN - String result = fiatMoney.getDefaultPrecisionString(); - - // THEN - assertEquals("100.00", result); - } - - @Test - public void given100USD_whenIGetMinimumUnitPrecisionString_thenIExpect10000() { - // GIVEN - FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("USD")); - - // WHEN - String result = fiatMoney.getMinimumUnitPrecisionString(); - - // THEN - assertEquals("10000", result); - } - - @Test - public void given100JPY_whenIGetDefaultPrecisionString_thenIExpect100() { - // GIVEN - FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("JPY")); - - // WHEN - String result = fiatMoney.getDefaultPrecisionString(); - - // THEN - assertEquals("100", result); - } - - @Test - public void given100JPY_whenIGetMinimumUnitPrecisionString_thenIExpect100() { - // GIVEN - FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("JPY")); - - // WHEN - String result = fiatMoney.getMinimumUnitPrecisionString(); - - // THEN - assertEquals("100", result); - } - - @Test - public void given100UGX_whenIGetDefaultPrecisionString_thenIExpect100() { - // GIVEN - FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("UGX")); - - // WHEN - String result = fiatMoney.getDefaultPrecisionString(); - - // THEN - assertEquals("100", result); - } - - @Test - public void given100UGX_whenIGetMinimumUnitPrecisionString_thenIExpect10000() { - // GIVEN - FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("UGX")); - - // WHEN - String result = fiatMoney.getMinimumUnitPrecisionString(); - - // THEN - assertEquals("10000", result); - } - - @Test - public void given100ISK_whenIGetDefaultPrecisionString_thenIExpect100() { - // GIVEN - FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("ISK")); - - // WHEN - String result = fiatMoney.getDefaultPrecisionString(); - - // THEN - assertEquals("100", result); - } - - @Test - public void given100ISK_whenIGetMinimumUnitPrecisionString_thenIExpect10000() { - // GIVEN - FiatMoney fiatMoney = new FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("ISK")); - - // WHEN - String result = fiatMoney.getMinimumUnitPrecisionString(); - - // THEN - assertEquals("10000", result); - } -} \ No newline at end of file diff --git a/core-util/src/test/java/org/signal/core/util/money/FiatMoneyTest.kt b/core-util/src/test/java/org/signal/core/util/money/FiatMoneyTest.kt new file mode 100644 index 0000000000..06bd731936 --- /dev/null +++ b/core-util/src/test/java/org/signal/core/util/money/FiatMoneyTest.kt @@ -0,0 +1,104 @@ +package org.signal.core.util.money + +import org.junit.Assert.assertEquals +import org.junit.Test +import java.math.BigDecimal +import java.util.Currency + +class FiatMoneyTest { + @Test + fun given100USD_whenIGetDefaultPrecisionString_thenIExpect100dot00() { + // GIVEN + val fiatMoney = FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("USD")) + + // WHEN + val result = fiatMoney.defaultPrecisionString + + // THEN + assertEquals("100.00", result) + } + + @Test + fun given100USD_whenIGetMinimumUnitPrecisionString_thenIExpect10000() { + // GIVEN + val fiatMoney = FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("USD")) + + // WHEN + val result = fiatMoney.minimumUnitPrecisionString + + // THEN + assertEquals("10000", result) + } + + @Test + fun given100JPY_whenIGetDefaultPrecisionString_thenIExpect100() { + // GIVEN + val fiatMoney = FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("JPY")) + + // WHEN + val result = fiatMoney.defaultPrecisionString + + // THEN + assertEquals("100", result) + } + + @Test + fun given100JPY_whenIGetMinimumUnitPrecisionString_thenIExpect100() { + // GIVEN + val fiatMoney = FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("JPY")) + + // WHEN + val result = fiatMoney.minimumUnitPrecisionString + + // THEN + assertEquals("100", result) + } + + @Test + fun given100UGX_whenIGetDefaultPrecisionString_thenIExpect100() { + // GIVEN + val fiatMoney = FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("UGX")) + + // WHEN + val result = fiatMoney.defaultPrecisionString + + // THEN + assertEquals("100", result) + } + + @Test + fun given100UGX_whenIGetMinimumUnitPrecisionString_thenIExpect10000() { + // GIVEN + val fiatMoney = FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("UGX")) + + // WHEN + val result = fiatMoney.minimumUnitPrecisionString + + // THEN + assertEquals("10000", result) + } + + @Test + fun given100ISK_whenIGetDefaultPrecisionString_thenIExpect100() { + // GIVEN + val fiatMoney = FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("ISK")) + + // WHEN + val result = fiatMoney.defaultPrecisionString + + // THEN + assertEquals("100", result) + } + + @Test + fun given100ISK_whenIGetMinimumUnitPrecisionString_thenIExpect10000() { + // GIVEN + val fiatMoney = FiatMoney(BigDecimal.valueOf(100), Currency.getInstance("ISK")) + + // WHEN + val result = fiatMoney.minimumUnitPrecisionString + + // THEN + assertEquals("10000", result) + } +} diff --git a/device-transfer/lib/src/test/java/org/signal/devicetransfer/DeviceTransferAuthenticationTest.java b/device-transfer/lib/src/test/java/org/signal/devicetransfer/DeviceTransferAuthenticationTest.java deleted file mode 100644 index 7106f9ea28..0000000000 --- a/device-transfer/lib/src/test/java/org/signal/devicetransfer/DeviceTransferAuthenticationTest.java +++ /dev/null @@ -1,89 +0,0 @@ -package org.signal.devicetransfer; - -import androidx.annotation.NonNull; - -import org.junit.Before; -import org.junit.Test; -import org.signal.devicetransfer.DeviceTransferAuthentication.Client; -import org.signal.devicetransfer.DeviceTransferAuthentication.DeviceTransferAuthenticationException; -import org.signal.devicetransfer.DeviceTransferAuthentication.Server; - -import java.util.Random; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; -import static org.whispersystems.signalservice.test.LibSignalLibraryUtil.assumeLibSignalSupportedOnOS; - -public class DeviceTransferAuthenticationTest { - - private byte[] certificate; - - @Before - public void ensureNativeSupported() throws KeyGenerationFailedException { - assumeLibSignalSupportedOnOS(); - - certificate = SelfSignedIdentity.create().getX509Encoded(); - } - - @Test - public void testCompute_withNoChanges() throws DeviceTransferAuthenticationException { - Client client = new Client(certificate); - Server server = new Server(certificate, client.getCommitment()); - - byte[] clientRandom = client.setServerRandomAndGetClientRandom(server.getRandom()); - - server.setClientRandom(clientRandom); - assertEquals(client.computeShortAuthenticationCode(), server.computeShortAuthenticationCode()); - } - - @Test(expected = DeviceTransferAuthenticationException.class) - public void testServerCompute_withChangedClientCertificate() throws DeviceTransferAuthenticationException, KeyGenerationFailedException { - byte[] badCertificate = SelfSignedIdentity.create().getX509Encoded(); - Client client = new Client(badCertificate); - Server server = new Server(certificate, client.getCommitment()); - - byte[] clientRandom = client.setServerRandomAndGetClientRandom(server.getRandom()); - - server.setClientRandom(clientRandom); - server.computeShortAuthenticationCode(); - } - - @Test(expected = DeviceTransferAuthenticationException.class) - public void testServerCompute_withChangedClientCommitment() throws DeviceTransferAuthenticationException { - Client client = new Client(certificate); - Server server = new Server(certificate, randomBytes()); - - byte[] clientRandom = client.setServerRandomAndGetClientRandom(server.getRandom()); - - server.setClientRandom(clientRandom); - server.computeShortAuthenticationCode(); - } - - @Test(expected = DeviceTransferAuthenticationException.class) - public void testServerCompute_withChangedClientRandom() throws DeviceTransferAuthenticationException { - Client client = new Client(certificate); - Server server = new Server(certificate, client.getCommitment()); - - client.setServerRandomAndGetClientRandom(server.getRandom()); - - server.setClientRandom(randomBytes()); - server.computeShortAuthenticationCode(); - } - - @Test - public void testClientCompute_withChangedServerSecret() throws DeviceTransferAuthenticationException { - Client client = new Client(certificate); - Server server = new Server(certificate, client.getCommitment()); - - byte[] clientRandom = client.setServerRandomAndGetClientRandom(randomBytes()); - - server.setClientRandom(clientRandom); - assertNotEquals(client.computeShortAuthenticationCode(), server.computeShortAuthenticationCode()); - } - - private @NonNull byte[] randomBytes() { - byte[] bytes = new byte[32]; - new Random().nextBytes(bytes); - return bytes; - } -} diff --git a/device-transfer/lib/src/test/java/org/signal/devicetransfer/DeviceTransferAuthenticationTest.kt b/device-transfer/lib/src/test/java/org/signal/devicetransfer/DeviceTransferAuthenticationTest.kt new file mode 100644 index 0000000000..12598873c5 --- /dev/null +++ b/device-transfer/lib/src/test/java/org/signal/devicetransfer/DeviceTransferAuthenticationTest.kt @@ -0,0 +1,82 @@ +package org.signal.devicetransfer + +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNotEquals +import org.junit.Before +import org.junit.Test +import org.signal.devicetransfer.DeviceTransferAuthentication.DeviceTransferAuthenticationException +import org.whispersystems.signalservice.test.LibSignalLibraryUtil +import kotlin.random.Random + +class DeviceTransferAuthenticationTest { + private lateinit var certificate: ByteArray + + @Before + fun ensureNativeSupported() { + LibSignalLibraryUtil.assumeLibSignalSupportedOnOS() + + certificate = SelfSignedIdentity.create().x509Encoded + } + + @Test + fun testCompute_withNoChanges() { + val client = DeviceTransferAuthentication.Client(certificate) + val server = DeviceTransferAuthentication.Server(certificate, client.commitment) + + val clientRandom = client.setServerRandomAndGetClientRandom(server.random) + + server.setClientRandom(clientRandom) + assertEquals(client.computeShortAuthenticationCode(), server.computeShortAuthenticationCode()) + } + + @Test(expected = DeviceTransferAuthenticationException::class) + fun testServerCompute_withChangedClientCertificate() { + val badCertificate = SelfSignedIdentity.create().x509Encoded + val client = DeviceTransferAuthentication.Client(badCertificate) + val server = DeviceTransferAuthentication.Server(certificate, client.commitment) + + val clientRandom = client.setServerRandomAndGetClientRandom(server.random) + + server.setClientRandom(clientRandom) + server.computeShortAuthenticationCode() + } + + @Test(expected = DeviceTransferAuthenticationException::class) + fun testServerCompute_withChangedClientCommitment() { + val client = DeviceTransferAuthentication.Client(certificate) + val server = DeviceTransferAuthentication.Server(certificate, randomBytes()) + + val clientRandom = client.setServerRandomAndGetClientRandom(server.random) + + server.setClientRandom(clientRandom) + server.computeShortAuthenticationCode() + } + + @Test(expected = DeviceTransferAuthenticationException::class) + fun testServerCompute_withChangedClientRandom() { + val client = DeviceTransferAuthentication.Client(certificate) + val server = DeviceTransferAuthentication.Server(certificate, client.commitment) + + client.setServerRandomAndGetClientRandom(server.random) + + server.setClientRandom(randomBytes()) + server.computeShortAuthenticationCode() + } + + @Test + fun testClientCompute_withChangedServerSecret() { + val client = DeviceTransferAuthentication.Client(certificate) + val server = DeviceTransferAuthentication.Server(certificate, client.commitment) + + val clientRandom = client.setServerRandomAndGetClientRandom(randomBytes()) + + server.setClientRandom(clientRandom) + assertNotEquals(client.computeShortAuthenticationCode(), server.computeShortAuthenticationCode()) + } + + private fun randomBytes(): ByteArray { + val bytes = ByteArray(32) + Random.nextBytes(bytes) + return bytes + } +} diff --git a/device-transfer/lib/src/test/java/org/signal/devicetransfer/WifiDirectTest.java b/device-transfer/lib/src/test/java/org/signal/devicetransfer/WifiDirectTest.java deleted file mode 100644 index 5b64cdd7af..0000000000 --- a/device-transfer/lib/src/test/java/org/signal/devicetransfer/WifiDirectTest.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.signal.devicetransfer; - -import android.app.Application; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.annotation.Config; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -@RunWith(RobolectricTestRunner.class) -@Config(manifest = Config.NONE, application = Application.class) -public class WifiDirectTest { - - @Test - public void instanceName_withExtraInfo() { - String instanceName = WifiDirect.buildServiceInstanceName("knownothing"); - - assertEquals("_devicetransfer._knownothing._signal.org", instanceName); - - String extractedExtraInfo = WifiDirect.isInstanceNameMatching(instanceName); - assertEquals(extractedExtraInfo, "knownothing"); - } - - @Test - public void instanceName_matchingWithoutExtraInfo() { - String instanceName = WifiDirect.buildServiceInstanceName(""); - - assertEquals("_devicetransfer._signal.org", instanceName); - - String extractedExtraInfo = WifiDirect.isInstanceNameMatching(instanceName); - assertEquals(extractedExtraInfo, ""); - } - - @Test - public void instanceName_notMatching() { - String extractedExtraInfo = WifiDirect.isInstanceNameMatching("_whoknows._what.org"); - assertNull(extractedExtraInfo); - } -} \ No newline at end of file diff --git a/device-transfer/lib/src/test/java/org/signal/devicetransfer/WifiDirectTest.kt b/device-transfer/lib/src/test/java/org/signal/devicetransfer/WifiDirectTest.kt new file mode 100644 index 0000000000..e5eb264574 --- /dev/null +++ b/device-transfer/lib/src/test/java/org/signal/devicetransfer/WifiDirectTest.kt @@ -0,0 +1,39 @@ +package org.signal.devicetransfer + +import android.app.Application +import org.junit.Assert.assertEquals +import org.junit.Assert.assertNull +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config + +@RunWith(RobolectricTestRunner::class) +@Config(manifest = Config.NONE, application = Application::class) +class WifiDirectTest { + @Test + fun instanceName_withExtraInfo() { + val instanceName = WifiDirect.buildServiceInstanceName("knownothing") + + assertEquals("_devicetransfer._knownothing._signal.org", instanceName) + + val extractedExtraInfo = WifiDirect.isInstanceNameMatching(instanceName) + assertEquals(extractedExtraInfo, "knownothing") + } + + @Test + fun instanceName_matchingWithoutExtraInfo() { + val instanceName = WifiDirect.buildServiceInstanceName("") + + assertEquals("_devicetransfer._signal.org", instanceName) + + val extractedExtraInfo = WifiDirect.isInstanceNameMatching(instanceName) + assertEquals(extractedExtraInfo, "") + } + + @Test + fun instanceName_notMatching() { + val extractedExtraInfo = WifiDirect.isInstanceNameMatching("_whoknows._what.org") + assertNull(extractedExtraInfo) + } +} diff --git a/donations/app/src/main/res/layout/activity_main.xml b/donations/app/src/main/res/layout/activity_main.xml index b07556fbe9..4dfdd065d2 100644 --- a/donations/app/src/main/res/layout/activity_main.xml +++ b/donations/app/src/main/res/layout/activity_main.xml @@ -1,6 +1,6 @@ -