Fix Netty messaging unit test race condition
Change-Id: Ic0c9be9e2c180dae5a9cd184625f4ec6394356af
diff --git a/core/store/dist/src/test/java/org/onosproject/store/cluster/messaging/impl/NettyMessagingManagerTest.java b/core/store/dist/src/test/java/org/onosproject/store/cluster/messaging/impl/NettyMessagingManagerTest.java
index 4913a06..cbcefd4 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/cluster/messaging/impl/NettyMessagingManagerTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/cluster/messaging/impl/NettyMessagingManagerTest.java
@@ -16,6 +16,7 @@
package org.onosproject.store.cluster.messaging.impl;
import java.util.Arrays;
+import java.util.UUID;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
@@ -89,6 +90,14 @@
netty2.activate();
}
+ /**
+ * Returns a random String to be used as a test subject.
+ * @return string
+ */
+ private String nextSubject() {
+ return UUID.randomUUID().toString();
+ }
+
@After
public void tearDown() throws Exception {
if (netty1 != null) {
@@ -102,8 +111,9 @@
@Test
public void testSendAsync() {
+ String subject = nextSubject();
CountDownLatch latch1 = new CountDownLatch(1);
- CompletableFuture<Void> response = netty1.sendAsync(ep2, "test-subject", "hello world".getBytes());
+ CompletableFuture<Void> response = netty1.sendAsync(ep2, subject, "hello world".getBytes());
response.whenComplete((r, e) -> {
assertNull(e);
latch1.countDown();
@@ -111,7 +121,7 @@
Uninterruptibles.awaitUninterruptibly(latch1);
CountDownLatch latch2 = new CountDownLatch(1);
- response = netty1.sendAsync(invalidEndPoint, "test-subject", "hello world".getBytes());
+ response = netty1.sendAsync(invalidEndPoint, subject, "hello world".getBytes());
response.whenComplete((r, e) -> {
assertNotNull(e);
latch2.countDown();
@@ -121,6 +131,7 @@
@Test
public void testSendAndReceive() {
+ String subject = nextSubject();
AtomicBoolean handlerInvoked = new AtomicBoolean(false);
AtomicReference<byte[]> request = new AtomicReference<>();
AtomicReference<Endpoint> sender = new AtomicReference<>();
@@ -131,9 +142,9 @@
request.set(data);
return "hello there".getBytes();
};
- netty2.registerHandler("test-subject", handler, MoreExecutors.directExecutor());
+ netty2.registerHandler(subject, handler, MoreExecutors.directExecutor());
- CompletableFuture<byte[]> response = netty1.sendAndReceive(ep2, "test-subject", "hello world".getBytes());
+ CompletableFuture<byte[]> response = netty1.sendAndReceive(ep2, subject, "hello world".getBytes());
assertTrue(Arrays.equals("hello there".getBytes(), response.join()));
assertTrue(handlerInvoked.get());
assertTrue(Arrays.equals(request.get(), "hello world".getBytes()));
@@ -146,6 +157,7 @@
*/
@Test
public void testSendAndReceiveWithExecutor() {
+ String subject = nextSubject();
ExecutorService completionExecutor = Executors.newSingleThreadExecutor(r -> new Thread(r, "completion-thread"));
ExecutorService handlerExecutor = Executors.newSingleThreadExecutor(r -> new Thread(r, "handler-thread"));
AtomicReference<String> handlerThreadName = new AtomicReference<>();
@@ -163,10 +175,10 @@
}
return "hello there".getBytes();
};
- netty2.registerHandler("test-subject", handler, handlerExecutor);
+ netty2.registerHandler(subject, handler, handlerExecutor);
CompletableFuture<byte[]> response = netty1.sendAndReceive(ep2,
- "test-subject",
+ subject,
"hello world".getBytes(),
completionExecutor);
response.whenComplete((r, e) -> {