}
@Test
public void testDeleteOneQueue() throws Exception {
CountDownLatch latch = new CountDownLatch(20);
container = createContainer(new MessageListenerAdapter(new PojoListener(latch)), queue.getName(), queue1.getName());
for (int i = 0; i < 10; i++) {
template.convertAndSend(queue.getName(), i + "foo");
template.convertAndSend(queue1.getName(), i + "foo");
}
boolean waited = latch.await(10, TimeUnit.SECONDS);
assertTrue("Timed out waiting for message", waited);
BlockingQueueConsumer consumer = (BlockingQueueConsumer) TestUtils
.getPropertyValue(container, "consumers", Map.class).keySet().iterator().next();
admin.deleteQueue(queue1.getName());
latch = new CountDownLatch(10);
container.setMessageListener(new MessageListenerAdapter(new PojoListener(latch)));
for (int i = 0; i < 10; i++) {
template.convertAndSend(queue.getName(), i + "foo");
}
waited = latch.await(10, TimeUnit.SECONDS);
assertTrue("Timed out waiting for message", waited);
BlockingQueueConsumer newConsumer = (BlockingQueueConsumer) TestUtils
.getPropertyValue(container, "consumers", Map.class).keySet().iterator().next();
int n = 0;
while (n++ < 100 && newConsumer == consumer) {
Thread.sleep(100);
newConsumer = (BlockingQueueConsumer) TestUtils
.getPropertyValue(container, "consumers", Map.class).keySet().iterator().next();
}
assertTrue("Failed to restart consumer", n < 100);
Set<?> missingQueues = TestUtils.getPropertyValue(newConsumer, "missingQueues", Set.class);
n = 0;
while (n++ < 100 && missingQueues.size() == 0) {
Thread.sleep(200);
}
assertTrue("Failed to detect missing queue", n < 100);
DirectFieldAccessor dfa = new DirectFieldAccessor(newConsumer);
dfa.setPropertyValue("lastRetryDeclaration", 0);
dfa.setPropertyValue("retryDeclarationInterval", 100);
admin.declareQueue(queue1);
n = 0;
while (n++ < 100 && missingQueues.size() > 0) {
Thread.sleep(100);
}
assertTrue("Failed to redeclare missing queue", n < 100);
latch = new CountDownLatch(20);
container.setMessageListener(new MessageListenerAdapter(new PojoListener(latch)));
for (int i = 0; i < 10; i++) {
template.convertAndSend(queue.getName(), i + "foo");
template.convertAndSend(queue1.getName(), i + "foo");
}
waited = latch.await(10, TimeUnit.SECONDS);