Rename WebSocketConnectionEventManager/Listener to MessageAvailabilityManager/Listener

This commit is contained in:
Jon Chambers
2025-07-23 14:38:53 -04:00
committed by Jon Chambers
parent cf222e1105
commit 038c68c594
14 changed files with 100 additions and 97 deletions

View File

@@ -45,10 +45,10 @@ import org.whispersystems.textsecuregcm.tests.util.MockRedisFuture;
import org.whispersystems.textsecuregcm.tests.util.RedisClusterHelper;
@Timeout(value = 10, threadMode = Timeout.ThreadMode.SEPARATE_THREAD)
class WebSocketConnectionEventManagerTest {
class RedisMessageAvailabilityManagerTest {
private WebSocketConnectionEventManager localEventManager;
private WebSocketConnectionEventManager remoteEventManager;
private RedisMessageAvailabilityManager localEventManager;
private RedisMessageAvailabilityManager remoteEventManager;
private static ExecutorService webSocketConnectionEventExecutor;
private static ExecutorService asyncOperationQueueingExecutor;
@@ -56,7 +56,7 @@ class WebSocketConnectionEventManagerTest {
@RegisterExtension
static final RedisClusterExtension REDIS_CLUSTER_EXTENSION = RedisClusterExtension.builder().build();
private static class WebSocketConnectionEventAdapter implements WebSocketConnectionEventListener {
private static class MessageAvailabilityAdapter implements MessageAvailabilityListener {
@Override
public void handleNewMessageAvailable() {
@@ -79,13 +79,13 @@ class WebSocketConnectionEventManagerTest {
@BeforeEach
void setUp() {
localEventManager = new WebSocketConnectionEventManager(mock(AccountsManager.class),
localEventManager = new RedisMessageAvailabilityManager(mock(AccountsManager.class),
mock(PushNotificationManager.class),
REDIS_CLUSTER_EXTENSION.getRedisCluster(),
webSocketConnectionEventExecutor,
asyncOperationQueueingExecutor);
remoteEventManager = new WebSocketConnectionEventManager(mock(AccountsManager.class),
remoteEventManager = new RedisMessageAvailabilityManager(mock(AccountsManager.class),
mock(PushNotificationManager.class),
REDIS_CLUSTER_EXTENSION.getRedisCluster(),
webSocketConnectionEventExecutor,
@@ -117,7 +117,7 @@ class WebSocketConnectionEventManagerTest {
final AtomicBoolean secondListenerDisplaced = new AtomicBoolean(false);
localEventManager.handleClientConnected(accountIdentifier, deviceId, new WebSocketConnectionEventAdapter() {
localEventManager.handleClientConnected(accountIdentifier, deviceId, new MessageAvailabilityAdapter() {
@Override
public void handleConflictingMessageReader() {
synchronized (firstListenerDisplaced) {
@@ -130,10 +130,10 @@ class WebSocketConnectionEventManagerTest {
assertFalse(firstListenerDisplaced.get());
assertFalse(secondListenerDisplaced.get());
final WebSocketConnectionEventManager displacingManager =
final RedisMessageAvailabilityManager displacingManager =
displaceRemotely ? remoteEventManager : localEventManager;
displacingManager.handleClientConnected(accountIdentifier, deviceId, new WebSocketConnectionEventAdapter() {
displacingManager.handleClientConnected(accountIdentifier, deviceId, new MessageAvailabilityAdapter() {
@Override
public void handleConflictingMessageReader() {
secondListenerDisplaced.set(true);
@@ -158,7 +158,7 @@ class WebSocketConnectionEventManagerTest {
assertFalse(localEventManager.isLocallyPresent(accountIdentifier, deviceId));
assertFalse(remoteEventManager.isLocallyPresent(accountIdentifier, deviceId));
localEventManager.handleClientConnected(accountIdentifier, deviceId, new WebSocketConnectionEventAdapter())
localEventManager.handleClientConnected(accountIdentifier, deviceId, new MessageAvailabilityAdapter())
.toCompletableFuture()
.join();
@@ -188,7 +188,7 @@ class WebSocketConnectionEventManagerTest {
.binaryPubSubAsyncCommands(pubSubAsyncCommands)
.build();
final WebSocketConnectionEventManager eventManager = new WebSocketConnectionEventManager(
final RedisMessageAvailabilityManager eventManager = new RedisMessageAvailabilityManager(
mock(AccountsManager.class),
mock(PushNotificationManager.class),
clusterClient,
@@ -199,7 +199,7 @@ class WebSocketConnectionEventManagerTest {
final UUID firstAccountIdentifier = UUID.randomUUID();
final byte firstDeviceId = Device.PRIMARY_ID;
final int firstSlot = SlotHash.getSlot(WebSocketConnectionEventManager.getClientEventChannel(firstAccountIdentifier, firstDeviceId));
final int firstSlot = SlotHash.getSlot(RedisMessageAvailabilityManager.getClientEventChannel(firstAccountIdentifier, firstDeviceId));
final UUID secondAccountIdentifier;
final byte secondDeviceId = firstDeviceId + 1;
@@ -210,15 +210,15 @@ class WebSocketConnectionEventManagerTest {
do {
candidateIdentifier = UUID.randomUUID();
} while (SlotHash.getSlot(WebSocketConnectionEventManager.getClientEventChannel(candidateIdentifier, secondDeviceId)) == firstSlot);
} while (SlotHash.getSlot(RedisMessageAvailabilityManager.getClientEventChannel(candidateIdentifier, secondDeviceId)) == firstSlot);
secondAccountIdentifier = candidateIdentifier;
}
eventManager.handleClientConnected(firstAccountIdentifier, firstDeviceId, new WebSocketConnectionEventAdapter()).toCompletableFuture().join();
eventManager.handleClientConnected(secondAccountIdentifier, secondDeviceId, new WebSocketConnectionEventAdapter()).toCompletableFuture().join();
eventManager.handleClientConnected(firstAccountIdentifier, firstDeviceId, new MessageAvailabilityAdapter()).toCompletableFuture().join();
eventManager.handleClientConnected(secondAccountIdentifier, secondDeviceId, new MessageAvailabilityAdapter()).toCompletableFuture().join();
final int secondSlot = SlotHash.getSlot(WebSocketConnectionEventManager.getClientEventChannel(secondAccountIdentifier, secondDeviceId));
final int secondSlot = SlotHash.getSlot(RedisMessageAvailabilityManager.getClientEventChannel(secondAccountIdentifier, secondDeviceId));
final String firstNodeId = UUID.randomUUID().toString();
@@ -241,8 +241,8 @@ class WebSocketConnectionEventManagerTest {
List.of(firstBeforeNode),
List.of(firstAfterNode, secondAfterNode)));
verify(pubSubCommands).ssubscribe(WebSocketConnectionEventManager.getClientEventChannel(secondAccountIdentifier, secondDeviceId));
verify(pubSubCommands, never()).ssubscribe(WebSocketConnectionEventManager.getClientEventChannel(firstAccountIdentifier, firstDeviceId));
verify(pubSubCommands).ssubscribe(RedisMessageAvailabilityManager.getClientEventChannel(secondAccountIdentifier, secondDeviceId));
verify(pubSubCommands, never()).ssubscribe(RedisMessageAvailabilityManager.getClientEventChannel(firstAccountIdentifier, firstDeviceId));
}
@Test
@@ -256,7 +256,7 @@ class WebSocketConnectionEventManagerTest {
.binaryPubSubAsyncCommands(pubSubAsyncCommands)
.build();
final WebSocketConnectionEventManager eventManager = new WebSocketConnectionEventManager(
final RedisMessageAvailabilityManager eventManager = new RedisMessageAvailabilityManager(
mock(AccountsManager.class),
mock(PushNotificationManager.class),
clusterClient,
@@ -271,21 +271,21 @@ class WebSocketConnectionEventManagerTest {
final UUID noListenerAccountIdentifier = UUID.randomUUID();
final byte noListenerDeviceId = listenerDeviceId + 1;
eventManager.handleClientConnected(listenerAccountIdentifier, listenerDeviceId, new WebSocketConnectionEventAdapter())
eventManager.handleClientConnected(listenerAccountIdentifier, listenerDeviceId, new MessageAvailabilityAdapter())
.toCompletableFuture()
.join();
eventManager.unsubscribeIfMissingListener(
new WebSocketConnectionEventManager.AccountAndDeviceIdentifier(listenerAccountIdentifier, listenerDeviceId));
new RedisMessageAvailabilityManager.AccountAndDeviceIdentifier(listenerAccountIdentifier, listenerDeviceId));
eventManager.unsubscribeIfMissingListener(
new WebSocketConnectionEventManager.AccountAndDeviceIdentifier(noListenerAccountIdentifier, noListenerDeviceId));
new RedisMessageAvailabilityManager.AccountAndDeviceIdentifier(noListenerAccountIdentifier, noListenerDeviceId));
verify(pubSubAsyncCommands, never())
.sunsubscribe(WebSocketConnectionEventManager.getClientEventChannel(listenerAccountIdentifier, listenerDeviceId));
.sunsubscribe(RedisMessageAvailabilityManager.getClientEventChannel(listenerAccountIdentifier, listenerDeviceId));
verify(pubSubAsyncCommands)
.sunsubscribe(WebSocketConnectionEventManager.getClientEventChannel(noListenerAccountIdentifier, noListenerDeviceId));
.sunsubscribe(RedisMessageAvailabilityManager.getClientEventChannel(noListenerAccountIdentifier, noListenerDeviceId));
}
@Test
@@ -314,7 +314,7 @@ class WebSocketConnectionEventManagerTest {
.binaryPubSubAsyncCommands(pubSubAsyncCommands)
.build();
final WebSocketConnectionEventManager eventManager = new WebSocketConnectionEventManager(
final RedisMessageAvailabilityManager eventManager = new RedisMessageAvailabilityManager(
accountsManager,
pushNotificationManager,
clusterClient,
@@ -323,7 +323,7 @@ class WebSocketConnectionEventManagerTest {
eventManager.start();
eventManager.handleClientConnected(listenerAccountIdentifier, listenerDeviceId, new WebSocketConnectionEventAdapter())
eventManager.handleClientConnected(listenerAccountIdentifier, listenerDeviceId, new MessageAvailabilityAdapter())
.toCompletableFuture()
.join();
@@ -333,11 +333,11 @@ class WebSocketConnectionEventManagerTest {
.toByteArray();
eventManager.smessage(mock(RedisClusterNode.class),
WebSocketConnectionEventManager.getClientEventChannel(listenerAccountIdentifier, listenerDeviceId),
RedisMessageAvailabilityManager.getClientEventChannel(listenerAccountIdentifier, listenerDeviceId),
newMessagePayload);
eventManager.smessage(mock(RedisClusterNode.class),
WebSocketConnectionEventManager.getClientEventChannel(noListenerAccountIdentifier, noListenerDeviceId),
RedisMessageAvailabilityManager.getClientEventChannel(noListenerAccountIdentifier, noListenerDeviceId),
newMessagePayload);
verify(pushNotificationManager).sendNewMessageNotification(noListenerAccount, noListenerDeviceId, true);