Merge remote-tracking branch 'origin/master'
diff --git a/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java b/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java
index 109322d..367ca91 100644
--- a/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java
+++ b/utils/netty/src/main/java/org/onlab/netty/InternalMessage.java
@@ -8,12 +8,16 @@
*/
public final class InternalMessage implements Message {
+ public static final String REPLY_MESSAGE_TYPE = "NETTY_MESSAGIG_REQUEST_REPLY";
+
private long id;
private Endpoint sender;
private String type;
private Object payload;
+
private transient NettyMessagingService messagingService;
- public static final String REPLY_MESSAGE_TYPE = "NETTY_MESSAGIG_REQUEST_REPLY";
+ // TODO: add transient payload serializer or change payload type to
+ // byte[], ByteBuffer, etc.
// Must be created using the Builder.
private InternalMessage() {}
diff --git a/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java b/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java
index 4c32164..051482e 100644
--- a/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java
+++ b/utils/netty/src/main/java/org/onlab/netty/NettyMessagingService.java
@@ -241,8 +241,9 @@
NettyMessagingService.this.responseFutures.getIfPresent(message.id());
if (futureResponse != null) {
futureResponse.setResponse(message.payload());
+ } else {
+ log.warn("Received a reply. But was unable to locate the request handle");
}
- log.warn("Received a reply. But was unable to locate the request handle");
} finally {
NettyMessagingService.this.responseFutures.invalidate(message.id());
}
diff --git a/utils/netty/src/test/java/org/onlab/netty/PingPongTest.java b/utils/netty/src/test/java/org/onlab/netty/PingPongTest.java
new file mode 100644
index 0000000..96b877e
--- /dev/null
+++ b/utils/netty/src/test/java/org/onlab/netty/PingPongTest.java
@@ -0,0 +1,30 @@
+package org.onlab.netty;
+
+import java.util.concurrent.TimeUnit;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Simple ping-pong test that exercises NettyMessagingService.
+ */
+public class PingPongTest {
+
+ @Test
+ public void testPingPong() throws Exception {
+ NettyMessagingService pinger = new NettyMessagingService(8085);
+ NettyMessagingService ponger = new NettyMessagingService(9086);
+ try {
+ pinger.activate();
+ ponger.activate();
+ pinger.setPayloadSerializer(new KryoSerializer());
+ ponger.setPayloadSerializer(new KryoSerializer());
+ ponger.registerHandler("echo", new EchoHandler());
+ Response<String> response = pinger.sendAndReceive(new Endpoint("localhost", 9086), "echo", "hello");
+ Assert.assertEquals("hello", response.get(10000, TimeUnit.MILLISECONDS));
+ } finally {
+ pinger.deactivate();
+ ponger.deactivate();
+ }
+ }
+}