Convert some Java tests to Kotlin.

Resolves #13792
This commit is contained in:
Jameson Williams
2024-11-16 00:09:34 -06:00
committed by Greyson Parrelli
parent 9e49dd1270
commit cee44fcc93
17 changed files with 479 additions and 532 deletions

View File

@@ -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;
}
}

View File

@@ -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
}
}

View File

@@ -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);
}
}

View File

@@ -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)
}
}