mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-26 20:43:18 +01:00
Make APN fallback behave well in multi-server environments.
// FREEBIE
This commit is contained in:
@@ -6,7 +6,10 @@ import org.whispersystems.textsecuregcm.entities.ApnMessage;
|
||||
import org.whispersystems.textsecuregcm.push.ApnFallbackManager;
|
||||
import org.whispersystems.textsecuregcm.push.ApnFallbackManager.ApnFallbackTask;
|
||||
import org.whispersystems.textsecuregcm.push.PushServiceClient;
|
||||
import org.whispersystems.textsecuregcm.storage.PubSubManager;
|
||||
import org.whispersystems.textsecuregcm.storage.PubSubProtos;
|
||||
import org.whispersystems.textsecuregcm.util.Util;
|
||||
import org.whispersystems.textsecuregcm.websocket.WebSocketConnectionInfo;
|
||||
import org.whispersystems.textsecuregcm.websocket.WebsocketAddress;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
@@ -18,11 +21,13 @@ public class ApnFallbackManagerTest {
|
||||
@Test
|
||||
public void testFullFallback() throws Exception {
|
||||
PushServiceClient pushServiceClient = mock(PushServiceClient.class);
|
||||
WebsocketAddress address = mock(WebsocketAddress.class );
|
||||
PubSubManager pubSubManager = mock(PubSubManager.class);
|
||||
WebsocketAddress address = new WebsocketAddress("+14152222223", 1L);
|
||||
WebSocketConnectionInfo info = new WebSocketConnectionInfo(address);
|
||||
ApnMessage message = new ApnMessage("bar", "123", 1, "hmm", true, 1111);
|
||||
ApnFallbackTask task = new ApnFallbackTask("foo", message, 500);
|
||||
|
||||
ApnFallbackManager apnFallbackManager = new ApnFallbackManager(pushServiceClient);
|
||||
ApnFallbackManager apnFallbackManager = new ApnFallbackManager(pushServiceClient, pubSubManager);
|
||||
apnFallbackManager.start();
|
||||
|
||||
apnFallbackManager.schedule(address, task);
|
||||
@@ -31,6 +36,7 @@ public class ApnFallbackManagerTest {
|
||||
|
||||
ArgumentCaptor<ApnMessage> captor = ArgumentCaptor.forClass(ApnMessage.class);
|
||||
verify(pushServiceClient, times(1)).send(captor.capture());
|
||||
verify(pubSubManager).unsubscribe(eq(info), eq(apnFallbackManager));
|
||||
|
||||
assertEquals(captor.getValue().getMessage(), message.getMessage());
|
||||
assertEquals(captor.getValue().getApnId(), task.getApnId());
|
||||
@@ -41,15 +47,22 @@ public class ApnFallbackManagerTest {
|
||||
@Test
|
||||
public void testNoFallback() throws Exception {
|
||||
PushServiceClient pushServiceClient = mock(PushServiceClient.class);
|
||||
WebsocketAddress address = mock(WebsocketAddress.class );
|
||||
PubSubManager pubSubManager = mock(PubSubManager.class);
|
||||
WebsocketAddress address = new WebsocketAddress("+14152222222", 1);
|
||||
WebSocketConnectionInfo info = new WebSocketConnectionInfo(address);
|
||||
ApnMessage message = new ApnMessage("bar", "123", 1, "hmm", true, 5555);
|
||||
ApnFallbackTask task = new ApnFallbackTask ("foo", message, 500);
|
||||
|
||||
ApnFallbackManager apnFallbackManager = new ApnFallbackManager(pushServiceClient);
|
||||
ApnFallbackManager apnFallbackManager = new ApnFallbackManager(pushServiceClient, pubSubManager);
|
||||
apnFallbackManager.start();
|
||||
|
||||
apnFallbackManager.schedule(address, task);
|
||||
apnFallbackManager.cancel(address);
|
||||
apnFallbackManager.onDispatchMessage(info.serialize(),
|
||||
PubSubProtos.PubSubMessage.newBuilder()
|
||||
.setType(PubSubProtos.PubSubMessage.Type.CONNECTED)
|
||||
.build().toByteArray());
|
||||
|
||||
verify(pubSubManager).unsubscribe(eq(info), eq(apnFallbackManager));
|
||||
|
||||
Util.sleep(1100);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user