Fix STOMP broker relay int test issue

Avoid dependency on order in which expected messages are received.
This commit is contained in:
Rossen Stoyanchev 2014-04-29 17:17:10 -04:00
parent 56d26443e2
commit 58adc150c9
1 changed files with 20 additions and 3 deletions

View File

@ -282,12 +282,29 @@ public class StompBrokerRelayMessageHandlerIntegrationTests {
}
public void expectMessages(MessageExchange... messageExchanges) throws InterruptedException {
for (MessageExchange exchange : messageExchanges) {
List<MessageExchange> expectedMessages =
new ArrayList<MessageExchange>(Arrays.<MessageExchange>asList(messageExchanges));
while (expectedMessages.size() > 0) {
Message<?> message = this.queue.poll(10000, TimeUnit.MILLISECONDS);
assertNotNull("Timed out waiting for: " + exchange, message);
assertTrue("Expected: " + exchange + " but got: " + message, exchange.matchMessage(message));
assertNotNull("Timed out waiting for messages, expected [" + expectedMessages + "]", message);
MessageExchange match = findMatch(expectedMessages, message);
assertNotNull("Unexpected message=" + message + ", expected [" + expectedMessages + "]", match);
expectedMessages.remove(match);
}
}
private MessageExchange findMatch(List<MessageExchange> expectedMessages, Message<?> message) {
for (MessageExchange exchange : expectedMessages) {
if (exchange.matchMessage(message)) {
return exchange;
}
}
return null;
}
}
/**