Author: chirino
Date: Tue Apr 1 07:05:51 2008
New Revision: 643407
URL: http://svn.apache.org/viewvc?rev=643407&view=rev
Log:
Making the MultiBrokersMultiClientsTest less timing dependent. Using
advisories to know when the subscriptions have been setup so
that we can start the publishing at the right time.
Modified:
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/JmsMultipleBrokersTestSupport.java
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/usecases/MultiBrokersMultiClientsTest.java
Modified:
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/JmsMultipleBrokersTestSupport.java
URL:
http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/JmsMultipleBrokersTestSupport.java?rev=643407&r1=643406&r2=643407&view=diff
==============================================================================
---
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/JmsMultipleBrokersTestSupport.java
(original)
+++
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/JmsMultipleBrokersTestSupport.java
Tue Apr 1 07:05:51 2008
@@ -26,6 +26,8 @@
import java.util.List;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
@@ -38,6 +40,9 @@
import javax.jms.TextMessage;
import javax.jms.Topic;
+import org.apache.activemq.advisory.ConsumerEvent;
+import org.apache.activemq.advisory.ConsumerEventSource;
+import org.apache.activemq.advisory.ConsumerListener;
import org.apache.activemq.broker.BrokerFactory;
import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.broker.TransportConnector;
@@ -218,6 +223,38 @@
}
return null;
}
+
+ protected void assertConsumersConnect(String brokerName, Destination
destination, final int count, long timeout) throws Exception {
+ BrokerItem brokerItem = brokers.get(brokerName);
+ Connection conn = brokerItem.createConnection();
+ conn.start();
+ ConsumerEventSource ces = new ConsumerEventSource(conn, destination);
+
+ try {
+ final AtomicInteger actualConnected = new AtomicInteger();
+ final CountDownLatch latch = new CountDownLatch(1);
+ ces.setConsumerListener(new ConsumerListener(){
+ public void onConsumerEvent(ConsumerEvent
event) {
+ if( actualConnected.get() < count ) {
+
actualConnected.set(event.getConsumerCount());
+ }
+ if( event.getConsumerCount() >= count )
{
+ latch.countDown();
+ }
+ }
+ });
+ ces.start();
+
+ latch.await(timeout, TimeUnit.MILLISECONDS);
+ assertTrue("Expected at least "+count+" consumers to connect,
but only "+actualConnected.get()+" connectect within "+timeout+" ms",
actualConnected.get() >= count);
+
+ } finally {
+ ces.stop();
+ conn.close();
+ brokerItem.connections.remove(conn);
+ }
+ }
+
protected void sendMessages(String brokerName, Destination destination,
int count) throws Exception {
BrokerItem brokerItem = brokers.get(brokerName);
Modified:
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/usecases/MultiBrokersMultiClientsTest.java
URL:
http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/usecases/MultiBrokersMultiClientsTest.java?rev=643407&r1=643406&r2=643407&view=diff
==============================================================================
---
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/usecases/MultiBrokersMultiClientsTest.java
(original)
+++
activemq/trunk/activemq-core/src/test/java/org/apache/activemq/usecases/MultiBrokersMultiClientsTest.java
Tue Apr 1 07:05:51 2008
@@ -56,7 +56,10 @@
}
// wait for consumers to get propagated
- Thread.sleep(5000);
+ for (int i = 1; i <= BROKER_COUNT; i++) {
+ // all consumers on the remote brokers look like 1 consumer to
the local broker.
+ assertConsumersConnect("Broker" + i, dest,
(BROKER_COUNT-1)+CONSUMER_COUNT, 30000);
+ }
// Send messages
for (int i = 1; i <= BROKER_COUNT; i++) {