You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ce...@apache.org on 2013/02/17 01:05:42 UTC
svn commit: r1446979 -
/activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/DurableSubInBrokerNetworkTest.java
Author: ceposta
Date: Sun Feb 17 00:05:41 2013
New Revision: 1446979
URL: http://svn.apache.org/r1446979
Log:
Fix for https://issues.apache.org/jira/browse/AMQ-4000 Added test for multiple durable consumers across the network, per Gary's comments
Modified:
activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/DurableSubInBrokerNetworkTest.java
Modified: activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/DurableSubInBrokerNetworkTest.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/DurableSubInBrokerNetworkTest.java?rev=1446979&r1=1446978&r2=1446979&view=diff
==============================================================================
--- activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/DurableSubInBrokerNetworkTest.java (original)
+++ activemq/trunk/activemq-unit-tests/src/test/java/org/apache/activemq/usecases/DurableSubInBrokerNetworkTest.java Sun Feb 17 00:05:41 2013
@@ -26,8 +26,6 @@ import javax.jms.TopicSubscriber;
import javax.management.ObjectName;
-import junit.framework.Assert;
-
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.network.DiscoveryNetworkConnector;
import org.apache.activemq.network.NetworkConnector;
@@ -46,6 +44,7 @@ public class DurableSubInBrokerNetworkTe
private static final Logger LOG = LoggerFactory.getLogger(NetworkConnector.class);
// protected BrokerService localBroker;
private final String subName = "Subscriber1";
+ private final String subName2 = "Subscriber2";
private final String topicName = "TEST.FOO";
protected void setUp() throws Exception {
@@ -94,22 +93,11 @@ public class DurableSubInBrokerNetworkTe
// query durable sub on local and remote broker
// raise an error if not found
- boolean foundSub = false;
- ObjectName[] subs = broker.getAdminView().getDurableTopicSubscribers();
-
- for (int i=0 ; i<subs.length; i++) {
- if (subs[i].toString().contains(subName))
- foundSub = true;
- }
- Assert.assertTrue(foundSub);
- foundSub = false;
- subs = remoteBroker.getAdminView().getDurableTopicSubscribers();
- for (int i=0 ; i<subs.length; i++) {
- if (subs[i].toString().contains("destinationName=" + topicName))
- foundSub = true;
- }
- Assert.assertTrue(foundSub);
+ assertTrue(foundSubInLocalBroker(subName));
+
+
+ assertTrue(foundSubInRemoteBrokerByTopicName(topicName));
// unsubscribe from durable sub
sub.close();
@@ -119,22 +107,71 @@ public class DurableSubInBrokerNetworkTe
// query durable sub on local and remote broker
// raise an error if its not removed from both brokers
- foundSub = false;
- subs = broker.getAdminView().getDurableTopicSubscribers();
- for (int i=0 ; i<subs.length; i++) {
- if (subs[i].toString().contains(subName))
- foundSub = true;
- }
- Assert.assertFalse(foundSub);
+ assertFalse(foundSubInLocalBroker(subName));
+
+ assertFalse("Durable subscription not unregistered on remote broker",
+ foundSubInRemoteBrokerByTopicName(topicName));
+
+
+ }
+
+ public void testTwoDurableSubsInNetworkWithUnsubscribe() throws Exception{
- foundSub = false;
- subs = remoteBroker.getAdminView().getDurableTopicSubscribers();
+ // create 1st durable sub to topic TEST.FOO
+ ActiveMQConnectionFactory fact = new ActiveMQConnectionFactory(connector.getConnectUri().toString());
+ Connection conn = fact.createConnection();
+ conn.setClientID("clientID1");
+ Session session = conn.createSession(false, 1);
+ Destination dest = session.createTopic(topicName);
+ TopicSubscriber sub = session.createDurableSubscriber((Topic)dest, subName);
+ LOG.info("Durable subscription of name " + subName + "created.");
+ TopicSubscriber sub2 = session.createDurableSubscriber((Topic) dest, subName2);
+ LOG.info("Durable subscription of name " + subName2 + "created.");
+
+ Thread.sleep(100);
+
+ // query durable sub on local and remote broker
+ // raise an error if not found
+
+ assertTrue(foundSubInLocalBroker(subName));
+ assertTrue(foundSubInLocalBroker(subName2));
+
+
+ assertTrue(foundSubInRemoteBrokerByTopicName(topicName));
+
+ // unsubscribe from durable sub
+ sub.close();
+ session.unsubscribe(subName);
+ LOG.info("Unsubscribed from durable subscription.");
+ Thread.sleep(100);
+
+ // query durable sub on local and remote broker
+ assertFalse(foundSubInLocalBroker(subName));
+ assertTrue(foundSubInLocalBroker(subName2));
+
+ assertTrue("Durable subscription should still be on remote broker",
+ foundSubInRemoteBrokerByTopicName(topicName));
+
+ }
+
+ private boolean foundSubInRemoteBrokerByTopicName(String topicName) throws Exception {
+ boolean foundSub = false;
+ ObjectName[] subs = remoteBroker.getAdminView().getDurableTopicSubscribers();
for (int i=0 ; i<subs.length; i++) {
if (subs[i].toString().contains("destinationName=" + topicName))
foundSub = true;
}
- Assert.assertFalse("Durable subscription not unregistered on remote broker", foundSub);
+ return foundSub;
+ }
+ private boolean foundSubInLocalBroker(String subName) throws Exception {
+ boolean foundSub = false;
+ ObjectName[] subs = broker.getAdminView().getDurableTopicSubscribers();
+ for (int i=0 ; i<subs.length; i++) {
+ if (subs[i].toString().contains(subName))
+ foundSub = true;
+ }
+ return foundSub;
}
}