Strongly type UUIDs as ACIs.

This commit is contained in:
Greyson Parrelli
2021-10-28 15:39:36 -04:00
parent 6c7d837964
commit 5bb48caafd
120 changed files with 1020 additions and 947 deletions

View File

@@ -8,6 +8,7 @@ import org.junit.Test;
import org.signal.core.util.logging.Log;
import org.thoughtcrime.securesms.testutil.LogRecorder;
import org.whispersystems.libsignal.util.guava.Optional;
import org.whispersystems.signalservice.api.push.ACI;
import java.util.UUID;
@@ -39,7 +40,7 @@ public final class RecipientIdCacheTest {
@Test
public void empty_access_by_uuid() {
RecipientId recipientId = recipientIdCache.get(UUID.randomUUID(), null);
RecipientId recipientId = recipientIdCache.get(ACI.from(UUID.randomUUID()), null);
assertNull(recipientId);
}
@@ -54,11 +55,11 @@ public final class RecipientIdCacheTest {
@Test
public void cache_hit_by_uuid() {
RecipientId recipientId1 = recipientId();
UUID uuid1 = UUID.randomUUID();
ACI aci1 = ACI.from(UUID.randomUUID());
recipientIdCache.put(recipient(recipientId1, uuid1, null));
recipientIdCache.put(recipient(recipientId1, aci1, null));
RecipientId recipientId = recipientIdCache.get(uuid1, null);
RecipientId recipientId = recipientIdCache.get(aci1, null);
assertEquals(recipientId1, recipientId);
}
@@ -66,12 +67,12 @@ public final class RecipientIdCacheTest {
@Test
public void cache_miss_by_uuid() {
RecipientId recipientId1 = recipientId();
UUID uuid1 = UUID.randomUUID();
UUID uuid2 = UUID.randomUUID();
ACI aci1 = ACI.from(UUID.randomUUID());
ACI aci2 = ACI.from(UUID.randomUUID());
recipientIdCache.put(recipient(recipientId1, uuid1, null));
recipientIdCache.put(recipient(recipientId1, aci1, null));
RecipientId recipientId = recipientIdCache.get(uuid2, null);
RecipientId recipientId = recipientIdCache.get(aci2, null);
assertNull(recipientId);
}
@@ -79,11 +80,11 @@ public final class RecipientIdCacheTest {
@Test
public void cache_hit_by_uuid_e164_not_supplied_on_get() {
RecipientId recipientId1 = recipientId();
UUID uuid1 = UUID.randomUUID();
ACI aci1 = ACI.from(UUID.randomUUID());
recipientIdCache.put(recipient(recipientId1, uuid1, "+15551234567"));
recipientIdCache.put(recipient(recipientId1, aci1, "+15551234567"));
RecipientId recipientId = recipientIdCache.get(uuid1, null);
RecipientId recipientId = recipientIdCache.get(aci1, null);
assertEquals(recipientId1, recipientId);
}
@@ -91,11 +92,11 @@ public final class RecipientIdCacheTest {
@Test
public void cache_miss_by_uuid_e164_not_supplied_on_put() {
RecipientId recipientId1 = recipientId();
UUID uuid1 = UUID.randomUUID();
ACI aci1 = ACI.from(UUID.randomUUID());
recipientIdCache.put(recipient(recipientId1, uuid1, null));
recipientIdCache.put(recipient(recipientId1, aci1, null));
RecipientId recipientId = recipientIdCache.get(uuid1, "+15551234567");
RecipientId recipientId = recipientIdCache.get(aci1, "+15551234567");
assertNull(recipientId);
}
@@ -128,9 +129,9 @@ public final class RecipientIdCacheTest {
@Test
public void cache_hit_by_e164_uuid_not_supplied_on_get() {
RecipientId recipientId1 = recipientId();
UUID uuid1 = UUID.randomUUID();
ACI aci1 = ACI.from(UUID.randomUUID());
recipientIdCache.put(recipient(recipientId1, uuid1, "+15551234567"));
recipientIdCache.put(recipient(recipientId1, aci1, "+15551234567"));
RecipientId recipientId = recipientIdCache.get(null, "+15551234567");
@@ -140,12 +141,12 @@ public final class RecipientIdCacheTest {
@Test
public void cache_miss_by_e164_uuid_not_supplied_on_put() {
RecipientId recipientId1 = recipientId();
UUID uuid1 = UUID.randomUUID();
ACI aci1 = ACI.from(UUID.randomUUID());
String e164 = "+1555123456";
recipientIdCache.put(recipient(recipientId1, null, e164));
RecipientId recipientId = recipientIdCache.get(uuid1, e164);
RecipientId recipientId = recipientIdCache.get(aci1, e164);
assertNull(recipientId);
}
@@ -153,12 +154,12 @@ public final class RecipientIdCacheTest {
@Test
public void cache_hit_by_both() {
RecipientId recipientId1 = recipientId();
UUID uuid1 = UUID.randomUUID();
ACI aci1 = ACI.from(UUID.randomUUID());
String e164 = "+1555123456";
recipientIdCache.put(recipient(recipientId1, uuid1, e164));
recipientIdCache.put(recipient(recipientId1, aci1, e164));
RecipientId recipientId = recipientIdCache.get(uuid1, e164);
RecipientId recipientId = recipientIdCache.get(aci1, e164);
assertEquals(recipientId1, recipientId);
}
@@ -166,13 +167,13 @@ public final class RecipientIdCacheTest {
@Test
public void full_recipient_id_learned_by_two_puts() {
RecipientId recipientId1 = recipientId();
UUID uuid1 = UUID.randomUUID();
ACI aci1 = ACI.from(UUID.randomUUID());
String e164 = "+1555123456";
recipientIdCache.put(recipient(recipientId1, uuid1, null));
recipientIdCache.put(recipient(recipientId1, aci1, null));
recipientIdCache.put(recipient(recipientId1, null, e164));
RecipientId recipientId = recipientIdCache.get(uuid1, e164);
RecipientId recipientId = recipientIdCache.get(aci1, e164);
assertEquals(recipientId1, recipientId);
}
@@ -181,13 +182,13 @@ public final class RecipientIdCacheTest {
public void if_cache_state_disagrees_returns_null() {
RecipientId recipientId1 = recipientId();
RecipientId recipientId2 = recipientId();
UUID uuid = UUID.randomUUID();
ACI aci = ACI.from(UUID.randomUUID());
String e164 = "+1555123456";
recipientIdCache.put(recipient(recipientId1, null, e164));
recipientIdCache.put(recipient(recipientId2, uuid, null));
recipientIdCache.put(recipient(recipientId2, aci, null));
RecipientId recipientId = recipientIdCache.get(uuid, e164);
RecipientId recipientId = recipientIdCache.get(aci, e164);
assertNull(recipientId);
@@ -199,15 +200,15 @@ public final class RecipientIdCacheTest {
public void after_invalid_cache_hit_entries_are_cleared_up() {
RecipientId recipientId1 = recipientId();
RecipientId recipientId2 = recipientId();
UUID uuid = UUID.randomUUID();
ACI aci = ACI.from(UUID.randomUUID());
String e164 = "+1555123456";
recipientIdCache.put(recipient(recipientId1, null, e164));
recipientIdCache.put(recipient(recipientId2, uuid, null));
recipientIdCache.put(recipient(recipientId2, aci, null));
recipientIdCache.get(uuid, e164);
recipientIdCache.get(aci, e164);
assertNull(recipientIdCache.get(uuid, null));
assertNull(recipientIdCache.get(aci, null));
assertNull(recipientIdCache.get(null, e164));
}
@@ -215,57 +216,57 @@ public final class RecipientIdCacheTest {
public void multiple_entries() {
RecipientId recipientId1 = recipientId();
RecipientId recipientId2 = recipientId();
UUID uuid1 = UUID.randomUUID();
UUID uuid2 = UUID.randomUUID();
ACI aci1 = ACI.from(UUID.randomUUID());
ACI aci2 = ACI.from(UUID.randomUUID());
recipientIdCache.put(recipient(recipientId1, uuid1, null));
recipientIdCache.put(recipient(recipientId2, uuid2, null));
recipientIdCache.put(recipient(recipientId1, aci1, null));
recipientIdCache.put(recipient(recipientId2, aci2, null));
assertEquals(recipientId1, recipientIdCache.get(uuid1, null));
assertEquals(recipientId2, recipientIdCache.get(uuid2, null));
assertEquals(recipientId1, recipientIdCache.get(aci1, null));
assertEquals(recipientId2, recipientIdCache.get(aci2, null));
}
@Test
public void drops_oldest_when_reaches_cache_limit() {
RecipientId recipientId1 = recipientId();
UUID uuid1 = UUID.randomUUID();
ACI aci1 = ACI.from(UUID.randomUUID());
recipientIdCache.put(recipient(recipientId1, uuid1, null));
recipientIdCache.put(recipient(recipientId1, aci1, null));
for (int i = 0; i < TEST_CACHE_LIMIT; i++) {
recipientIdCache.put(recipient(recipientId(), UUID.randomUUID(), null));
recipientIdCache.put(recipient(recipientId(), ACI.from(UUID.randomUUID()), null));
}
assertNull(recipientIdCache.get(uuid1, null));
assertNull(recipientIdCache.get(aci1, null));
}
@Test
public void remains_in_cache_when_used_before_reaching_cache_limit() {
RecipientId recipientId1 = recipientId();
UUID uuid1 = UUID.randomUUID();
ACI aci1 = ACI.from(UUID.randomUUID());
recipientIdCache.put(recipient(recipientId1, uuid1, null));
recipientIdCache.put(recipient(recipientId1, aci1, null));
for (int i = 0; i < TEST_CACHE_LIMIT - 1; i++) {
recipientIdCache.put(recipient(recipientId(), UUID.randomUUID(), null));
recipientIdCache.put(recipient(recipientId(), ACI.from(UUID.randomUUID()), null));
}
assertEquals(recipientId1, recipientIdCache.get(uuid1, null));
assertEquals(recipientId1, recipientIdCache.get(aci1, null));
recipientIdCache.put(recipient(recipientId(), UUID.randomUUID(), null));
recipientIdCache.put(recipient(recipientId(), ACI.from(UUID.randomUUID()), null));
assertEquals(recipientId1, recipientIdCache.get(uuid1, null));
assertEquals(recipientId1, recipientIdCache.get(aci1, null));
}
private static @NonNull RecipientId recipientId() {
return mock(RecipientId.class);
}
private static @NonNull Recipient recipient(RecipientId recipientId, @Nullable UUID uuid, @Nullable String e164) {
private static @NonNull Recipient recipient(RecipientId recipientId, @Nullable ACI aci, @Nullable String e164) {
Recipient mock = mock(Recipient.class);
when(mock.getId()).thenReturn(recipientId);
when(mock.getUuid()).thenReturn(Optional.fromNullable(uuid));
when(mock.getAci()).thenReturn(Optional.fromNullable(aci));
when(mock.getE164()).thenReturn(Optional.fromNullable(e164));
return mock;