Fix Race Condition in BarrierMessageHandlerTests

Main thread waited for map.size() to go to zero, which is the initial state; use a latch instead.
This commit is contained in:
Gary Russell
2015-11-09 11:34:33 -05:00
parent 240e14fca1
commit 90a485e6a9

View File

@@ -168,20 +168,19 @@ public class BarrierMessageHandlerTests {
handler.setOutputChannel(outputChannel);
handler.setBeanFactory(mock(BeanFactory.class));
handler.afterPropertiesSet();
final CountDownLatch latch = new CountDownLatch(1);
Executors.newSingleThreadExecutor().execute(new Runnable() {
@Override
public void run() {
handler.handleMessage(MessageBuilder.withPayload("foo").setCorrelationId("foo").build());
latch.countDown();
}
});
Map<?, ?> suspensions = TestUtils.getPropertyValue(handler, "suspensions", Map.class);
int n = 0;
while (n++ < 100 && suspensions.size() != 0) {
Thread.sleep(100);
}
assertTrue("suspension not removed", n < 100);
assertTrue(latch.await(10, TimeUnit.SECONDS));
assertEquals("suspension not removed", 0, suspensions.size());
Log logger = spy(TestUtils.getPropertyValue(handler, "logger", Log.class));
new DirectFieldAccessor(handler).setPropertyValue("logger", logger);
handler.trigger(MessageBuilder.withPayload("bar").setCorrelationId("foo").build());