|
|
|
@ -79,9 +79,9 @@ public class OrderedMessageSendingIntegrationTests { |
|
|
|
|
|
|
|
|
|
|
|
private BlockingWebSocketSession blockingSession; |
|
|
|
private BlockingWebSocketSession blockingSession; |
|
|
|
|
|
|
|
|
|
|
|
private ExecutorSubscribableChannel subscribableChannel; |
|
|
|
private ExecutorSubscribableChannel clientOutChannel; |
|
|
|
|
|
|
|
|
|
|
|
private OrderedMessageChannelDecorator orderedMessageChannel; |
|
|
|
private OrderedMessageChannelDecorator orderedClientOutChannel; |
|
|
|
|
|
|
|
|
|
|
|
private ThreadPoolTaskExecutor executor; |
|
|
|
private ThreadPoolTaskExecutor executor; |
|
|
|
|
|
|
|
|
|
|
|
@ -98,10 +98,10 @@ public class OrderedMessageSendingIntegrationTests { |
|
|
|
this.executor.setAllowCoreThreadTimeOut(true); |
|
|
|
this.executor.setAllowCoreThreadTimeOut(true); |
|
|
|
this.executor.afterPropertiesSet(); |
|
|
|
this.executor.afterPropertiesSet(); |
|
|
|
|
|
|
|
|
|
|
|
this.subscribableChannel = new ExecutorSubscribableChannel(this.executor); |
|
|
|
this.clientOutChannel = new ExecutorSubscribableChannel(this.executor); |
|
|
|
OrderedMessageChannelDecorator.configureInterceptor(this.subscribableChannel, true); |
|
|
|
OrderedMessageChannelDecorator.configureInterceptor(this.clientOutChannel, true); |
|
|
|
|
|
|
|
|
|
|
|
this.orderedMessageChannel = new OrderedMessageChannelDecorator(this.subscribableChannel, logger); |
|
|
|
this.orderedClientOutChannel = new OrderedMessageChannelDecorator(this.clientOutChannel, logger); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@AfterEach |
|
|
|
@AfterEach |
|
|
|
@ -119,14 +119,14 @@ public class OrderedMessageSendingIntegrationTests { |
|
|
|
this.blockingSession, 60 * 1000, messageCount * MESSAGE_SIZE); |
|
|
|
this.blockingSession, 60 * 1000, messageCount * MESSAGE_SIZE); |
|
|
|
|
|
|
|
|
|
|
|
TestMessageHandler handler = new TestMessageHandler(concurrentSessionDecorator); |
|
|
|
TestMessageHandler handler = new TestMessageHandler(concurrentSessionDecorator); |
|
|
|
subscribableChannel.subscribe(handler); |
|
|
|
this.clientOutChannel.subscribe(handler); |
|
|
|
|
|
|
|
|
|
|
|
List<Message<?>> expectedMessages = new ArrayList<>(messageCount); |
|
|
|
List<Message<?>> expectedMessages = new ArrayList<>(messageCount); |
|
|
|
|
|
|
|
|
|
|
|
// Send one to block
|
|
|
|
// Send one to block
|
|
|
|
Message<byte[]> message = createMessage(0); |
|
|
|
Message<byte[]> message = createMessage(0); |
|
|
|
expectedMessages.add(message); |
|
|
|
expectedMessages.add(message); |
|
|
|
this.orderedMessageChannel.send(message); |
|
|
|
this.orderedClientOutChannel.send(message); |
|
|
|
|
|
|
|
|
|
|
|
CountDownLatch latch = new CountDownLatch(messageCount); |
|
|
|
CountDownLatch latch = new CountDownLatch(messageCount); |
|
|
|
handler.setMessageLatch(latch); |
|
|
|
handler.setMessageLatch(latch); |
|
|
|
@ -134,10 +134,10 @@ public class OrderedMessageSendingIntegrationTests { |
|
|
|
for (int i = 1; i <= messageCount; i++) { |
|
|
|
for (int i = 1; i <= messageCount; i++) { |
|
|
|
message = createMessage(i); |
|
|
|
message = createMessage(i); |
|
|
|
expectedMessages.add(message); |
|
|
|
expectedMessages.add(message); |
|
|
|
this.orderedMessageChannel.send(message); |
|
|
|
this.orderedClientOutChannel.send(message); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
latch.await(5, TimeUnit.SECONDS); |
|
|
|
assertThat(latch.await(5, TimeUnit.SECONDS)).isTrue(); |
|
|
|
|
|
|
|
|
|
|
|
assertThat(concurrentSessionDecorator.getTimeSinceSendStarted()).isGreaterThan(0); |
|
|
|
assertThat(concurrentSessionDecorator.getTimeSinceSendStarted()).isGreaterThan(0); |
|
|
|
assertThat(concurrentSessionDecorator.getBufferSize()).isEqualTo((messageCount * MESSAGE_SIZE)); |
|
|
|
assertThat(concurrentSessionDecorator.getBufferSize()).isEqualTo((messageCount * MESSAGE_SIZE)); |
|
|
|
@ -152,10 +152,10 @@ public class OrderedMessageSendingIntegrationTests { |
|
|
|
new ConcurrentWebSocketSessionDecorator(this.blockingSession, 100, 1024); |
|
|
|
new ConcurrentWebSocketSessionDecorator(this.blockingSession, 100, 1024); |
|
|
|
|
|
|
|
|
|
|
|
TestMessageHandler messageHandler = new TestMessageHandler(concurrentSessionDecorator); |
|
|
|
TestMessageHandler messageHandler = new TestMessageHandler(concurrentSessionDecorator); |
|
|
|
subscribableChannel.subscribe(messageHandler); |
|
|
|
this.clientOutChannel.subscribe(messageHandler); |
|
|
|
|
|
|
|
|
|
|
|
// Send one to block
|
|
|
|
// Send one to block
|
|
|
|
this.orderedMessageChannel.send(createMessage(0)); |
|
|
|
this.orderedClientOutChannel.send(createMessage(0)); |
|
|
|
|
|
|
|
|
|
|
|
// Exceed send time..
|
|
|
|
// Exceed send time..
|
|
|
|
Thread.sleep(200); |
|
|
|
Thread.sleep(200); |
|
|
|
@ -164,10 +164,9 @@ public class OrderedMessageSendingIntegrationTests { |
|
|
|
messageHandler.setMessageLatch(messageLatch); |
|
|
|
messageHandler.setMessageLatch(messageLatch); |
|
|
|
|
|
|
|
|
|
|
|
// Send one more
|
|
|
|
// Send one more
|
|
|
|
this.orderedMessageChannel.send(createMessage(1)); |
|
|
|
this.orderedClientOutChannel.send(createMessage(1)); |
|
|
|
|
|
|
|
|
|
|
|
messageLatch.await(5, TimeUnit.SECONDS); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assertThat(messageLatch.await(5, TimeUnit.SECONDS)).isTrue(); |
|
|
|
assertThat(messageHandler.getSavedException()).hasMessageMatching( |
|
|
|
assertThat(messageHandler.getSavedException()).hasMessageMatching( |
|
|
|
"Send time [\\d]+ \\(ms\\) for session '1' exceeded the allowed limit 100"); |
|
|
|
"Send time [\\d]+ \\(ms\\) for session '1' exceeded the allowed limit 100"); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -179,23 +178,23 @@ public class OrderedMessageSendingIntegrationTests { |
|
|
|
new ConcurrentWebSocketSessionDecorator(this.blockingSession, 60 * 1000, 2 * MESSAGE_SIZE); |
|
|
|
new ConcurrentWebSocketSessionDecorator(this.blockingSession, 60 * 1000, 2 * MESSAGE_SIZE); |
|
|
|
|
|
|
|
|
|
|
|
TestMessageHandler messageHandler = new TestMessageHandler(concurrentSessionDecorator); |
|
|
|
TestMessageHandler messageHandler = new TestMessageHandler(concurrentSessionDecorator); |
|
|
|
subscribableChannel.subscribe(messageHandler); |
|
|
|
this.clientOutChannel.subscribe(messageHandler); |
|
|
|
|
|
|
|
|
|
|
|
// Send one to block
|
|
|
|
// Send one to block
|
|
|
|
this.orderedMessageChannel.send(createMessage(0)); |
|
|
|
this.orderedClientOutChannel.send(createMessage(0)); |
|
|
|
|
|
|
|
|
|
|
|
int messageCount = 3; |
|
|
|
int messageCount = 3; |
|
|
|
CountDownLatch messageLatch = new CountDownLatch(messageCount); |
|
|
|
CountDownLatch messageLatch = new CountDownLatch(messageCount); |
|
|
|
messageHandler.setMessageLatch(messageLatch); |
|
|
|
messageHandler.setMessageLatch(messageLatch); |
|
|
|
|
|
|
|
|
|
|
|
for (int i = 1; i <= messageCount; i++) { |
|
|
|
for (int i = 1; i <= messageCount; i++) { |
|
|
|
this.orderedMessageChannel.send(createMessage(i)); |
|
|
|
this.orderedClientOutChannel.send(createMessage(i)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
messageLatch.await(5, TimeUnit.SECONDS); |
|
|
|
assertThat(messageLatch.await(5, TimeUnit.SECONDS)).isTrue(); |
|
|
|
|
|
|
|
|
|
|
|
assertThat(messageHandler.getSavedException()).hasMessage( |
|
|
|
assertThat(messageHandler.getSavedException()).hasMessage( |
|
|
|
"Buffer size " + 3 * MESSAGE_SIZE + " bytes for session '1' exceeds the allowed limit " + 2 * MESSAGE_SIZE); |
|
|
|
"Buffer size " + 3 * MESSAGE_SIZE + " bytes for session '1' " + |
|
|
|
|
|
|
|
"exceeds the allowed limit " + 2 * MESSAGE_SIZE); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static Message<byte[]> createMessage(int index) { |
|
|
|
private static Message<byte[]> createMessage(int index) { |
|
|
|
@ -218,9 +217,9 @@ public class OrderedMessageSendingIntegrationTests { |
|
|
|
@Nullable |
|
|
|
@Nullable |
|
|
|
private CountDownLatch messageLatch; |
|
|
|
private CountDownLatch messageLatch; |
|
|
|
|
|
|
|
|
|
|
|
private Queue<Message<?>> messages = new LinkedBlockingQueue<>(); |
|
|
|
private final Queue<Message<?>> messages = new LinkedBlockingQueue<>(); |
|
|
|
|
|
|
|
|
|
|
|
private AtomicReference<Exception> exception = new AtomicReference<>(); |
|
|
|
private final AtomicReference<Exception> exception = new AtomicReference<>(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public TestMessageHandler(WebSocketSession session) { |
|
|
|
public TestMessageHandler(WebSocketSession session) { |
|
|
|
|