mirror of
https://github.com/signalapp/Signal-Server
synced 2026-04-21 22:38:06 +01:00
Collapse WebsocketSender into PushSender.
This commit is contained in:
committed by
Jon Chambers
parent
5e30b0499a
commit
74b3daa70a
@@ -0,0 +1,150 @@
|
||||
package org.whispersystems.textsecuregcm.push;
|
||||
|
||||
import com.google.protobuf.ByteString;
|
||||
import org.apache.commons.lang3.RandomStringUtils;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.whispersystems.textsecuregcm.entities.MessageProtos;
|
||||
import org.whispersystems.textsecuregcm.metrics.PushLatencyManager;
|
||||
import org.whispersystems.textsecuregcm.storage.Account;
|
||||
import org.whispersystems.textsecuregcm.storage.Device;
|
||||
import org.whispersystems.textsecuregcm.storage.MessagesManager;
|
||||
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyZeroInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
public class PushSenderTest {
|
||||
|
||||
private Account account;
|
||||
private Device device;
|
||||
private MessageProtos.Envelope message;
|
||||
|
||||
private ClientPresenceManager clientPresenceManager;
|
||||
private MessagesManager messagesManager;
|
||||
private GCMSender gcmSender;
|
||||
private APNSender apnSender;
|
||||
private PushSender pushSender;
|
||||
|
||||
private static final UUID ACCOUNT_UUID = UUID.randomUUID();
|
||||
private static final long DEVICE_ID = 1L;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
|
||||
account = mock(Account.class);
|
||||
device = mock(Device.class);
|
||||
message = generateRandomMessage();
|
||||
|
||||
clientPresenceManager = mock(ClientPresenceManager.class);
|
||||
messagesManager = mock(MessagesManager.class);
|
||||
gcmSender = mock(GCMSender.class);
|
||||
apnSender = mock(APNSender.class);
|
||||
pushSender = new PushSender(mock(ApnFallbackManager.class),
|
||||
clientPresenceManager,
|
||||
messagesManager,
|
||||
gcmSender,
|
||||
apnSender,
|
||||
0,
|
||||
mock(ExecutorService.class),
|
||||
mock(PushLatencyManager.class));
|
||||
|
||||
when(account.getUuid()).thenReturn(ACCOUNT_UUID);
|
||||
when(device.getId()).thenReturn(DEVICE_ID);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendOnlineMessageClientPresent() {
|
||||
when(clientPresenceManager.isPresent(ACCOUNT_UUID, DEVICE_ID)).thenReturn(true);
|
||||
when(device.getGcmId()).thenReturn("gcm-id");
|
||||
|
||||
pushSender.sendSynchronousMessage(account, device, message, true);
|
||||
|
||||
verify(messagesManager).insertEphemeral(ACCOUNT_UUID, DEVICE_ID, message);
|
||||
verify(messagesManager, never()).insert(any(), anyLong(), any());
|
||||
verifyZeroInteractions(gcmSender);
|
||||
verifyZeroInteractions(apnSender);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendOnlineMessageClientNotPresent() {
|
||||
when(clientPresenceManager.isPresent(ACCOUNT_UUID, DEVICE_ID)).thenReturn(false);
|
||||
when(device.getGcmId()).thenReturn("gcm-id");
|
||||
|
||||
pushSender.sendSynchronousMessage(account, device, message, true);
|
||||
|
||||
verify(messagesManager, never()).insertEphemeral(any(), anyLong(), any());
|
||||
verify(messagesManager, never()).insert(any(), anyLong(), any());
|
||||
verifyZeroInteractions(gcmSender);
|
||||
verifyZeroInteractions(apnSender);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendMessageClientPresent() {
|
||||
when(clientPresenceManager.isPresent(ACCOUNT_UUID, DEVICE_ID)).thenReturn(true);
|
||||
when(device.getGcmId()).thenReturn("gcm-id");
|
||||
|
||||
pushSender.sendSynchronousMessage(account, device, message, false);
|
||||
|
||||
verify(messagesManager, never()).insertEphemeral(any(), anyLong(), any());
|
||||
verify(messagesManager).insert(ACCOUNT_UUID, DEVICE_ID, message);
|
||||
verifyZeroInteractions(gcmSender);
|
||||
verifyZeroInteractions(apnSender);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendMessageGcmClientNotPresent() {
|
||||
when(clientPresenceManager.isPresent(ACCOUNT_UUID, DEVICE_ID)).thenReturn(false);
|
||||
when(device.getGcmId()).thenReturn("gcm-id");
|
||||
|
||||
pushSender.sendSynchronousMessage(account, device, message, false);
|
||||
|
||||
verify(messagesManager, never()).insertEphemeral(any(), anyLong(), any());
|
||||
verify(messagesManager).insert(ACCOUNT_UUID, DEVICE_ID, message);
|
||||
verify(gcmSender).sendMessage(any());
|
||||
verifyZeroInteractions(apnSender);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendMessageApnClientNotPresent() {
|
||||
when(clientPresenceManager.isPresent(ACCOUNT_UUID, DEVICE_ID)).thenReturn(false);
|
||||
when(device.getApnId()).thenReturn("apn-id");
|
||||
|
||||
pushSender.sendSynchronousMessage(account, device, message, false);
|
||||
|
||||
verify(messagesManager, never()).insertEphemeral(any(), anyLong(), any());
|
||||
verify(messagesManager).insert(ACCOUNT_UUID, DEVICE_ID, message);
|
||||
verifyZeroInteractions(gcmSender);
|
||||
verify(apnSender).sendMessage(any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendMessageFetchClientNotPresent() {
|
||||
when(clientPresenceManager.isPresent(ACCOUNT_UUID, DEVICE_ID)).thenReturn(false);
|
||||
when(device.getFetchesMessages()).thenReturn(true);
|
||||
|
||||
pushSender.sendSynchronousMessage(account, device, message, false);
|
||||
|
||||
verify(messagesManager, never()).insertEphemeral(any(), anyLong(), any());
|
||||
verify(messagesManager).insert(ACCOUNT_UUID, DEVICE_ID, message);
|
||||
verifyZeroInteractions(gcmSender);
|
||||
verifyZeroInteractions(apnSender);
|
||||
}
|
||||
|
||||
private MessageProtos.Envelope generateRandomMessage() {
|
||||
return MessageProtos.Envelope.newBuilder()
|
||||
.setTimestamp(System.currentTimeMillis())
|
||||
.setServerTimestamp(System.currentTimeMillis())
|
||||
.setContent(ByteString.copyFromUtf8(RandomStringUtils.randomAlphanumeric(256)))
|
||||
.setType(MessageProtos.Envelope.Type.CIPHERTEXT)
|
||||
.setServerGuid(UUID.randomUUID().toString())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,6 @@ import org.whispersystems.textsecuregcm.entities.OutgoingMessageEntityList;
|
||||
import org.whispersystems.textsecuregcm.push.ApnFallbackManager;
|
||||
import org.whispersystems.textsecuregcm.push.ClientPresenceManager;
|
||||
import org.whispersystems.textsecuregcm.push.ReceiptSender;
|
||||
import org.whispersystems.textsecuregcm.push.WebsocketSender;
|
||||
import org.whispersystems.textsecuregcm.storage.Account;
|
||||
import org.whispersystems.textsecuregcm.storage.AccountsManager;
|
||||
import org.whispersystems.textsecuregcm.storage.Device;
|
||||
@@ -48,10 +47,8 @@ import static org.mockito.Mockito.anyInt;
|
||||
import static org.mockito.Mockito.anyLong;
|
||||
import static org.mockito.Mockito.anyString;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.reset;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.whispersystems.textsecuregcm.entities.MessageProtos.Envelope;
|
||||
|
||||
@@ -245,7 +242,6 @@ public class WebSocketConnectionTest {
|
||||
@Test
|
||||
public void testPendingSend() throws Exception {
|
||||
MessagesManager storedMessages = mock(MessagesManager.class);
|
||||
WebsocketSender websocketSender = mock(WebsocketSender.class);
|
||||
|
||||
final Envelope firstMessage = Envelope.newBuilder()
|
||||
.setLegacyMessage(ByteString.copyFrom("first".getBytes()))
|
||||
@@ -331,7 +327,6 @@ public class WebSocketConnectionTest {
|
||||
futures.get(0).completeExceptionally(new IOException());
|
||||
|
||||
verify(receiptSender, times(1)).sendReceipt(eq(account), eq("sender2"), eq(secondMessage.getTimestamp()));
|
||||
verifyNoMoreInteractions(websocketSender);
|
||||
|
||||
connection.stop();
|
||||
verify(client).close(anyInt(), anyString());
|
||||
|
||||
Reference in New Issue
Block a user