diff --git a/src/main/java/org/whispersystems/textsecuregcm/entities/ApnMessage.java b/src/main/java/org/whispersystems/textsecuregcm/entities/ApnMessage.java index c2ea90bde..b66db39c8 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/entities/ApnMessage.java +++ b/src/main/java/org/whispersystems/textsecuregcm/entities/ApnMessage.java @@ -55,4 +55,9 @@ public class ApnMessage { public boolean isVoip() { return voip; } + + @VisibleForTesting + public String getMessage() { + return message; + } } diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/ApnFallbackManager.java b/src/main/java/org/whispersystems/textsecuregcm/push/ApnFallbackManager.java index 5f4bd6ea7..254208779 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/push/ApnFallbackManager.java +++ b/src/main/java/org/whispersystems/textsecuregcm/push/ApnFallbackManager.java @@ -30,13 +30,8 @@ public class ApnFallbackManager implements Managed, Runnable { private static final Meter voipOneDelivery = metricRegistry.meter(name(ApnFallbackManager.class, "voip_one_failure")); private static final Histogram voipOneSuccessHistogram = metricRegistry.histogram(name(ApnFallbackManager.class, "voip_one_success_histogram")); - private static final Meter voipTwoSuccess = metricRegistry.meter(name(ApnFallbackManager.class, "voip_two_success")); - private static final Meter voipTwoDelivery = metricRegistry.meter(name(ApnFallbackManager.class, "voip_two_failure")); - private static final Histogram voipTwoSuccessHistogram = metricRegistry.histogram(name(ApnFallbackManager.class, "voip_two_success_histogram")); - static { metricRegistry.register(name(ApnFallbackManager.class, "voip_one_success_ratio"), new VoipRatioGauge(voipOneSuccess, voipOneDelivery)); - metricRegistry.register(name(ApnFallbackManager.class, "voip_two_success_ratio"), new VoipRatioGauge(voipTwoSuccess, voipTwoDelivery)); } private final ApnFallbackTaskQueue taskQueue = new ApnFallbackTaskQueue(); @@ -47,9 +42,7 @@ public class ApnFallbackManager implements Managed, Runnable { } public void schedule(final WebsocketAddress address, ApnFallbackTask task) { - if (task.getRetryCount() == 0) voipOneDelivery.mark(); - else if (task.getRetryCount() == 1) voipTwoDelivery.mark(); - + voipOneDelivery.mark(); taskQueue.put(address, task); } @@ -57,13 +50,8 @@ public class ApnFallbackManager implements Managed, Runnable { ApnFallbackTask task = taskQueue.remove(address); if (task != null) { - if (task.getRetryCount() == 0) { - voipOneSuccess.mark(); - voipOneSuccessHistogram.update(System.currentTimeMillis() - task.getScheduledTime()); - } else if (task.getRetryCount() == 1) { - voipTwoSuccess.mark(); - voipTwoSuccessHistogram.update(System.currentTimeMillis() - task.getScheduledTime()); - } + voipOneSuccess.mark(); + voipOneSuccessHistogram.update(System.currentTimeMillis() - task.getScheduledTime()); } } @@ -83,15 +71,7 @@ public class ApnFallbackManager implements Managed, Runnable { try { Entry taskEntry = taskQueue.get(); ApnFallbackTask task = taskEntry.getValue(); - int retryCount = task.getRetryCount(); - - if (retryCount == 0) { - pushServiceClient.send(task.getMessage()); - schedule(taskEntry.getKey(), new ApnFallbackTask(task.getApnId(), task.getMessage(), - retryCount + 1, task.getDelay())); - } else if (retryCount == 1) { - pushServiceClient.send(new ApnMessage(task.getMessage(), task.getApnId(), false)); - } + pushServiceClient.send(new ApnMessage(task.getMessage(), task.getApnId(), false)); } catch (Throwable e) { logger.warn("ApnFallbackThread", e); } @@ -104,19 +84,17 @@ public class ApnFallbackManager implements Managed, Runnable { private final long scheduledTime; private final String apnId; private final ApnMessage message; - private final int retryCount; - public ApnFallbackTask(String apnId, ApnMessage message, int retryCount) { - this(apnId, message, retryCount, TimeUnit.SECONDS.toMillis(15)); + public ApnFallbackTask(String apnId, ApnMessage message) { + this(apnId, message, TimeUnit.SECONDS.toMillis(15)); } @VisibleForTesting - public ApnFallbackTask(String apnId, ApnMessage message, int retryCount, long delay) { + public ApnFallbackTask(String apnId, ApnMessage message, long delay) { this.scheduledTime = System.currentTimeMillis(); this.delay = delay; this.apnId = apnId; this.message = message; - this.retryCount = retryCount; } public String getApnId() { @@ -127,10 +105,6 @@ public class ApnFallbackManager implements Managed, Runnable { return message; } - public int getRetryCount() { - return retryCount; - } - public long getScheduledTime() { return scheduledTime; } diff --git a/src/main/java/org/whispersystems/textsecuregcm/push/PushSender.java b/src/main/java/org/whispersystems/textsecuregcm/push/PushSender.java index 1e97e15de..9f5485e7c 100644 --- a/src/main/java/org/whispersystems/textsecuregcm/push/PushSender.java +++ b/src/main/java/org/whispersystems/textsecuregcm/push/PushSender.java @@ -116,7 +116,7 @@ public class PushSender { if (isVoip) { apnFallbackManager.schedule(new WebsocketAddress(account.getNumber(), device.getId()), - new ApnFallbackTask(device.getApnId(), apnMessage, 0)); + new ApnFallbackTask(device.getApnId(), apnMessage)); } pushServiceClient.send(apnMessage); diff --git a/src/test/java/org/whispersystems/textsecuregcm/tests/push/ApnFallbackManagerTest.java b/src/test/java/org/whispersystems/textsecuregcm/tests/push/ApnFallbackManagerTest.java index 86f765c3a..ea21cd085 100644 --- a/src/test/java/org/whispersystems/textsecuregcm/tests/push/ApnFallbackManagerTest.java +++ b/src/test/java/org/whispersystems/textsecuregcm/tests/push/ApnFallbackManagerTest.java @@ -9,11 +9,8 @@ import org.whispersystems.textsecuregcm.push.PushServiceClient; import org.whispersystems.textsecuregcm.util.Util; import org.whispersystems.textsecuregcm.websocket.WebsocketAddress; -import java.util.List; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.mockito.Matchers.eq; import static org.mockito.Mockito.*; public class ApnFallbackManagerTest { @@ -23,7 +20,7 @@ public class ApnFallbackManagerTest { PushServiceClient pushServiceClient = mock(PushServiceClient.class); WebsocketAddress address = mock(WebsocketAddress.class ); ApnMessage message = new ApnMessage("bar", "123", 1, "hmm", true); - ApnFallbackTask task = new ApnFallbackTask("foo", message, 0, 500); + ApnFallbackTask task = new ApnFallbackTask("foo", message, 500); ApnFallbackManager apnFallbackManager = new ApnFallbackManager(pushServiceClient); apnFallbackManager.start(); @@ -33,33 +30,11 @@ public class ApnFallbackManagerTest { Util.sleep(1100); ArgumentCaptor captor = ArgumentCaptor.forClass(ApnMessage.class); - verify(pushServiceClient, times(2)).send(captor.capture()); + verify(pushServiceClient, times(1)).send(captor.capture()); - List messages = captor.getAllValues(); - assertEquals(messages.get(0), message); - assertEquals(messages.get(1).getApnId(), task.getApnId()); - assertFalse(messages.get(1).isVoip()); - } - - @Test - public void testPartialFallback() throws Exception { - PushServiceClient pushServiceClient = mock(PushServiceClient.class); - WebsocketAddress address = mock(WebsocketAddress.class ); - ApnMessage message = new ApnMessage("bar", "123", 1, "hmm", true); - ApnFallbackTask task = new ApnFallbackTask ("foo", message, 0, 500); - - ApnFallbackManager apnFallbackManager = new ApnFallbackManager(pushServiceClient); - apnFallbackManager.start(); - - apnFallbackManager.schedule(address, task); - - Util.sleep(600); - - apnFallbackManager.cancel(address); - - Util.sleep(600); - - verify(pushServiceClient, times(1)).send(eq(message)); + assertEquals(captor.getValue().getMessage(), message.getMessage()); + assertEquals(captor.getValue().getApnId(), task.getApnId()); + assertFalse(captor.getValue().isVoip()); } @Test @@ -67,7 +42,7 @@ public class ApnFallbackManagerTest { PushServiceClient pushServiceClient = mock(PushServiceClient.class); WebsocketAddress address = mock(WebsocketAddress.class ); ApnMessage message = new ApnMessage("bar", "123", 1, "hmm", true); - ApnFallbackTask task = new ApnFallbackTask ("foo", message, 0, 500); + ApnFallbackTask task = new ApnFallbackTask ("foo", message, 500); ApnFallbackManager apnFallbackManager = new ApnFallbackManager(pushServiceClient); apnFallbackManager.start();