{
locator.setBlockOnNonDurableSend(true);
locator.setBlockOnDurableSend(true);
locator.setReconnectAttempts(-1);
ClientSessionFactoryInternal sf = createSessionFactoryAndWaitForTopology(locator, 2);
final int numSessions = 5;
final int numConsumersPerSession = 5;
Map<ClientSession, List<ClientConsumer>> sessionConsumerMap = new HashMap<ClientSession, List<ClientConsumer>>();
for (int i = 0; i < numSessions; i++)
{
ClientSession session = createSession(sf, true, true);
List<ClientConsumer> consumers = new ArrayList<ClientConsumer>();
for (int j = 0; j < numConsumersPerSession; j++)
{
SimpleString queueName = new SimpleString("queue" + i + "-" + j);
session.createQueue(FailoverTestBase.ADDRESS, queueName, null, true);
ClientConsumer consumer = session.createConsumer(queueName);
consumers.add(consumer);
}
sessionConsumerMap.put(session, consumers);
}
ClientSession sendSession = createSession(sf, true, true);
ClientProducer producer = sendSession.createProducer(FailoverTestBase.ADDRESS);
final int numMessages = 100;
for (int i = 0; i < numMessages; i++)
{
ClientMessage message = sendSession.createMessage(true);
setBody(i, message);
message.putIntProperty("counter", i);
producer.send(message);
}
Set<ClientSession> sessionSet = sessionConsumerMap.keySet();
ClientSession[] sessions = new ClientSession[sessionSet.size()];
sessionSet.toArray(sessions);
crash(sessions);
for (ClientSession session : sessionConsumerMap.keySet())
{
session.start();
}
for (List<ClientConsumer> consumerList : sessionConsumerMap.values())
{
for (ClientConsumer consumer : consumerList)
{
for (int i = 0; i < numMessages; i++)
{
ClientMessage message = consumer.receive(1000);
Assert.assertNotNull(message);
assertMessageBody(i, message);
Assert.assertEquals(i, message.getIntProperty("counter").intValue());
message.acknowledge();
}
}
}
for (ClientSession session : sessionConsumerMap.keySet())
{
session.close();
}
sendSession.close();
sf.close();
Assert.assertEquals(0, sf.numSessions());
Assert.assertEquals(0, sf.numConnections());
}