diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/push/ClientPresenceManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/push/ClientPresenceManager.java index ae1118fa6..963bb0abc 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/push/ClientPresenceManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/push/ClientPresenceManager.java @@ -33,11 +33,14 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; +import java.util.stream.LongStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.whispersystems.textsecuregcm.redis.ClusterLuaScript; import org.whispersystems.textsecuregcm.redis.FaultTolerantPubSubConnection; import org.whispersystems.textsecuregcm.redis.FaultTolerantRedisCluster; +import org.whispersystems.textsecuregcm.storage.Device; import org.whispersystems.textsecuregcm.util.Constants; /** @@ -198,6 +201,10 @@ public class ClientPresenceManager extends RedisClusterPubSubAdapter ALL_POSSIBLE_DEVICE_IDS = LongStream.range(1, MAXIMUM_DEVICE_ID).boxed().collect(Collectors.toList()); @JsonProperty private long id; diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesCache.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesCache.java index 0f9879c63..c3c095061 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesCache.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesCache.java @@ -332,7 +332,7 @@ public class MessagesCache extends RedisClusterPubSubAdapter imp public void clear(final UUID destinationUuid) { // TODO Remove null check in a fully UUID-based world if (destinationUuid != null) { - for (int i = 1; i < 256; i++) { + for (int i = 1; i < Device.MAXIMUM_DEVICE_ID; i++) { clear(destinationUuid, i); } } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerTest.java index ce6c71997..138a9c967 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/AccountsManagerTest.java @@ -73,6 +73,7 @@ class AccountsManagerTest { private Keys keys; private MessagesManager messagesManager; private ProfilesManager profilesManager; + private ClientPresenceManager clientPresenceManager; private ExperimentEnrollmentManager enrollmentManager; private Map phoneNumberIdentifiersByE164; @@ -95,6 +96,7 @@ class AccountsManagerTest { keys = mock(Keys.class); messagesManager = mock(MessagesManager.class); profilesManager = mock(ProfilesManager.class); + clientPresenceManager = mock(ClientPresenceManager.class); //noinspection unchecked commands = mock(RedisAdvancedClusterCommands.class); @@ -155,7 +157,7 @@ class AccountsManagerTest { storageClient, backupClient, svr2Client, - mock(ClientPresenceManager.class), + clientPresenceManager, enrollmentManager, mock(RegistrationRecoveryPasswordsManager.class), mock(Clock.class)); @@ -560,6 +562,7 @@ class AccountsManagerTest { verify(keys).delete(phoneNumberIdentifiersByE164.get(e164)); verify(messagesManager).clear(existingUuid); verify(profilesManager).deleteAll(existingUuid); + verify(clientPresenceManager).disconnectAllPresencesForUuid(existingUuid); } @Test