Fix AsyncMessagingTemplateTests for time race condition

This commit is contained in:
Artem Bilan
2024-09-30 09:10:18 -04:00
parent 6a548b71d0
commit 90f06b1f76

View File

@@ -44,7 +44,6 @@ import static org.awaitility.Awaitility.await;
/**
* @author Mark Fisher
* @author Artem Bilan
*
* @since 2.0
*/
public class AsyncMessagingTemplateTests {
@@ -149,8 +148,8 @@ public class AsyncMessagingTemplateTests {
AsyncMessagingTemplate template = new AsyncMessagingTemplate();
template.setDefaultDestination(channel);
Future<Message<?>> result = template.asyncReceive();
sendMessageAfterDelay(channel, new GenericMessage<>("test"), 200);
long start = System.currentTimeMillis();
sendMessageAfterDelay(channel, new GenericMessage<>("test"), 200);
assertThat(result.get(100000, TimeUnit.MILLISECONDS)).isNotNull();
long elapsed = System.currentTimeMillis() - start;
assertThat(result.get().getPayload()).isEqualTo("test");
@@ -162,8 +161,8 @@ public class AsyncMessagingTemplateTests {
QueueChannel channel = new QueueChannel();
AsyncMessagingTemplate template = new AsyncMessagingTemplate();
Future<Message<?>> result = template.asyncReceive(channel);
sendMessageAfterDelay(channel, new GenericMessage<>("test"), 200);
long start = System.currentTimeMillis();
sendMessageAfterDelay(channel, new GenericMessage<>("test"), 200);
assertThat(result.get(10000, TimeUnit.MILLISECONDS)).isNotNull();
long elapsed = System.currentTimeMillis() - start;
assertThat(result.get().getPayload()).isEqualTo("test");
@@ -179,8 +178,8 @@ public class AsyncMessagingTemplateTests {
AsyncMessagingTemplate template = new AsyncMessagingTemplate();
template.setBeanFactory(context);
Future<Message<?>> result = template.asyncReceive("testChannel");
sendMessageAfterDelay(channel, new GenericMessage<>("test"), 200);
long start = System.currentTimeMillis();
sendMessageAfterDelay(channel, new GenericMessage<>("test"), 200);
assertThat(result.get(10000, TimeUnit.MILLISECONDS)).isNotNull();
long elapsed = System.currentTimeMillis() - start;
@@ -202,8 +201,8 @@ public class AsyncMessagingTemplateTests {
AsyncMessagingTemplate template = new AsyncMessagingTemplate();
template.setDefaultDestination(channel);
Future<?> result = template.asyncReceiveAndConvert();
sendMessageAfterDelay(channel, new GenericMessage<>("test"), 200);
long start = System.currentTimeMillis();
sendMessageAfterDelay(channel, new GenericMessage<>("test"), 200);
assertThat(result.get(10000, TimeUnit.MILLISECONDS)).isNotNull();
long elapsed = System.currentTimeMillis() - start;
assertThat(result.get()).isEqualTo("test");
@@ -216,8 +215,8 @@ public class AsyncMessagingTemplateTests {
QueueChannel channel = new QueueChannel();
AsyncMessagingTemplate template = new AsyncMessagingTemplate();
Future<?> result = template.asyncReceiveAndConvert(channel);
sendMessageAfterDelay(channel, new GenericMessage<>("test"), 200);
long start = System.currentTimeMillis();
sendMessageAfterDelay(channel, new GenericMessage<>("test"), 200);
assertThat(result.get(10000, TimeUnit.MILLISECONDS)).isNotNull();
long elapsed = System.currentTimeMillis() - start;
assertThat(result.get()).isEqualTo("test");
@@ -234,8 +233,8 @@ public class AsyncMessagingTemplateTests {
AsyncMessagingTemplate template = new AsyncMessagingTemplate();
template.setBeanFactory(context);
Future<?> result = template.asyncReceiveAndConvert("testChannel");
sendMessageAfterDelay(channel, new GenericMessage<>("test"), 200);
long start = System.currentTimeMillis();
sendMessageAfterDelay(channel, new GenericMessage<>("test"), 200);
assertThat(result.get(10000, TimeUnit.MILLISECONDS)).isNotNull();
long elapsed = System.currentTimeMillis() - start;
@@ -435,15 +434,15 @@ public class AsyncMessagingTemplateTests {
private static void sendMessageAfterDelay(MessageChannel channel, GenericMessage<String> message, int delay) {
ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.execute(() -> {
try {
Thread.sleep(delay);
}
catch (InterruptedException e) {
Thread.currentThread().interrupt();
return;
}
channel.send(message);
});
try {
Thread.sleep(delay);
}
catch (InterruptedException e) {
Thread.currentThread().interrupt();
return;
}
channel.send(message);
});
executorService.shutdown();
}