mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-21 23:18:05 +01:00
Absorb DeletedAccounts into Accounts
This commit is contained in:
committed by
Jon Chambers
parent
9945367fa1
commit
1b9bf01ab1
@@ -113,7 +113,6 @@ import org.whispersystems.textsecuregcm.spam.ReportSpamTokenProvider;
|
||||
import org.whispersystems.textsecuregcm.storage.Account;
|
||||
import org.whispersystems.textsecuregcm.storage.AccountsManager;
|
||||
import org.whispersystems.textsecuregcm.storage.ClientReleaseManager;
|
||||
import org.whispersystems.textsecuregcm.storage.DeletedAccounts;
|
||||
import org.whispersystems.textsecuregcm.storage.Device;
|
||||
import org.whispersystems.textsecuregcm.storage.DynamicConfigurationManager;
|
||||
import org.whispersystems.textsecuregcm.storage.MessagesManager;
|
||||
@@ -159,7 +158,6 @@ class MessageControllerTest {
|
||||
private static final MessageSender messageSender = mock(MessageSender.class);
|
||||
private static final ReceiptSender receiptSender = mock(ReceiptSender.class);
|
||||
private static final AccountsManager accountsManager = mock(AccountsManager.class);
|
||||
private static final DeletedAccounts deletedAccounts = mock(DeletedAccounts.class);
|
||||
private static final MessagesManager messagesManager = mock(MessagesManager.class);
|
||||
private static final RateLimiters rateLimiters = mock(RateLimiters.class);
|
||||
private static final CardinalityEstimator cardinalityEstimator = mock(CardinalityEstimator.class);
|
||||
@@ -179,7 +177,7 @@ class MessageControllerTest {
|
||||
.addProvider(MultiRecipientMessageProvider.class)
|
||||
.setTestContainerFactory(new GrizzlyWebTestContainerFactory())
|
||||
.addResource(
|
||||
new MessageController(rateLimiters, cardinalityEstimator, messageSender, receiptSender, accountsManager, deletedAccounts,
|
||||
new MessageController(rateLimiters, cardinalityEstimator, messageSender, receiptSender, accountsManager,
|
||||
messagesManager, pushNotificationManager, reportMessageManager, multiRecipientMessageExecutor,
|
||||
messageDeliveryScheduler, ReportSpamTokenProvider.noop(), mock(ClientReleaseManager.class), dynamicConfigurationManager))
|
||||
.build();
|
||||
@@ -245,7 +243,6 @@ class MessageControllerTest {
|
||||
messageSender,
|
||||
receiptSender,
|
||||
accountsManager,
|
||||
deletedAccounts,
|
||||
messagesManager,
|
||||
rateLimiters,
|
||||
rateLimiter,
|
||||
@@ -681,7 +678,7 @@ class MessageControllerTest {
|
||||
when(account.getPhoneNumberIdentifier()).thenReturn(senderPni);
|
||||
|
||||
when(accountsManager.getByE164(senderNumber)).thenReturn(Optional.of(account));
|
||||
when(deletedAccounts.findUuid(senderNumber)).thenReturn(Optional.of(senderAci));
|
||||
when(accountsManager.findRecentlyDeletedAccountIdentifier(senderNumber)).thenReturn(Optional.of(senderAci));
|
||||
when(accountsManager.getPhoneNumberIdentifier(senderNumber)).thenReturn(senderPni);
|
||||
|
||||
Response response =
|
||||
@@ -696,7 +693,7 @@ class MessageControllerTest {
|
||||
|
||||
verify(reportMessageManager).report(Optional.of(senderNumber), Optional.of(senderAci), Optional.of(senderPni),
|
||||
messageGuid, AuthHelper.VALID_UUID, Optional.empty(), userAgent);
|
||||
verify(deletedAccounts, never()).findE164(any(UUID.class));
|
||||
verify(accountsManager, never()).findRecentlyDeletedE164(any(UUID.class));
|
||||
verify(accountsManager, never()).getPhoneNumberIdentifier(anyString());
|
||||
|
||||
when(accountsManager.getByE164(senderNumber)).thenReturn(Optional.empty());
|
||||
@@ -731,7 +728,7 @@ class MessageControllerTest {
|
||||
when(account.getPhoneNumberIdentifier()).thenReturn(senderPni);
|
||||
|
||||
when(accountsManager.getByAccountIdentifier(senderAci)).thenReturn(Optional.of(account));
|
||||
when(deletedAccounts.findE164(senderAci)).thenReturn(Optional.of(senderNumber));
|
||||
when(accountsManager.findRecentlyDeletedE164(senderAci)).thenReturn(Optional.of(senderNumber));
|
||||
when(accountsManager.getPhoneNumberIdentifier(senderNumber)).thenReturn(senderPni);
|
||||
|
||||
Response response =
|
||||
@@ -746,7 +743,7 @@ class MessageControllerTest {
|
||||
|
||||
verify(reportMessageManager).report(Optional.of(senderNumber), Optional.of(senderAci), Optional.of(senderPni),
|
||||
messageGuid, AuthHelper.VALID_UUID, Optional.empty(), userAgent);
|
||||
verify(deletedAccounts, never()).findE164(any(UUID.class));
|
||||
verify(accountsManager, never()).findRecentlyDeletedE164(any(UUID.class));
|
||||
verify(accountsManager, never()).getPhoneNumberIdentifier(anyString());
|
||||
|
||||
when(accountsManager.getByAccountIdentifier(senderAci)).thenReturn(Optional.empty());
|
||||
@@ -781,7 +778,7 @@ class MessageControllerTest {
|
||||
when(account.getPhoneNumberIdentifier()).thenReturn(senderPni);
|
||||
|
||||
when(accountsManager.getByAccountIdentifier(senderAci)).thenReturn(Optional.of(account));
|
||||
when(deletedAccounts.findE164(senderAci)).thenReturn(Optional.of(senderNumber));
|
||||
when(accountsManager.findRecentlyDeletedE164(senderAci)).thenReturn(Optional.of(senderNumber));
|
||||
when(accountsManager.getPhoneNumberIdentifier(senderNumber)).thenReturn(senderPni);
|
||||
|
||||
Entity<SpamReport> entity = Entity.entity(new SpamReport(new byte[3]), "application/json");
|
||||
@@ -800,7 +797,7 @@ class MessageControllerTest {
|
||||
eq(AuthHelper.VALID_UUID),
|
||||
argThat(maybeBytes -> maybeBytes.map(bytes -> Arrays.equals(bytes, new byte[3])).orElse(false)),
|
||||
any());
|
||||
verify(deletedAccounts, never()).findE164(any(UUID.class));
|
||||
verify(accountsManager, never()).findRecentlyDeletedE164(any(UUID.class));
|
||||
verify(accountsManager, never()).getPhoneNumberIdentifier(anyString());
|
||||
when(accountsManager.getByAccountIdentifier(senderAci)).thenReturn(Optional.empty());
|
||||
|
||||
@@ -839,7 +836,7 @@ class MessageControllerTest {
|
||||
when(account.getPhoneNumberIdentifier()).thenReturn(senderPni);
|
||||
|
||||
when(accountsManager.getByAccountIdentifier(senderAci)).thenReturn(Optional.of(account));
|
||||
when(deletedAccounts.findE164(senderAci)).thenReturn(Optional.of(senderNumber));
|
||||
when(accountsManager.findRecentlyDeletedE164(senderAci)).thenReturn(Optional.of(senderNumber));
|
||||
when(accountsManager.getPhoneNumberIdentifier(senderNumber)).thenReturn(senderPni);
|
||||
|
||||
Response response =
|
||||
|
||||
@@ -58,7 +58,6 @@ class AccountsManagerChangeNumberIntegrationTest {
|
||||
static final RedisClusterExtension CACHE_CLUSTER_EXTENSION = RedisClusterExtension.builder().build();
|
||||
|
||||
private ClientPresenceManager clientPresenceManager;
|
||||
private DeletedAccounts deletedAccounts;
|
||||
|
||||
private AccountsManager accountsManager;
|
||||
|
||||
@@ -79,11 +78,9 @@ class AccountsManagerChangeNumberIntegrationTest {
|
||||
Tables.NUMBERS.tableName(),
|
||||
Tables.PNI_ASSIGNMENTS.tableName(),
|
||||
Tables.USERNAMES.tableName(),
|
||||
Tables.DELETED_ACCOUNTS.tableName(),
|
||||
SCAN_PAGE_SIZE);
|
||||
|
||||
deletedAccounts = new DeletedAccounts(DYNAMO_DB_EXTENSION.getDynamoDbClient(),
|
||||
Tables.DELETED_ACCOUNTS.tableName());
|
||||
|
||||
final AccountLockManager accountLockManager = new AccountLockManager(DYNAMO_DB_EXTENSION.getDynamoDbClient(),
|
||||
Tables.DELETED_ACCOUNTS_LOCK.tableName());
|
||||
|
||||
@@ -112,7 +109,6 @@ class AccountsManagerChangeNumberIntegrationTest {
|
||||
phoneNumberIdentifiers,
|
||||
CACHE_CLUSTER_EXTENSION.getRedisCluster(),
|
||||
accountLockManager,
|
||||
deletedAccounts,
|
||||
keysManager,
|
||||
messagesManager,
|
||||
mock(ProfilesManager.class),
|
||||
@@ -145,8 +141,8 @@ class AccountsManagerChangeNumberIntegrationTest {
|
||||
|
||||
assertEquals(secondNumber, accountsManager.getByAccountIdentifier(originalUuid).map(Account::getNumber).orElseThrow());
|
||||
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(originalNumber));
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(secondNumber));
|
||||
assertEquals(Optional.empty(), accountsManager.findRecentlyDeletedAccountIdentifier(originalNumber));
|
||||
assertEquals(Optional.empty(), accountsManager.findRecentlyDeletedAccountIdentifier(secondNumber));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -178,8 +174,8 @@ class AccountsManagerChangeNumberIntegrationTest {
|
||||
|
||||
assertEquals(secondNumber, accountsManager.getByAccountIdentifier(originalUuid).map(Account::getNumber).orElseThrow());
|
||||
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(originalNumber));
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(secondNumber));
|
||||
assertEquals(Optional.empty(), accountsManager.findRecentlyDeletedAccountIdentifier(originalNumber));
|
||||
assertEquals(Optional.empty(), accountsManager.findRecentlyDeletedAccountIdentifier(secondNumber));
|
||||
|
||||
assertEquals(pniIdentityKey, updatedAccount.getIdentityKey(IdentityType.PNI));
|
||||
|
||||
@@ -209,8 +205,8 @@ class AccountsManagerChangeNumberIntegrationTest {
|
||||
|
||||
assertEquals(originalNumber, accountsManager.getByAccountIdentifier(originalUuid).map(Account::getNumber).orElseThrow());
|
||||
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(originalNumber));
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(secondNumber));
|
||||
assertEquals(Optional.empty(), accountsManager.findRecentlyDeletedAccountIdentifier(originalNumber));
|
||||
assertEquals(Optional.empty(), accountsManager.findRecentlyDeletedAccountIdentifier(secondNumber));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -235,8 +231,8 @@ class AccountsManagerChangeNumberIntegrationTest {
|
||||
|
||||
verify(clientPresenceManager).disconnectPresence(existingAccountUuid, Device.MASTER_ID);
|
||||
|
||||
assertEquals(Optional.of(existingAccountUuid), deletedAccounts.findUuid(originalNumber));
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(secondNumber));
|
||||
assertEquals(Optional.of(existingAccountUuid), accountsManager.findRecentlyDeletedAccountIdentifier(originalNumber));
|
||||
assertEquals(Optional.empty(), accountsManager.findRecentlyDeletedAccountIdentifier(secondNumber));
|
||||
|
||||
accountsManager.changeNumber(accountsManager.getByAccountIdentifier(originalUuid).orElseThrow(), originalNumber, null, null, null, null);
|
||||
|
||||
@@ -266,13 +262,13 @@ class AccountsManagerChangeNumberIntegrationTest {
|
||||
assertEquals(existingAccountUuid, reRegisteredAccount.getUuid());
|
||||
assertEquals(originalPni, reRegisteredAccount.getPhoneNumberIdentifier());
|
||||
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(originalNumber));
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(secondNumber));
|
||||
assertEquals(Optional.empty(), accountsManager.findRecentlyDeletedAccountIdentifier(originalNumber));
|
||||
assertEquals(Optional.empty(), accountsManager.findRecentlyDeletedAccountIdentifier(secondNumber));
|
||||
|
||||
final Account changedNumberReRegisteredAccount = accountsManager.changeNumber(reRegisteredAccount, secondNumber, null, null, null, null);
|
||||
|
||||
assertEquals(Optional.of(originalUuid), deletedAccounts.findUuid(originalNumber));
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(secondNumber));
|
||||
assertEquals(Optional.of(originalUuid), accountsManager.findRecentlyDeletedAccountIdentifier(originalNumber));
|
||||
assertEquals(Optional.empty(), accountsManager.findRecentlyDeletedAccountIdentifier(secondNumber));
|
||||
assertEquals(secondPni, changedNumberReRegisteredAccount.getPhoneNumberIdentifier());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,6 @@ import java.io.IOException;
|
||||
import java.time.Clock;
|
||||
import java.time.Instant;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.Executor;
|
||||
@@ -63,7 +62,8 @@ class AccountsManagerConcurrentModificationIntegrationTest {
|
||||
static final DynamoDbExtension DYNAMO_DB_EXTENSION = new DynamoDbExtension(
|
||||
Tables.ACCOUNTS,
|
||||
Tables.NUMBERS,
|
||||
Tables.PNI_ASSIGNMENTS
|
||||
Tables.PNI_ASSIGNMENTS,
|
||||
Tables.DELETED_ACCOUNTS
|
||||
);
|
||||
|
||||
private Accounts accounts;
|
||||
@@ -88,6 +88,7 @@ class AccountsManagerConcurrentModificationIntegrationTest {
|
||||
Tables.NUMBERS.tableName(),
|
||||
Tables.PNI_ASSIGNMENTS.tableName(),
|
||||
Tables.USERNAMES.tableName(),
|
||||
Tables.DELETED_ACCOUNTS.tableName(),
|
||||
SCAN_PAGE_SIZE);
|
||||
|
||||
{
|
||||
@@ -103,9 +104,6 @@ class AccountsManagerConcurrentModificationIntegrationTest {
|
||||
return null;
|
||||
}).when(accountLockManager).withLock(any(), any());
|
||||
|
||||
final DeletedAccounts deletedAccounts = mock(DeletedAccounts.class);
|
||||
when(deletedAccounts.findUuid(any())).thenReturn(Optional.empty());
|
||||
|
||||
final PhoneNumberIdentifiers phoneNumberIdentifiers = mock(PhoneNumberIdentifiers.class);
|
||||
when(phoneNumberIdentifiers.getPhoneNumberIdentifier(anyString()))
|
||||
.thenAnswer((Answer<UUID>) invocation -> UUID.randomUUID());
|
||||
@@ -115,7 +113,6 @@ class AccountsManagerConcurrentModificationIntegrationTest {
|
||||
phoneNumberIdentifiers,
|
||||
RedisClusterHelper.builder().stringCommands(commands).build(),
|
||||
accountLockManager,
|
||||
deletedAccounts,
|
||||
mock(KeysManager.class),
|
||||
mock(MessagesManager.class),
|
||||
mock(ProfilesManager.class),
|
||||
|
||||
@@ -92,7 +92,6 @@ class AccountsManagerTest {
|
||||
private static final byte[] ENCRYPTED_USERNAME_2 = Base64.getUrlDecoder().decode(BASE_64_URL_ENCRYPTED_USERNAME_2);
|
||||
|
||||
private Accounts accounts;
|
||||
private DeletedAccounts deletedAccounts;
|
||||
private KeysManager keysManager;
|
||||
private MessagesManager messagesManager;
|
||||
private ProfilesManager profilesManager;
|
||||
@@ -125,7 +124,6 @@ class AccountsManagerTest {
|
||||
@BeforeEach
|
||||
void setup() throws InterruptedException {
|
||||
accounts = mock(Accounts.class);
|
||||
deletedAccounts = mock(DeletedAccounts.class);
|
||||
keysManager = mock(KeysManager.class);
|
||||
messagesManager = mock(MessagesManager.class);
|
||||
profilesManager = mock(ProfilesManager.class);
|
||||
@@ -152,8 +150,6 @@ class AccountsManagerTest {
|
||||
return null;
|
||||
}).when(accounts).changeNumber(any(), anyString(), any());
|
||||
|
||||
when(deletedAccounts.findUuid(anyString())).thenReturn(Optional.empty());
|
||||
|
||||
final SecureStorageClient storageClient = mock(SecureStorageClient.class);
|
||||
when(storageClient.deleteStoredData(any())).thenReturn(CompletableFuture.completedFuture(null));
|
||||
|
||||
@@ -202,7 +198,6 @@ class AccountsManagerTest {
|
||||
.stringAsyncCommands(asyncCommands)
|
||||
.build(),
|
||||
accountLockManager,
|
||||
deletedAccounts,
|
||||
keysManager,
|
||||
messagesManager,
|
||||
profilesManager,
|
||||
@@ -954,7 +949,7 @@ class AccountsManagerTest {
|
||||
void testCreateAccountRecentlyDeleted() throws InterruptedException {
|
||||
final UUID recentlyDeletedUuid = UUID.randomUUID();
|
||||
|
||||
when(deletedAccounts.findUuid(anyString())).thenReturn(Optional.of(recentlyDeletedUuid));
|
||||
when(accounts.findRecentlyDeletedAccountIdentifier(anyString())).thenReturn(Optional.of(recentlyDeletedUuid));
|
||||
when(accounts.create(any())).thenReturn(true);
|
||||
|
||||
final String e164 = "+18005550123";
|
||||
@@ -1036,7 +1031,7 @@ class AccountsManagerTest {
|
||||
account = accountsManager.changeNumber(account, number, null, null, null, null);
|
||||
|
||||
assertEquals(number, account.getNumber());
|
||||
verify(deletedAccounts, never()).put(any(), any());
|
||||
verify(accounts, never()).putRecentlyDeletedAccount(any(), any());
|
||||
verify(keysManager, never()).delete(any());
|
||||
}
|
||||
|
||||
@@ -1052,7 +1047,6 @@ class AccountsManagerTest {
|
||||
"AccountsManager should not allow use of changeNumber with new PNI keys but without changing number");
|
||||
|
||||
verify(accounts, never()).update(any());
|
||||
verifyNoInteractions(deletedAccounts);
|
||||
verifyNoInteractions(keysManager);
|
||||
}
|
||||
|
||||
@@ -1210,7 +1204,6 @@ class AccountsManagerTest {
|
||||
updatedAccount.getDevices().stream().collect(Collectors.toMap(Device::getId, d -> d.getPhoneNumberIdentityRegistrationId().getAsInt())));
|
||||
|
||||
verify(accounts).update(any());
|
||||
verifyNoInteractions(deletedAccounts);
|
||||
|
||||
verify(keysManager).delete(oldPni);
|
||||
}
|
||||
@@ -1264,7 +1257,6 @@ class AccountsManagerTest {
|
||||
updatedAccount.getDevices().stream().collect(Collectors.toMap(Device::getId, d -> d.getPhoneNumberIdentityRegistrationId().getAsInt())));
|
||||
|
||||
verify(accounts).update(any());
|
||||
verifyNoInteractions(deletedAccounts);
|
||||
|
||||
verify(keysManager).delete(oldPni);
|
||||
verify(keysManager).storeEcSignedPreKeys(oldPni, newSignedKeys);
|
||||
@@ -1297,7 +1289,6 @@ class AccountsManagerTest {
|
||||
() -> accountsManager.updatePniKeys(account, pniIdentityKey, newSignedKeys, null, newRegistrationIds));
|
||||
|
||||
verifyNoInteractions(accounts);
|
||||
verifyNoInteractions(deletedAccounts);
|
||||
verifyNoInteractions(keysManager);
|
||||
}
|
||||
|
||||
@@ -1327,7 +1318,6 @@ class AccountsManagerTest {
|
||||
() -> accountsManager.updatePniKeys(account, pniIdentityKey, newSignedKeys, newSignedPqKeys, newRegistrationIds));
|
||||
|
||||
verifyNoInteractions(accounts);
|
||||
verifyNoInteractions(deletedAccounts);
|
||||
verifyNoInteractions(keysManager);
|
||||
}
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@ import java.util.Base64;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -65,6 +64,7 @@ class AccountsManagerUsernameIntegrationTest {
|
||||
Tables.ACCOUNTS,
|
||||
Tables.NUMBERS,
|
||||
Tables.USERNAMES,
|
||||
Tables.DELETED_ACCOUNTS,
|
||||
Tables.PNI,
|
||||
Tables.PNI_ASSIGNMENTS);
|
||||
|
||||
@@ -94,6 +94,7 @@ class AccountsManagerUsernameIntegrationTest {
|
||||
Tables.NUMBERS.tableName(),
|
||||
Tables.PNI_ASSIGNMENTS.tableName(),
|
||||
Tables.USERNAMES.tableName(),
|
||||
Tables.DELETED_ACCOUNTS.tableName(),
|
||||
SCAN_PAGE_SIZE));
|
||||
|
||||
final AccountLockManager accountLockManager = mock(AccountLockManager.class);
|
||||
@@ -105,9 +106,6 @@ class AccountsManagerUsernameIntegrationTest {
|
||||
return null;
|
||||
}).when(accountLockManager).withLock(any(), any());
|
||||
|
||||
final DeletedAccounts deletedAccounts = mock(DeletedAccounts.class);
|
||||
when(deletedAccounts.findUuid(any())).thenReturn(Optional.empty());
|
||||
|
||||
final PhoneNumberIdentifiers phoneNumberIdentifiers =
|
||||
new PhoneNumberIdentifiers(DYNAMO_DB_EXTENSION.getDynamoDbClient(), Tables.PNI.tableName());
|
||||
|
||||
@@ -119,7 +117,6 @@ class AccountsManagerUsernameIntegrationTest {
|
||||
phoneNumberIdentifiers,
|
||||
CACHE_CLUSTER_EXTENSION.getRedisCluster(),
|
||||
accountLockManager,
|
||||
deletedAccounts,
|
||||
mock(KeysManager.class),
|
||||
mock(MessagesManager.class),
|
||||
mock(ProfilesManager.class),
|
||||
|
||||
@@ -98,7 +98,8 @@ class AccountsTest {
|
||||
Tables.ACCOUNTS,
|
||||
Tables.NUMBERS,
|
||||
Tables.PNI_ASSIGNMENTS,
|
||||
Tables.USERNAMES);
|
||||
Tables.USERNAMES,
|
||||
Tables.DELETED_ACCOUNTS);
|
||||
|
||||
private final TestClock clock = TestClock.pinned(Instant.EPOCH);
|
||||
private DynamicConfigurationManager<DynamicConfiguration> mockDynamicConfigManager;
|
||||
@@ -121,6 +122,7 @@ class AccountsTest {
|
||||
Tables.NUMBERS.tableName(),
|
||||
Tables.PNI_ASSIGNMENTS.tableName(),
|
||||
Tables.USERNAMES.tableName(),
|
||||
Tables.DELETED_ACCOUNTS.tableName(),
|
||||
SCAN_PAGE_SIZE);
|
||||
}
|
||||
|
||||
@@ -166,7 +168,6 @@ class AccountsTest {
|
||||
mock(PhoneNumberIdentifiers.class),
|
||||
mock(FaultTolerantRedisCluster.class),
|
||||
mock(AccountLockManager.class),
|
||||
mock(DeletedAccounts.class),
|
||||
mock(KeysManager.class),
|
||||
mock(MessagesManager.class),
|
||||
mock(ProfilesManager.class),
|
||||
@@ -442,7 +443,8 @@ class AccountsTest {
|
||||
final DynamoDbAsyncClient dynamoDbAsyncClient = mock(DynamoDbAsyncClient.class);
|
||||
accounts = new Accounts(mock(DynamoDbClient.class),
|
||||
dynamoDbAsyncClient, Tables.ACCOUNTS.tableName(),
|
||||
Tables.NUMBERS.tableName(), Tables.PNI_ASSIGNMENTS.tableName(), Tables.USERNAMES.tableName(), SCAN_PAGE_SIZE);
|
||||
Tables.NUMBERS.tableName(), Tables.PNI_ASSIGNMENTS.tableName(), Tables.USERNAMES.tableName(),
|
||||
Tables.DELETED_ACCOUNTS.tableName(), SCAN_PAGE_SIZE);
|
||||
|
||||
Exception e = TransactionConflictException.builder().build();
|
||||
e = wrapException ? new CompletionException(e) : e;
|
||||
@@ -990,6 +992,59 @@ class AccountsTest {
|
||||
assertThat(account.getUsernameHash()).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
void testPutFindRecentlyDeletedAccount() {
|
||||
final UUID uuid = UUID.randomUUID();
|
||||
final String e164 = "+18005551234";
|
||||
|
||||
assertEquals(Optional.empty(), accounts.findRecentlyDeletedAccountIdentifier(e164));
|
||||
|
||||
accounts.putRecentlyDeletedAccount(uuid, e164);
|
||||
|
||||
assertEquals(Optional.of(uuid), accounts.findRecentlyDeletedAccountIdentifier(e164));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRemoveRecentlyDeletedAccount() {
|
||||
final UUID uuid = UUID.randomUUID();
|
||||
final String e164 = "+18005551234";
|
||||
|
||||
assertEquals(Optional.empty(), accounts.findRecentlyDeletedAccountIdentifier(e164));
|
||||
|
||||
accounts.putRecentlyDeletedAccount(uuid, e164);
|
||||
|
||||
assertEquals(Optional.of(uuid), accounts.findRecentlyDeletedAccountIdentifier(e164));
|
||||
|
||||
accounts.removeRecentlyDeletedAccount(e164);
|
||||
|
||||
assertEquals(Optional.empty(), accounts.findRecentlyDeletedAccountIdentifier(e164));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFindRecentlyDeletedE164() {
|
||||
assertEquals(Optional.empty(), accounts.findRecentlyDeletedE164(UUID.randomUUID()));
|
||||
|
||||
final UUID uuid = UUID.randomUUID();
|
||||
final String e164 = "+18005551234";
|
||||
|
||||
accounts.putRecentlyDeletedAccount(uuid, e164);
|
||||
|
||||
assertEquals(Optional.of(e164), accounts.findRecentlyDeletedE164(uuid));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFindRecentlyDeletedUUID() {
|
||||
final String e164 = "+18005551234";
|
||||
|
||||
assertEquals(Optional.empty(), accounts.findRecentlyDeletedAccountIdentifier(e164));
|
||||
|
||||
final UUID uuid = UUID.randomUUID();
|
||||
|
||||
accounts.putRecentlyDeletedAccount(uuid, e164);
|
||||
|
||||
assertEquals(Optional.of(uuid), accounts.findRecentlyDeletedAccountIdentifier(e164));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIgnoredFieldsNotAddedToDataAttribute() throws Exception {
|
||||
final Account account = generateAccount("+18005551234", UUID.randomUUID(), UUID.randomUUID());
|
||||
|
||||
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
* Copyright 2013-2021 Signal Messenger, LLC
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
*/
|
||||
package org.whispersystems.textsecuregcm.storage;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.junit.jupiter.api.extension.RegisterExtension;
|
||||
import org.whispersystems.textsecuregcm.storage.DynamoDbExtensionSchema.Tables;
|
||||
|
||||
class DeletedAccountsTest {
|
||||
|
||||
@RegisterExtension
|
||||
static final DynamoDbExtension DYNAMO_DB_EXTENSION = new DynamoDbExtension(Tables.DELETED_ACCOUNTS);
|
||||
|
||||
private DeletedAccounts deletedAccounts;
|
||||
|
||||
@BeforeEach
|
||||
void setUp() {
|
||||
deletedAccounts = new DeletedAccounts(DYNAMO_DB_EXTENSION.getDynamoDbClient(), Tables.DELETED_ACCOUNTS.tableName());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testPutFind() {
|
||||
final UUID uuid = UUID.randomUUID();
|
||||
final String e164 = "+18005551234";
|
||||
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(e164));
|
||||
|
||||
deletedAccounts.put(uuid, e164);
|
||||
|
||||
assertEquals(Optional.of(uuid), deletedAccounts.findUuid(e164));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testRemove() {
|
||||
final UUID uuid = UUID.randomUUID();
|
||||
final String e164 = "+18005551234";
|
||||
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(e164));
|
||||
|
||||
deletedAccounts.put(uuid, e164);
|
||||
|
||||
assertEquals(Optional.of(uuid), deletedAccounts.findUuid(e164));
|
||||
|
||||
deletedAccounts.remove(e164);
|
||||
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(e164));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFindE164() {
|
||||
assertEquals(Optional.empty(), deletedAccounts.findE164(UUID.randomUUID()));
|
||||
|
||||
final UUID uuid = UUID.randomUUID();
|
||||
final String e164 = "+18005551234";
|
||||
|
||||
deletedAccounts.put(uuid, e164);
|
||||
|
||||
assertEquals(Optional.of(e164), deletedAccounts.findE164(uuid));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFindUUID() {
|
||||
final String e164 = "+18005551234";
|
||||
|
||||
assertEquals(Optional.empty(), deletedAccounts.findUuid(e164));
|
||||
|
||||
final UUID uuid = UUID.randomUUID();
|
||||
|
||||
deletedAccounts.put(uuid, e164);
|
||||
|
||||
assertEquals(Optional.of(uuid), deletedAccounts.findUuid(e164));
|
||||
}
|
||||
}
|
||||
@@ -63,21 +63,21 @@ public final class DynamoDbExtensionSchema {
|
||||
List.of()),
|
||||
|
||||
DELETED_ACCOUNTS("deleted_accounts_test",
|
||||
DeletedAccounts.KEY_ACCOUNT_E164,
|
||||
Accounts.DELETED_ACCOUNTS_KEY_ACCOUNT_E164,
|
||||
null,
|
||||
List.of(
|
||||
AttributeDefinition.builder()
|
||||
.attributeName(DeletedAccounts.KEY_ACCOUNT_E164)
|
||||
.attributeName(Accounts.DELETED_ACCOUNTS_KEY_ACCOUNT_E164)
|
||||
.attributeType(ScalarAttributeType.S).build(),
|
||||
AttributeDefinition.builder()
|
||||
.attributeName(DeletedAccounts.ATTR_ACCOUNT_UUID)
|
||||
.attributeName(Accounts.DELETED_ACCOUNTS_ATTR_ACCOUNT_UUID)
|
||||
.attributeType(ScalarAttributeType.B)
|
||||
.build()),
|
||||
List.of(
|
||||
GlobalSecondaryIndex.builder()
|
||||
.indexName(DeletedAccounts.UUID_TO_E164_INDEX_NAME)
|
||||
.indexName(Accounts.DELETED_ACCOUNTS_UUID_TO_E164_INDEX_NAME)
|
||||
.keySchema(
|
||||
KeySchemaElement.builder().attributeName(DeletedAccounts.ATTR_ACCOUNT_UUID).keyType(KeyType.HASH).build()
|
||||
KeySchemaElement.builder().attributeName(Accounts.DELETED_ACCOUNTS_ATTR_ACCOUNT_UUID).keyType(KeyType.HASH).build()
|
||||
)
|
||||
.projection(Projection.builder().projectionType(ProjectionType.KEYS_ONLY).build())
|
||||
.provisionedThroughput(ProvisionedThroughput.builder().readCapacityUnits(10L).writeCapacityUnits(10L).build())
|
||||
@@ -86,10 +86,10 @@ public final class DynamoDbExtensionSchema {
|
||||
),
|
||||
|
||||
DELETED_ACCOUNTS_LOCK("deleted_accounts_lock_test",
|
||||
DeletedAccounts.KEY_ACCOUNT_E164,
|
||||
AccountLockManager.KEY_ACCOUNT_E164,
|
||||
null,
|
||||
List.of(AttributeDefinition.builder()
|
||||
.attributeName(DeletedAccounts.KEY_ACCOUNT_E164)
|
||||
.attributeName(AccountLockManager.KEY_ACCOUNT_E164)
|
||||
.attributeType(ScalarAttributeType.S).build()),
|
||||
List.of(), List.of()),
|
||||
|
||||
|
||||
Reference in New Issue
Block a user