sessionB = sf.createSession(false, true, true);
sessionB.start();
session.start();
ClientConsumerInternal consReceiveOneAndHold = (ClientConsumerInternal)sessionB.createConsumer(ADDRESS);
final CountDownLatch latchReceived = new CountDownLatch(2);
final CountDownLatch latchReceivedBuffered = new CountDownLatch(3);
final CountDownLatch latchDone = new CountDownLatch(1);
// It should receive two messages and then give up
class LocalHandler implements MessageHandler
{
boolean failed = false;
int count = 0;
/* (non-Javadoc)
* @see org.hornetq.api.core.client.MessageHandler#onMessage(org.hornetq.api.core.client.ClientMessage)
*/
public synchronized void onMessage(final ClientMessage message)
{
try
{
log.info("received msg " + message);
String str = getTextMessage(message);
if (ConsumerWindowSizeTest.isTrace)
{
ConsumerWindowSizeTest.log.trace("Received message " + str);
}
ConsumerWindowSizeTest.log.info("Received message " + str);
failed = failed || !str.equals("Msg" + count);
message.acknowledge();
latchReceived.countDown();
latchReceivedBuffered.countDown();
if (count++ == 1)
{
// it will hold here for a while
if (!latchDone.await(TIMEOUT, TimeUnit.SECONDS))
{
new Exception("ClientConsuemrWindowSizeTest Handler couldn't receive signal in less than 5 seconds").printStackTrace();
failed = true;
}
}
}
catch (Exception e)
{
e.printStackTrace(); // Hudson / JUnit report
failed = true;
}
}
}
LocalHandler handler = new LocalHandler();
ClientProducer prod = session.createProducer(ADDRESS);
for (int i = 0; i < numberOfMessages; i++)
{
ClientMessage msg = createTextMessage(session, "Msg" + i);
if (largeMessage)
{
msg.getBodyBuffer().writeBytes(new byte[600]);
}
prod.send(msg);
}
consReceiveOneAndHold.setMessageHandler(handler);
Assert.assertTrue(latchReceived.await(TIMEOUT, TimeUnit.SECONDS));
log.info("bs " + consReceiveOneAndHold.getBufferSize());
long timeout = System.currentTimeMillis() + 1000 * TIMEOUT;
while (consReceiveOneAndHold.getBufferSize() == 0 && System.currentTimeMillis() < timeout)
{
log.info("bs " + consReceiveOneAndHold.getBufferSize());
Thread.sleep(10);
}
Assert.assertEquals(1, consReceiveOneAndHold.getBufferSize());
ClientConsumer cons1 = session.createConsumer(ADDRESS);
for (int i = 3; i < numberOfMessages; i++)
{