diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index 5c9f09eec..9389328f1 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -101,7 +101,6 @@ import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster; import org.whispersystems.textsecuregcm.redis.ReplicatedJedisPool; import org.whispersystems.textsecuregcm.s3.PolicySigner; import org.whispersystems.textsecuregcm.s3.PostPolicyGenerator; -import org.whispersystems.textsecuregcm.securestorage.SecureStorageClient; import org.whispersystems.textsecuregcm.sms.SmsSender; import org.whispersystems.textsecuregcm.sms.TwilioSmsSender; import org.whispersystems.textsecuregcm.sqs.DirectoryQueue; @@ -293,17 +292,7 @@ public class WhisperServerService extends Application deleteStorageServiceDataFuture = secureStorageClient.deleteStoredData(account.getUuid()); - usernamesManager.delete(account.getUuid()); directoryQueue.deleteAccount(account); directory.remove(account.getNumber()); profilesManager.deleteAll(account.getUuid()); keys.delete(account.getNumber()); messagesManager.clear(account.getNumber(), account.getUuid()); - - deleteStorageServiceDataFuture.join(); - redisDelete(account); databaseDelete(account); } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/workers/DeleteUserCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/workers/DeleteUserCommand.java index b757b62c3..4fe7df015 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/workers/DeleteUserCommand.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/workers/DeleteUserCommand.java @@ -17,12 +17,10 @@ import org.jdbi.v3.core.Jdbi; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.whispersystems.textsecuregcm.WhisperServerConfiguration; -import org.whispersystems.textsecuregcm.auth.ExternalServiceCredentialGenerator; import org.whispersystems.textsecuregcm.metrics.PushLatencyManager; import org.whispersystems.textsecuregcm.providers.RedisClientFactory; import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster; import org.whispersystems.textsecuregcm.redis.ReplicatedJedisPool; -import org.whispersystems.textsecuregcm.securestorage.SecureStorageClient; import org.whispersystems.textsecuregcm.sqs.DirectoryQueue; import org.whispersystems.textsecuregcm.storage.Account; import org.whispersystems.textsecuregcm.storage.Accounts; @@ -90,9 +88,6 @@ public class DeleteUserCommand extends EnvironmentCommand account = accountsManager.get(user); diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/securestorage/SecureStorageClientTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/securestorage/SecureStorageClientTest.java index d432156f7..e4ceb7001 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/securestorage/SecureStorageClientTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/securestorage/SecureStorageClientTest.java @@ -16,7 +16,6 @@ import org.whispersystems.textsecuregcm.auth.ExternalServiceCredentials; import org.whispersystems.textsecuregcm.configuration.SecureStorageServiceConfiguration; import java.util.UUID; -import java.util.concurrent.CompletionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @@ -26,7 +25,6 @@ import static com.github.tomakehurst.wiremock.client.WireMock.delete; import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo; import static com.github.tomakehurst.wiremock.core.WireMockConfiguration.options; import static org.junit.Assert.assertThrows; -import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -85,7 +83,6 @@ public class SecureStorageClientTest { .withBasicAuth(username, password) .willReturn(aResponse().withStatus(400))); - final CompletionException completionException = assertThrows(CompletionException.class, () -> secureStorageClient.deleteStoredData(accountUuid).join()); - assertTrue(completionException.getCause() instanceof SecureStorageException); + assertThrows(RuntimeException.class, () -> secureStorageClient.deleteStoredData(accountUuid).join()); } } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java index 0f32e9f36..c259edbbc 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/AccountsManagerTest.java @@ -8,8 +8,8 @@ package org.whispersystems.textsecuregcm.tests.storage; import io.lettuce.core.RedisException; import io.lettuce.core.cluster.api.sync.RedisAdvancedClusterCommands; import org.junit.Test; +import org.whispersystems.textsecuregcm.entities.Profile; import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster; -import org.whispersystems.textsecuregcm.securestorage.SecureStorageClient; import org.whispersystems.textsecuregcm.sqs.DirectoryQueue; import org.whispersystems.textsecuregcm.storage.Account; import org.whispersystems.textsecuregcm.storage.Accounts; @@ -40,23 +40,22 @@ public class AccountsManagerTest { @Test public void testGetAccountByNumberInCache() { - RedisAdvancedClusterCommands commands = mock(RedisAdvancedClusterCommands.class); - FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands); - Accounts accounts = mock(Accounts.class); - DirectoryManager directoryManager = mock(DirectoryManager.class); - DirectoryQueue directoryQueue = mock(DirectoryQueue.class); - Keys keys = mock(Keys.class); - MessagesManager messagesManager = mock(MessagesManager.class); - UsernamesManager usernamesManager = mock(UsernamesManager.class); - ProfilesManager profilesManager = mock(ProfilesManager.class); - SecureStorageClient secureStorageClient = mock(SecureStorageClient.class); + RedisAdvancedClusterCommands commands = mock(RedisAdvancedClusterCommands.class); + FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands); + Accounts accounts = mock(Accounts.class); + DirectoryManager directoryManager = mock(DirectoryManager.class); + DirectoryQueue directoryQueue = mock(DirectoryQueue.class); + Keys keys = mock(Keys.class); + MessagesManager messagesManager = mock(MessagesManager.class); + UsernamesManager usernamesManager = mock(UsernamesManager.class); + ProfilesManager profilesManager = mock(ProfilesManager.class); UUID uuid = UUID.randomUUID(); when(commands.get(eq("AccountMap::+14152222222"))).thenReturn(uuid.toString()); when(commands.get(eq("Account3::" + uuid.toString()))).thenReturn("{\"number\": \"+14152222222\", \"name\": \"test\"}"); - AccountsManager accountsManager = new AccountsManager(accounts, directoryManager, cacheCluster, directoryQueue, keys, messagesManager, usernamesManager, profilesManager, secureStorageClient); + AccountsManager accountsManager = new AccountsManager(accounts, directoryManager, cacheCluster, directoryQueue, keys, messagesManager, usernamesManager, profilesManager); Optional account = accountsManager.get("+14152222222"); assertTrue(account.isPresent()); @@ -71,22 +70,21 @@ public class AccountsManagerTest { @Test public void testGetAccountByUuidInCache() { - RedisAdvancedClusterCommands commands = mock(RedisAdvancedClusterCommands.class); - FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands); - Accounts accounts = mock(Accounts.class); - DirectoryManager directoryManager = mock(DirectoryManager.class); - DirectoryQueue directoryQueue = mock(DirectoryQueue.class); - Keys keys = mock(Keys.class); - MessagesManager messagesManager = mock(MessagesManager.class); - UsernamesManager usernamesManager = mock(UsernamesManager.class); - ProfilesManager profilesManager = mock(ProfilesManager.class); - SecureStorageClient secureStorageClient = mock(SecureStorageClient.class); + RedisAdvancedClusterCommands commands = mock(RedisAdvancedClusterCommands.class); + FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands); + Accounts accounts = mock(Accounts.class); + DirectoryManager directoryManager = mock(DirectoryManager.class); + DirectoryQueue directoryQueue = mock(DirectoryQueue.class); + Keys keys = mock(Keys.class); + MessagesManager messagesManager = mock(MessagesManager.class); + UsernamesManager usernamesManager = mock(UsernamesManager.class); + ProfilesManager profilesManager = mock(ProfilesManager.class); UUID uuid = UUID.randomUUID(); when(commands.get(eq("Account3::" + uuid.toString()))).thenReturn("{\"number\": \"+14152222222\", \"name\": \"test\"}"); - AccountsManager accountsManager = new AccountsManager(accounts, directoryManager, cacheCluster, directoryQueue, keys, messagesManager, usernamesManager, profilesManager, secureStorageClient); + AccountsManager accountsManager = new AccountsManager(accounts, directoryManager, cacheCluster, directoryQueue, keys, messagesManager, usernamesManager, profilesManager); Optional account = accountsManager.get(uuid); assertTrue(account.isPresent()); @@ -102,23 +100,22 @@ public class AccountsManagerTest { @Test public void testGetAccountByNumberNotInCache() { - RedisAdvancedClusterCommands commands = mock(RedisAdvancedClusterCommands.class); - FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands); - Accounts accounts = mock(Accounts.class); - DirectoryManager directoryManager = mock(DirectoryManager.class); - DirectoryQueue directoryQueue = mock(DirectoryQueue.class); - Keys keys = mock(Keys.class); - MessagesManager messagesManager = mock(MessagesManager.class); - UsernamesManager usernamesManager = mock(UsernamesManager.class); - ProfilesManager profilesManager = mock(ProfilesManager.class); - UUID uuid = UUID.randomUUID(); - Account account = new Account("+14152222222", uuid, new HashSet<>(), new byte[16]); - SecureStorageClient secureStorageClient = mock(SecureStorageClient.class); + RedisAdvancedClusterCommands commands = mock(RedisAdvancedClusterCommands.class); + FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands); + Accounts accounts = mock(Accounts.class); + DirectoryManager directoryManager = mock(DirectoryManager.class); + DirectoryQueue directoryQueue = mock(DirectoryQueue.class); + Keys keys = mock(Keys.class); + MessagesManager messagesManager = mock(MessagesManager.class); + UsernamesManager usernamesManager = mock(UsernamesManager.class); + ProfilesManager profilesManager = mock(ProfilesManager.class); + UUID uuid = UUID.randomUUID(); + Account account = new Account("+14152222222", uuid, new HashSet<>(), new byte[16]); when(commands.get(eq("AccountMap::+14152222222"))).thenReturn(null); when(accounts.get(eq("+14152222222"))).thenReturn(Optional.of(account)); - AccountsManager accountsManager = new AccountsManager(accounts, directoryManager, cacheCluster, directoryQueue, keys, messagesManager, usernamesManager, profilesManager, secureStorageClient); + AccountsManager accountsManager = new AccountsManager(accounts, directoryManager, cacheCluster, directoryQueue, keys, messagesManager, usernamesManager, profilesManager); Optional retrieved = accountsManager.get("+14152222222"); assertTrue(retrieved.isPresent()); @@ -135,23 +132,22 @@ public class AccountsManagerTest { @Test public void testGetAccountByUuidNotInCache() { - RedisAdvancedClusterCommands commands = mock(RedisAdvancedClusterCommands.class); - FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands); - Accounts accounts = mock(Accounts.class); - DirectoryManager directoryManager = mock(DirectoryManager.class); - DirectoryQueue directoryQueue = mock(DirectoryQueue.class); - Keys keys = mock(Keys.class); - MessagesManager messagesManager = mock(MessagesManager.class); - UsernamesManager usernamesManager = mock(UsernamesManager.class); - ProfilesManager profilesManager = mock(ProfilesManager.class); - UUID uuid = UUID.randomUUID(); - Account account = new Account("+14152222222", uuid, new HashSet<>(), new byte[16]); - SecureStorageClient secureStorageClient = mock(SecureStorageClient.class); + RedisAdvancedClusterCommands commands = mock(RedisAdvancedClusterCommands.class); + FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands); + Accounts accounts = mock(Accounts.class); + DirectoryManager directoryManager = mock(DirectoryManager.class); + DirectoryQueue directoryQueue = mock(DirectoryQueue.class); + Keys keys = mock(Keys.class); + MessagesManager messagesManager = mock(MessagesManager.class); + UsernamesManager usernamesManager = mock(UsernamesManager.class); + ProfilesManager profilesManager = mock(ProfilesManager.class); + UUID uuid = UUID.randomUUID(); + Account account = new Account("+14152222222", uuid, new HashSet<>(), new byte[16]); when(commands.get(eq("Account3::" + uuid))).thenReturn(null); when(accounts.get(eq(uuid))).thenReturn(Optional.of(account)); - AccountsManager accountsManager = new AccountsManager(accounts, directoryManager, cacheCluster, directoryQueue, keys, messagesManager, usernamesManager, profilesManager, secureStorageClient); + AccountsManager accountsManager = new AccountsManager(accounts, directoryManager, cacheCluster, directoryQueue, keys, messagesManager, usernamesManager, profilesManager); Optional retrieved = accountsManager.get(uuid); assertTrue(retrieved.isPresent()); @@ -168,23 +164,22 @@ public class AccountsManagerTest { @Test public void testGetAccountByNumberBrokenCache() { - RedisAdvancedClusterCommands commands = mock(RedisAdvancedClusterCommands.class); - FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands); - Accounts accounts = mock(Accounts.class); - DirectoryManager directoryManager = mock(DirectoryManager.class); - DirectoryQueue directoryQueue = mock(DirectoryQueue.class); - Keys keys = mock(Keys.class); - MessagesManager messagesManager = mock(MessagesManager.class); - UsernamesManager usernamesManager = mock(UsernamesManager.class); - ProfilesManager profilesManager = mock(ProfilesManager.class); - UUID uuid = UUID.randomUUID(); - Account account = new Account("+14152222222", uuid, new HashSet<>(), new byte[16]); - SecureStorageClient secureStorageClient = mock(SecureStorageClient.class); + RedisAdvancedClusterCommands commands = mock(RedisAdvancedClusterCommands.class); + FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands); + Accounts accounts = mock(Accounts.class); + DirectoryManager directoryManager = mock(DirectoryManager.class); + DirectoryQueue directoryQueue = mock(DirectoryQueue.class); + Keys keys = mock(Keys.class); + MessagesManager messagesManager = mock(MessagesManager.class); + UsernamesManager usernamesManager = mock(UsernamesManager.class); + ProfilesManager profilesManager = mock(ProfilesManager.class); + UUID uuid = UUID.randomUUID(); + Account account = new Account("+14152222222", uuid, new HashSet<>(), new byte[16]); when(commands.get(eq("AccountMap::+14152222222"))).thenThrow(new RedisException("Connection lost!")); when(accounts.get(eq("+14152222222"))).thenReturn(Optional.of(account)); - AccountsManager accountsManager = new AccountsManager(accounts, directoryManager, cacheCluster, directoryQueue, keys, messagesManager, usernamesManager, profilesManager, secureStorageClient); + AccountsManager accountsManager = new AccountsManager(accounts, directoryManager, cacheCluster, directoryQueue, keys, messagesManager, usernamesManager, profilesManager); Optional retrieved = accountsManager.get("+14152222222"); assertTrue(retrieved.isPresent()); @@ -201,23 +196,22 @@ public class AccountsManagerTest { @Test public void testGetAccountByUuidBrokenCache() { - RedisAdvancedClusterCommands commands = mock(RedisAdvancedClusterCommands.class); - FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands); - Accounts accounts = mock(Accounts.class); - DirectoryManager directoryManager = mock(DirectoryManager.class); - DirectoryQueue directoryQueue = mock(DirectoryQueue.class); - Keys keys = mock(Keys.class); - MessagesManager messagesManager = mock(MessagesManager.class); - UsernamesManager usernamesManager = mock(UsernamesManager.class); - ProfilesManager profilesManager = mock(ProfilesManager.class); - UUID uuid = UUID.randomUUID(); - Account account = new Account("+14152222222", uuid, new HashSet<>(), new byte[16]); - SecureStorageClient secureStorageClient = mock(SecureStorageClient.class); + RedisAdvancedClusterCommands commands = mock(RedisAdvancedClusterCommands.class); + FaultTolerantRedisCluster cacheCluster = RedisClusterHelper.buildMockRedisCluster(commands); + Accounts accounts = mock(Accounts.class); + DirectoryManager directoryManager = mock(DirectoryManager.class); + DirectoryQueue directoryQueue = mock(DirectoryQueue.class); + Keys keys = mock(Keys.class); + MessagesManager messagesManager = mock(MessagesManager.class); + UsernamesManager usernamesManager = mock(UsernamesManager.class); + ProfilesManager profilesManager = mock(ProfilesManager.class); + UUID uuid = UUID.randomUUID(); + Account account = new Account("+14152222222", uuid, new HashSet<>(), new byte[16]); when(commands.get(eq("Account3::" + uuid))).thenThrow(new RedisException("Connection lost!")); when(accounts.get(eq(uuid))).thenReturn(Optional.of(account)); - AccountsManager accountsManager = new AccountsManager(accounts, directoryManager, cacheCluster, directoryQueue, keys, messagesManager, usernamesManager, profilesManager, secureStorageClient); + AccountsManager accountsManager = new AccountsManager(accounts, directoryManager, cacheCluster, directoryQueue, keys, messagesManager, usernamesManager, profilesManager); Optional retrieved = accountsManager.get(uuid); assertTrue(retrieved.isPresent());