Update the tests so that they're not dependent on port 61616

git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1084797 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Timothy A. Bish 2011-03-23 22:58:18 +00:00
parent 5cf486c975
commit 883eed0e38
4 changed files with 180 additions and 156 deletions

View File

@ -52,55 +52,58 @@ import org.junit.After;
import org.junit.Test;
public class FailoverConsumerOutstandingCommitTest {
private static final Logger LOG = LoggerFactory.getLogger(FailoverConsumerOutstandingCommitTest.class);
private static final String QUEUE_NAME = "FailoverWithOutstandingCommit";
private static final String MESSAGE_TEXT = "Test message ";
private String url = "tcp://localhost:61616";
final int prefetch = 10;
BrokerService broker;
public void startCleanBroker() throws Exception {
startBroker(true);
}
@After
public void stopBroker() throws Exception {
if (broker != null) {
broker.stop();
}
}
public void startBroker(boolean deleteAllMessagesOnStartup) throws Exception {
broker = createBroker(deleteAllMessagesOnStartup);
broker.start();
}
public BrokerService createBroker(boolean deleteAllMessagesOnStartup) throws Exception {
broker = new BrokerService();
broker.addConnector(url);
broker.setDeleteAllMessagesOnStartup(deleteAllMessagesOnStartup);
PolicyMap policyMap = new PolicyMap();
PolicyEntry defaultEntry = new PolicyEntry();
// optimizedDispatche and sync dispatch ensure that the dispatch happens
// before the commit reply that the consumer.clearDispatchList is waiting for.
defaultEntry.setOptimizedDispatch(true);
private static final Logger LOG = LoggerFactory.getLogger(FailoverConsumerOutstandingCommitTest.class);
private static final String QUEUE_NAME = "FailoverWithOutstandingCommit";
private static final String MESSAGE_TEXT = "Test message ";
private static final String TRANSPORT_URI = "tcp://localhost:0";
private String url;
final int prefetch = 10;
BrokerService broker;
@After
public void stopBroker() throws Exception {
if (broker != null) {
broker.stop();
}
}
public void startBroker(boolean deleteAllMessagesOnStartup) throws Exception {
broker = createBroker(deleteAllMessagesOnStartup);
broker.start();
}
public BrokerService createBroker(boolean deleteAllMessagesOnStartup) throws Exception {
return createBroker(deleteAllMessagesOnStartup, TRANSPORT_URI);
}
public BrokerService createBroker(boolean deleteAllMessagesOnStartup, String bindAddress) throws Exception {
broker = new BrokerService();
broker.addConnector(bindAddress);
broker.setDeleteAllMessagesOnStartup(deleteAllMessagesOnStartup);
PolicyMap policyMap = new PolicyMap();
PolicyEntry defaultEntry = new PolicyEntry();
// optimizedDispatche and sync dispatch ensure that the dispatch happens
// before the commit reply that the consumer.clearDispatchList is waiting for.
defaultEntry.setOptimizedDispatch(true);
policyMap.setDefaultEntry(defaultEntry);
broker.setDestinationPolicy(policyMap);
return broker;
}
@Test
public void testFailoverConsumerDups() throws Exception {
doTestFailoverConsumerDups(true);
}
public void doTestFailoverConsumerDups(final boolean watchTopicAdvisories) throws Exception {
url = broker.getTransportConnectors().get(0).getConnectUri().toString();
return broker;
}
@Test
public void testFailoverConsumerDups() throws Exception {
doTestFailoverConsumerDups(true);
}
public void doTestFailoverConsumerDups(final boolean watchTopicAdvisories) throws Exception {
broker = createBroker(true);
broker.setPlugins(new BrokerPlugin[] {
new BrokerPluginSupport() {
@Override
@ -108,7 +111,7 @@ public class FailoverConsumerOutstandingCommitTest {
TransactionId xid, boolean onePhase) throws Exception {
// so commit will hang as if reply is lost
context.setDontSendReponse(true);
Executors.newSingleThreadExecutor().execute(new Runnable() {
Executors.newSingleThreadExecutor().execute(new Runnable() {
public void run() {
LOG.info("Stopping broker before commit...");
try {
@ -122,17 +125,17 @@ public class FailoverConsumerOutstandingCommitTest {
}
});
broker.start();
ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("failover:(" + url + ")");
cf.setWatchTopicAdvisories(watchTopicAdvisories);
cf.setDispatchAsync(false);
final ActiveMQConnection connection = (ActiveMQConnection) cf.createConnection();
connection.start();
final Session producerSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
final Queue destination = producerSession.createQueue(QUEUE_NAME + "?consumer.prefetchSize=" + prefetch);
final Session consumerSession = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
@ -144,9 +147,9 @@ public class FailoverConsumerOutstandingCommitTest {
public void onMessage(Message message) {
LOG.info("consume one and commit");
assertNotNull("got message", message);
try {
consumerSession.commit();
} catch (JMSException e) {
@ -157,7 +160,7 @@ public class FailoverConsumerOutstandingCommitTest {
LOG.info("done commit");
}
});
// may block if broker shutodwn happens quickly
Executors.newSingleThreadExecutor().execute(new Runnable() {
public void run() {
@ -171,15 +174,15 @@ public class FailoverConsumerOutstandingCommitTest {
LOG.info("producer done");
}
});
// will be stopped by the plugin
broker.waitUntilStopped();
broker = createBroker(false);
broker = createBroker(false, url);
broker.start();
assertTrue("consumer added through failover", commitDoneLatch.await(20, TimeUnit.SECONDS));
assertTrue("another message was recieved after failover", messagesReceived.await(20, TimeUnit.SECONDS));
connection.close();
}
@ -187,12 +190,12 @@ public class FailoverConsumerOutstandingCommitTest {
public void TestFailoverConsumerOutstandingSendTxIncomplete() throws Exception {
doTestFailoverConsumerOutstandingSendTx(false);
}
@Test
public void TestFailoverConsumerOutstandingSendTxComplete() throws Exception {
doTestFailoverConsumerOutstandingSendTx(true);
}
public void doTestFailoverConsumerOutstandingSendTx(final boolean doActualBrokerCommit) throws Exception {
final boolean watchTopicAdvisories = true;
broker = createBroker(true);
@ -233,7 +236,7 @@ public class FailoverConsumerOutstandingCommitTest {
final Session producerSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
final Queue destination = producerSession.createQueue(QUEUE_NAME
+ "?consumer.prefetchSize=" + prefetch);
final Queue signalDestination = producerSession.createQueue(QUEUE_NAME + ".signal"
+ "?consumer.prefetchSize=" + prefetch);
@ -280,7 +283,7 @@ public class FailoverConsumerOutstandingCommitTest {
// will be stopped by the plugin
broker.waitUntilStopped();
broker = createBroker(false);
broker = createBroker(false, url);
broker.start();
assertTrue("commit done through failover", commitDoneLatch.await(20, TimeUnit.SECONDS));
@ -291,8 +294,8 @@ public class FailoverConsumerOutstandingCommitTest {
assertEquals("get message 0 second", MESSAGE_TEXT + "0", receivedMessages.get(1).getText());
assertTrue("another message was received", messagesReceived.await(20, TimeUnit.SECONDS));
assertEquals("get message 1 eventually", MESSAGE_TEXT + "1", receivedMessages.get(2).getText());
connection.close();
}
@ -312,28 +315,28 @@ public class FailoverConsumerOutstandingCommitTest {
final Session consumerSession = connection.createSession(true, Session.SESSION_TRANSACTED);
final MessageConsumer testConsumer = consumerSession.createConsumer(destination);
assertNull("no message yet", testConsumer.receiveNoWait());
produceMessage(producerSession, destination, 1);
producerSession.close();
// consume then rollback after restart
Message msg = testConsumer.receive(5000);
assertNotNull(msg);
// restart with outstanding delivered message
broker.stop();
broker.waitUntilStopped();
broker = createBroker(false);
broker = createBroker(false, url);
broker.start();
consumerSession.rollback();
// receive again
msg = testConsumer.receive(10000);
assertNotNull("got message again after rollback", msg);
consumerSession.commit();
// close before sweep
consumerSession.close();
msg = receiveMessage(cf, destination);

View File

@ -51,51 +51,55 @@ import org.junit.Test;
// see https://issues.apache.org/activemq/browse/AMQ-2573
public class FailoverConsumerUnconsumedTest {
private static final Logger LOG = LoggerFactory.getLogger(FailoverConsumerUnconsumedTest.class);
private static final String QUEUE_NAME = "FailoverWithUnconsumed";
private String url = "tcp://localhost:61616";
final int prefetch = 10;
BrokerService broker;
public void startCleanBroker() throws Exception {
startBroker(true);
}
@After
public void stopBroker() throws Exception {
if (broker != null) {
broker.stop();
}
}
public void startBroker(boolean deleteAllMessagesOnStartup) throws Exception {
broker = createBroker(deleteAllMessagesOnStartup);
private static final String QUEUE_NAME = "FailoverWithUnconsumed";
private static final String TRANSPORT_URI = "tcp://localhost:0";
private String url;
final int prefetch = 10;
BrokerService broker;
@After
public void stopBroker() throws Exception {
if (broker != null) {
broker.stop();
}
}
public void startBroker(boolean deleteAllMessagesOnStartup) throws Exception {
broker = createBroker(deleteAllMessagesOnStartup);
broker.start();
}
}
public BrokerService createBroker(boolean deleteAllMessagesOnStartup) throws Exception {
broker = new BrokerService();
broker.addConnector(url);
broker.setDeleteAllMessagesOnStartup(deleteAllMessagesOnStartup);
return broker;
}
public BrokerService createBroker(boolean deleteAllMessagesOnStartup) throws Exception {
return createBroker(deleteAllMessagesOnStartup, TRANSPORT_URI);
}
@Test
public void testFailoverConsumerDups() throws Exception {
doTestFailoverConsumerDups(true);
}
@Test
public BrokerService createBroker(boolean deleteAllMessagesOnStartup, String bindAddress) throws Exception {
broker = new BrokerService();
broker.addConnector(bindAddress);
broker.setDeleteAllMessagesOnStartup(deleteAllMessagesOnStartup);
this.url = broker.getTransportConnectors().get(0).getConnectUri().toString();
return broker;
}
@Test
public void testFailoverConsumerDups() throws Exception {
doTestFailoverConsumerDups(true);
}
@Test
public void testFailoverConsumerDupsNoAdvisoryWatch() throws Exception {
doTestFailoverConsumerDups(false);
}
public void doTestFailoverConsumerDups(final boolean watchTopicAdvisories) throws Exception {
final int maxConsumers = 4;
public void doTestFailoverConsumerDups(final boolean watchTopicAdvisories) throws Exception {
final int maxConsumers = 4;
broker = createBroker(true);
broker.setPlugins(new BrokerPlugin[] {
new BrokerPluginSupport() {
int consumerCount;
@ -106,7 +110,7 @@ public class FailoverConsumerUnconsumedTest {
final ConsumerInfo info) throws Exception {
if (++consumerCount == maxConsumers + (watchTopicAdvisories ? 1:0)) {
context.setDontSendReponse(true);
Executors.newSingleThreadExecutor().execute(new Runnable() {
Executors.newSingleThreadExecutor().execute(new Runnable() {
public void run() {
LOG.info("Stopping broker on consumer: " + info.getConsumerId());
try {
@ -122,13 +126,13 @@ public class FailoverConsumerUnconsumedTest {
}
});
broker.start();
ActiveMQConnectionFactory cf = new ActiveMQConnectionFactory("failover:(" + url + ")");
cf.setWatchTopicAdvisories(watchTopicAdvisories);
final ActiveMQConnection connection = (ActiveMQConnection) cf.createConnection();
connection.start();
final Session consumerSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
final Queue destination = consumerSession.createQueue(QUEUE_NAME + "?jms.consumer.prefetch=" + prefetch);
@ -136,9 +140,9 @@ public class FailoverConsumerUnconsumedTest {
for (int i=0; i<maxConsumers -1; i++) {
testConsumers.add(new TestConsumer(consumerSession, destination, connection));
}
produceMessage(consumerSession, destination, maxConsumers * prefetch);
assertTrue("add messages are dispatched", Wait.waitFor(new Wait.Condition() {
public boolean isSatisified() throws Exception {
int totalUnconsumed = 0;
@ -146,14 +150,14 @@ public class FailoverConsumerUnconsumedTest {
long unconsumed = testConsumer.unconsumedSize();
LOG.info(testConsumer.getConsumerId() + " unconsumed: " + unconsumed);
totalUnconsumed += unconsumed;
}
}
return totalUnconsumed == (maxConsumers-1) * prefetch;
}
}));
final CountDownLatch commitDoneLatch = new CountDownLatch(1);
Executors.newSingleThreadExecutor().execute(new Runnable() {
Executors.newSingleThreadExecutor().execute(new Runnable() {
public void run() {
try {
LOG.info("add last consumer...");
@ -165,7 +169,7 @@ public class FailoverConsumerUnconsumedTest {
}
}
});
// will be stopped by the plugin
broker.waitUntilStopped();
@ -182,11 +186,11 @@ public class FailoverConsumerUnconsumedTest {
}
}));
broker = createBroker(false);
broker = createBroker(false, this.url);
broker.start();
assertTrue("consumer added through failover", commitDoneLatch.await(30, TimeUnit.SECONDS));
// each should again get prefetch messages - all unconsumed deliveries should be rolledback
assertTrue("after start all messages are re dispatched", Wait.waitFor(new Wait.Condition() {
public boolean isSatisified() throws Exception {
@ -195,14 +199,14 @@ public class FailoverConsumerUnconsumedTest {
long unconsumed = testConsumer.unconsumedSize();
LOG.info(testConsumer.getConsumerId() + " after restart: unconsumed: " + unconsumed);
totalUnconsumed += unconsumed;
}
}
return totalUnconsumed == (maxConsumers) * prefetch;
}
}));
connection.close();
}
private void produceMessage(final Session producerSession, Queue destination, long count)
throws JMSException {
MessageProducer producer = producerSession.createProducer(destination);
@ -212,22 +216,22 @@ public class FailoverConsumerUnconsumedTest {
}
producer.close();
}
// allow access to unconsumedMessages
class TestConsumer extends ActiveMQMessageConsumer {
TestConsumer(Session consumerSession, Destination destination, ActiveMQConnection connection) throws Exception {
super((ActiveMQSession) consumerSession,
new ConsumerId(new SessionId(connection.getConnectionInfo().getConnectionId(),1), nextGen()),
super((ActiveMQSession) consumerSession,
new ConsumerId(new SessionId(connection.getConnectionInfo().getConnectionId(),1), nextGen()),
ActiveMQMessageTransformation.transformDestination(destination), null, "",
prefetch, -1, false, false, true, null);
}
public int unconsumedSize() {
return unconsumedMessages.size();
}
}
static long idGen = 100;
private static long nextGen() {
idGen -=5;

View File

@ -48,14 +48,11 @@ public class FailoverPrefetchZeroTest {
private static final Logger LOG = LoggerFactory.getLogger(FailoverPrefetchZeroTest.class);
private static final String QUEUE_NAME = "FailoverPrefetchZero";
private String url = "tcp://localhost:61616";
private static final String TRANSPORT_URI = "tcp://localhost:0";
private String url;
final int prefetch = 0;
BrokerService broker;
public void startCleanBroker() throws Exception {
startBroker(true);
}
@After
public void stopBroker() throws Exception {
if (broker != null) {
@ -69,9 +66,16 @@ public class FailoverPrefetchZeroTest {
}
public BrokerService createBroker(boolean deleteAllMessagesOnStartup) throws Exception {
return createBroker(deleteAllMessagesOnStartup, TRANSPORT_URI);
}
public BrokerService createBroker(boolean deleteAllMessagesOnStartup, String bindAddress) throws Exception {
broker = new BrokerService();
broker.addConnector(url);
broker.addConnector(bindAddress);
broker.setDeleteAllMessagesOnStartup(deleteAllMessagesOnStartup);
url = broker.getTransportConnectors().get(0).getConnectUri().toString();
return broker;
}
@ -135,7 +139,7 @@ public class FailoverPrefetchZeroTest {
// will be stopped by the plugin
assertTrue("pull completed on broker", pullDone.await(30, TimeUnit.SECONDS));
broker.waitUntilStopped();
broker = createBroker(false);
broker = createBroker(false, url);
broker.start();
assertTrue("receive completed through failover", receiveDone.await(30, TimeUnit.SECONDS));

View File

@ -60,17 +60,14 @@ public class FailoverTransactionTest extends TestSupport {
private static final Logger LOG = LoggerFactory.getLogger(FailoverTransactionTest.class);
private static final String QUEUE_NAME = "FailoverWithTx";
private String url = "tcp://localhost:61616";
private static final String TRANSPORT_URI = "tcp://localhost:0";
private String url;
BrokerService broker;
public static Test suite() {
return suite(FailoverTransactionTest.class);
}
public void startCleanBroker() throws Exception {
startBroker(true);
}
public void setUp() throws Exception {
super.setMaxTestTime(20 * 60 * 1000); // some boxes can be real slow
super.setAutoFail(true);
@ -87,17 +84,33 @@ public class FailoverTransactionTest extends TestSupport {
}
}
private void startCleanBroker() throws Exception {
startBroker(true);
}
public void startBroker(boolean deleteAllMessagesOnStartup) throws Exception {
broker = createBroker(deleteAllMessagesOnStartup);
broker.start();
}
public void startBroker(boolean deleteAllMessagesOnStartup, String bindAddress) throws Exception {
broker = createBroker(deleteAllMessagesOnStartup, bindAddress);
broker.start();
}
public BrokerService createBroker(boolean deleteAllMessagesOnStartup) throws Exception {
return createBroker(deleteAllMessagesOnStartup, TRANSPORT_URI);
}
public BrokerService createBroker(boolean deleteAllMessagesOnStartup, String bindAddress) throws Exception {
broker = new BrokerService();
broker.setUseJmx(false);
broker.setAdvisorySupport(false);
broker.addConnector(url);
broker.addConnector(bindAddress);
broker.setDeleteAllMessagesOnStartup(deleteAllMessagesOnStartup);
url = broker.getTransportConnectors().get(0).getConnectUri().toString();
return broker;
}
@ -114,7 +127,7 @@ public class FailoverTransactionTest extends TestSupport {
// restart to force failover and connection state recovery before the commit
broker.stop();
startBroker(false);
startBroker(false, url);
session.commit();
assertNotNull("we got the message", consumer.receive(20000));
@ -182,7 +195,7 @@ public class FailoverTransactionTest extends TestSupport {
// will be stopped by the plugin
broker.waitUntilStopped();
broker = createBroker(false);
broker = createBroker(false, url);
setDefaultPersistenceAdapter(broker);
broker.start();
@ -202,7 +215,7 @@ public class FailoverTransactionTest extends TestSupport {
broker.waitUntilStopped();
LOG.info("Checking for remaining/hung messages..");
broker = createBroker(false);
broker = createBroker(false, url);
setDefaultPersistenceAdapter(broker);
broker.start();
@ -285,7 +298,7 @@ public class FailoverTransactionTest extends TestSupport {
// will be stopped by the plugin
broker.waitUntilStopped();
broker = createBroker(false);
broker = createBroker(false, url);
setDefaultPersistenceAdapter(broker);
LOG.info("restarting....");
broker.start();
@ -309,7 +322,7 @@ public class FailoverTransactionTest extends TestSupport {
broker.waitUntilStopped();
LOG.info("Checking for remaining/hung messages with second restart..");
broker = createBroker(false);
broker = createBroker(false, url);
setDefaultPersistenceAdapter(broker);
broker.start();
@ -430,7 +443,7 @@ public class FailoverTransactionTest extends TestSupport {
broker.waitUntilStopped();
LOG.info("Checking for remaining/hung messages with restart..");
broker = createBroker(false);
broker = createBroker(false, url);
setDefaultPersistenceAdapter(broker);
broker.start();
@ -462,7 +475,7 @@ public class FailoverTransactionTest extends TestSupport {
// restart to force failover and connection state recovery before the commit
broker.stop();
startBroker(false);
startBroker(false, url);
session.commit();
@ -493,7 +506,7 @@ public class FailoverTransactionTest extends TestSupport {
// restart to force failover and connection state recovery before the commit
broker.stop();
startBroker(false);
startBroker(false, url);
session.commit();
for (int i = 0; i < count; i++) {
@ -543,7 +556,7 @@ public class FailoverTransactionTest extends TestSupport {
// restart to force failover and connection state recovery before the commit
broker.stop();
startBroker(false);
startBroker(false, url);
session.commit();
for (int i = 0; i < count - 1; i++) {
@ -671,7 +684,7 @@ public class FailoverTransactionTest extends TestSupport {
// will be stopped by the plugin
broker.waitUntilStopped();
broker = createBroker(false);
broker = createBroker(false, url);
setDefaultPersistenceAdapter(broker);
broker.start();
@ -708,7 +721,7 @@ public class FailoverTransactionTest extends TestSupport {
broker.waitUntilStopped();
LOG.info("Checking for remaining/hung messages..");
broker = createBroker(false);
broker = createBroker(false, url);
setDefaultPersistenceAdapter(broker);
broker.start();
@ -744,7 +757,7 @@ public class FailoverTransactionTest extends TestSupport {
assertNotNull(msg);
broker.stop();
broker = createBroker(false);
broker = createBroker(false, url);
// use empty jdbc store so that default wait(0) for redeliveries will timeout after failover
setPersistenceAdapter(broker, PersistenceAdapterChoice.JDBC);
broker.start();
@ -756,7 +769,7 @@ public class FailoverTransactionTest extends TestSupport {
}
broker.stop();
broker = createBroker(false);
broker = createBroker(false, url);
broker.start();
assertNotNull("should get rolledback message from original restarted broker", consumer.receive(20000));
@ -784,7 +797,7 @@ public class FailoverTransactionTest extends TestSupport {
assertNotNull("got message just produced", msg);
broker.stop();
broker = createBroker(false);
broker = createBroker(false, url);
// use empty jdbc store so that wait for re-deliveries occur when failover resumes
setPersistenceAdapter(broker, PersistenceAdapterChoice.JDBC);
broker.start();
@ -803,7 +816,7 @@ public class FailoverTransactionTest extends TestSupport {
});
broker.stop();
broker = createBroker(false);
broker = createBroker(false, url);
broker.start();
assertTrue("commit was successful", commitDone.await(30, TimeUnit.SECONDS));
@ -836,7 +849,7 @@ public class FailoverTransactionTest extends TestSupport {
MessageConsumer consumer2 = consumerSession.createConsumer(consumerSession.createQueue(QUEUE_NAME + "?consumer.prefetchSize=1"));
broker.stop();
broker = createBroker(false);
broker = createBroker(false, url);
broker.start();
final CountDownLatch commitDone = new CountDownLatch(1);
@ -851,7 +864,7 @@ public class FailoverTransactionTest extends TestSupport {
try {
consumerSession.commit();
} catch (JMSException ex) {
exceptions.add(ex);
exceptions.add(ex);
} finally {
commitDone.countDown();
}