diff --git a/src/main/java/com/notnoop/apns/ApnsService.java b/src/main/java/com/notnoop/apns/ApnsService.java index 6cfc99f2..42afcb62 100644 --- a/src/main/java/com/notnoop/apns/ApnsService.java +++ b/src/main/java/com/notnoop/apns/ApnsService.java @@ -153,4 +153,13 @@ public interface ApnsService { * while retrieving invalid device connection */ Map getInactiveDevices() throws NetworkIOException; + + /** + * Test that the service is setup properly and the Apple servers + * are reachable. + * + * @throws NetworkIOException if the Apple servers aren't reachable + * or the service cannot send notifications for now + */ + void testConnection() throws NetworkIOException; } diff --git a/src/main/java/com/notnoop/apns/internal/AbstractApnsService.java b/src/main/java/com/notnoop/apns/internal/AbstractApnsService.java index 368f4783..4b553539 100644 --- a/src/main/java/com/notnoop/apns/internal/AbstractApnsService.java +++ b/src/main/java/com/notnoop/apns/internal/AbstractApnsService.java @@ -72,5 +72,4 @@ public void push(Collection deviceTokens, byte[] payload) throws Network public Map getInactiveDevices() throws NetworkIOException { return feedback.getInactiveDevices(); } - } diff --git a/src/main/java/com/notnoop/apns/internal/ApnsConnection.java b/src/main/java/com/notnoop/apns/internal/ApnsConnection.java index 7983b7bf..f8ad59a2 100644 --- a/src/main/java/com/notnoop/apns/internal/ApnsConnection.java +++ b/src/main/java/com/notnoop/apns/internal/ApnsConnection.java @@ -37,5 +37,6 @@ public interface ApnsConnection extends Closeable { void sendMessage(ApnsNotification m) throws NetworkIOException; + void testConnection() throws NetworkIOException; ApnsConnection copy(); } diff --git a/src/main/java/com/notnoop/apns/internal/ApnsConnectionImpl.java b/src/main/java/com/notnoop/apns/internal/ApnsConnectionImpl.java index a1bec970..a814d9a4 100644 --- a/src/main/java/com/notnoop/apns/internal/ApnsConnectionImpl.java +++ b/src/main/java/com/notnoop/apns/internal/ApnsConnectionImpl.java @@ -133,4 +133,10 @@ public synchronized void sendMessage(ApnsNotification m) throws NetworkIOExcepti public ApnsConnectionImpl copy() { return new ApnsConnectionImpl(factory, host, port, reconnectPolicy, delegate); } + + public void testConnection() throws NetworkIOException { + ApnsConnectionImpl testConnection = new ApnsConnectionImpl(factory, host, port, reconnectPolicy, ApnsDelegate.EMPTY); + testConnection.sendMessage(new ApnsNotification(new byte[] {0}, new byte[]{0})); + testConnection.close(); + } } diff --git a/src/main/java/com/notnoop/apns/internal/ApnsPooledConnection.java b/src/main/java/com/notnoop/apns/internal/ApnsPooledConnection.java index 02e841ba..cff395c8 100644 --- a/src/main/java/com/notnoop/apns/internal/ApnsPooledConnection.java +++ b/src/main/java/com/notnoop/apns/internal/ApnsPooledConnection.java @@ -61,4 +61,8 @@ public void close() { } Utilities.close(prototype); } + + public void testConnection() { + prototype.testConnection(); + } } diff --git a/src/main/java/com/notnoop/apns/internal/ApnsServiceImpl.java b/src/main/java/com/notnoop/apns/internal/ApnsServiceImpl.java index 734e3ec7..e6c231fa 100644 --- a/src/main/java/com/notnoop/apns/internal/ApnsServiceImpl.java +++ b/src/main/java/com/notnoop/apns/internal/ApnsServiceImpl.java @@ -52,4 +52,8 @@ public void start() { public void stop() { Utilities.close(connection); } + + public void testConnection() { + connection.testConnection(); + } } diff --git a/src/main/java/com/notnoop/apns/internal/MinaAdaptor.java b/src/main/java/com/notnoop/apns/internal/MinaAdaptor.java index e5abe2cc..126d1bd8 100644 --- a/src/main/java/com/notnoop/apns/internal/MinaAdaptor.java +++ b/src/main/java/com/notnoop/apns/internal/MinaAdaptor.java @@ -11,6 +11,7 @@ import org.apache.mina.transport.socket.nio.NioSocketConnector; import com.notnoop.apns.ApnsNotification; +import com.notnoop.exceptions.NetworkIOException; public class MinaAdaptor extends AbstractApnsService { NioSocketConnector connector; @@ -58,4 +59,8 @@ public void stop() { cf.getSession().close(false).awaitUninterruptibly(100000); connector.dispose(); } + + public void testConnection() throws NetworkIOException { + // TODO: Implement me in a bit + } } diff --git a/src/main/java/com/notnoop/apns/internal/QueuedApnsService.java b/src/main/java/com/notnoop/apns/internal/QueuedApnsService.java index afd64e96..e73797b6 100644 --- a/src/main/java/com/notnoop/apns/internal/QueuedApnsService.java +++ b/src/main/java/com/notnoop/apns/internal/QueuedApnsService.java @@ -94,4 +94,8 @@ public Map getInactiveDevices() throws NetworkIOException { return service.getInactiveDevices(); } + public void testConnection() throws NetworkIOException { + service.testConnection(); + } + } diff --git a/src/test/java/com/notnoop/apns/internal/QueuedApnsServiceTest.java b/src/test/java/com/notnoop/apns/internal/QueuedApnsServiceTest.java index 20abb252..0978f78a 100644 --- a/src/test/java/com/notnoop/apns/internal/QueuedApnsServiceTest.java +++ b/src/test/java/com/notnoop/apns/internal/QueuedApnsServiceTest.java @@ -10,6 +10,7 @@ import com.notnoop.apns.ApnsNotification; import com.notnoop.apns.ApnsService; +import com.notnoop.exceptions.NetworkIOException; public class QueuedApnsServiceTest { @@ -96,6 +97,6 @@ public ApnsConnection copy() { } public void close() throws IOException {} - + public void testConnection() throws NetworkIOException {} } }