You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2016/12/16 11:21:10 UTC
[2/2] qpid-jms git commit: QPIDJMS-235: fix up to ensure option
behaviour reflects no ClientID having been set,
add additional test to cover it,
make existing test stricter and remove duplicate
QPIDJMS-235: fix up to ensure option behaviour reflects no ClientID having been set, add additional test to cover it, make existing test stricter and remove duplicate
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/0f0cfba5
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/0f0cfba5
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/0f0cfba5
Branch: refs/heads/master
Commit: 0f0cfba5aeb825c75579bca8bb63024bb82a8fbc
Parents: 2e03565
Author: Robert Gemmell <ro...@apache.org>
Authored: Fri Dec 16 11:14:22 2016 +0000
Committer: Robert Gemmell <ro...@apache.org>
Committed: Fri Dec 16 11:14:22 2016 +0000
----------------------------------------------------------------------
.../java/org/apache/qpid/jms/JmsConnection.java | 2 +-
.../apache/qpid/jms/JmsConnectionFactory.java | 14 ++++--
.../apache/qpid/jms/meta/JmsConnectionInfo.java | 10 ++++
.../integration/ConnectionIntegrationTest.java | 23 +++------
.../SubscriptionsIntegrationTest.java | 49 ++++++++++++++++++++
.../qpid/jms/meta/JmsConnectionInfoTest.java | 3 ++
6 files changed, 78 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/0f0cfba5/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
index 2337260..d04d75d 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnection.java
@@ -166,7 +166,7 @@ public class JmsConnection implements AutoCloseable, Connection, TopicConnection
throw JmsExceptionSupport.create(ex);
}
- if (connectionInfo.isExplicitClientID()) {
+ if (connectionInfo.isExplicitClientID() || !connectionInfo.isAwaitClientID()) {
createJmsConnection();
}
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/0f0cfba5/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java
index 0101d11..5ff596e 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsConnectionFactory.java
@@ -245,8 +245,8 @@ public class JmsConnectionFactory extends JNDIStorable implements ConnectionFact
protected JmsConnectionInfo configureConnectionInfo(String username, String password) throws JMSException {
try {
Map<String, String> properties = PropertyUtil.getProperties(this);
- // We must ensure that we apply the clientID last, since setting it on
- // the Connection object provokes establishing the underlying connection.
+ // Pull out the clientID prop, we need to act differently according to
+ // whether it was set in the URI or not.
boolean userSpecifiedClientId = false;
if (properties.containsKey(CLIENT_ID_PROP)) {
userSpecifiedClientId = true;
@@ -266,16 +266,20 @@ public class JmsConnectionFactory extends JNDIStorable implements ConnectionFact
connectionInfo.setDeserializationPolicy(deserializationPolicy.copy());
connectionInfo.setSslContextOverride(sslContext);
+ // Set properties to make additional configuration changes
PropertyUtil.setProperties(connectionInfo, properties);
+
+ // Ensure we use the user and pass provided for this particular connection
connectionInfo.setUsername(username);
connectionInfo.setPassword(password);
+
connectionInfo.setConfiguredURI(remoteURI);
+
+ // Set the ClientID/container-id details
if (userSpecifiedClientId) {
connectionInfo.setClientId(clientID, true);
} else {
- // If we aren't waiting on a client ID then we just treat a generated Client ID as
- // the user specified version and connection open will commence.
- connectionInfo.setClientId(getClientIdGenerator().generateId(), !isAwaitClientID());
+ connectionInfo.setClientId(getClientIdGenerator().generateId(), false);
}
return connectionInfo;
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/0f0cfba5/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java
index 9f2175b..5af90e6 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/meta/JmsConnectionInfo.java
@@ -62,6 +62,7 @@ public final class JmsConnectionInfo implements JmsResource, Comparable<JmsConne
private boolean localMessageExpiry;
private boolean populateJMSXUserID;
private boolean useDaemonThread;
+ private boolean awaitClientID = true;
private long sendTimeout = DEFAULT_SEND_TIMEOUT;
private long requestTimeout = DEFAULT_REQUEST_TIMEOUT;
private long connectTimeout = DEFAULT_CONNECT_TIMEOUT;
@@ -95,6 +96,7 @@ public final class JmsConnectionInfo implements JmsResource, Comparable<JmsConne
private void copy(JmsConnectionInfo copy) {
copy.clientId = clientId;
copy.explicitClientID = explicitClientID;
+ copy.awaitClientID = awaitClientID;
copy.username = username;
copy.password = password;
copy.forceAsyncSend = forceAsyncSend;
@@ -369,6 +371,14 @@ public final class JmsConnectionInfo implements JmsResource, Comparable<JmsConne
this.useDaemonThread = useDaemonThread;
}
+ public boolean isAwaitClientID() {
+ return awaitClientID;
+ }
+
+ public void setAwaitClientID(boolean awaitClientID) {
+ this.awaitClientID = awaitClientID;
+ }
+
@Override
public String toString() {
return "JmsConnectionInfo { " + getId() +
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/0f0cfba5/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java
index 8cba29d..f66ca6d 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/ConnectionIntegrationTest.java
@@ -585,19 +585,10 @@ public class ConnectionIntegrationTest extends QpidJmsTestCase {
}
@Test(timeout = 20000)
- public void testWaitForClientIDBeforeOpen() throws Exception {
- doTestWaitForClientIDBeforeOpen(true);
- }
-
- @Test(timeout = 20000)
- public void testDonNotWaitForClientIDBeforeOpen() throws Exception {
- doTestWaitForClientIDBeforeOpen(false);
- }
-
- private void doTestWaitForClientIDBeforeOpen(boolean waitForClientID) throws Exception {
+ public void testDontAwaitClientIDBeforeOpen() throws Exception {
try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
- String uri = "amqp://localhost:" + testPeer.getServerPort() + "?jms.awaitClientID=" + waitForClientID;
+ String uri = "amqp://localhost:" + testPeer.getServerPort() + "?jms.awaitClientID=false";
testPeer.expectSaslAnonymous();
testPeer.expectOpen();
@@ -606,12 +597,10 @@ public class ConnectionIntegrationTest extends QpidJmsTestCase {
ConnectionFactory factory = new JmsConnectionFactory(uri);
Connection connection = factory.createConnection();
- // if configured to wait we set an ID to kick off the Open process.
- if (waitForClientID) {
- connection.setClientID("client-id");
- }
-
- testPeer.waitForAllHandlersToComplete(2000);
+ // Verify that all handlers complete, i.e. the awaitClientID=false option
+ // setting was effective in provoking the AMQP Open immediately even
+ // though it has no ClientID and we haven't used the Connection.
+ testPeer.waitForAllHandlersToComplete(3000);
testPeer.expectClose();
connection.close();
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/0f0cfba5/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SubscriptionsIntegrationTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SubscriptionsIntegrationTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SubscriptionsIntegrationTest.java
index 2fa2b9d..f1bd390 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SubscriptionsIntegrationTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SubscriptionsIntegrationTest.java
@@ -31,6 +31,7 @@ import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
import javax.jms.InvalidDestinationException;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
@@ -39,6 +40,7 @@ import javax.jms.Topic;
import javax.jms.TopicSubscriber;
import org.apache.qpid.jms.JmsConnection;
+import org.apache.qpid.jms.JmsConnectionFactory;
import org.apache.qpid.jms.JmsDefaultConnectionListener;
import org.apache.qpid.jms.provider.amqp.AmqpSupport;
import org.apache.qpid.jms.test.QpidJmsTestCase;
@@ -1582,4 +1584,51 @@ public class SubscriptionsIntegrationTest extends QpidJmsTestCase {
connection.close();
}
}
+
+ // -------------------------------------- //
+
+ @Test(timeout = 20000)
+ public void testSharedTopicSubscriberBehavesLikeNoClientIDWasSetWhenAwaitClientIdOptionIsFalse() throws Exception {
+ try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
+ int serverPort = testPeer.getServerPort();
+
+ // Add server connection capability to indicate support for shared-subs
+ Symbol[] serverCapabilities = new Symbol[]{SHARED_SUBS};
+
+ testPeer.expectSaslAnonymous();
+ testPeer.expectOpen(new Symbol[] { AmqpSupport.SOLE_CONNECTION_CAPABILITY }, serverCapabilities, null);
+ testPeer.expectBegin();
+
+ ConnectionFactory factory = new JmsConnectionFactory("amqp://localhost:" + serverPort + "?jms.awaitClientID=false");
+ Connection connection = factory.createConnection();
+
+ // Verify that all handlers complete, i.e. the awaitClientID=false option
+ // setting was effective in provoking the AMQP Open immediately even
+ // though it has no ClientID and we haven't used the Connection.
+ testPeer.waitForAllHandlersToComplete(3000);
+
+ testPeer.expectBegin();
+ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ String topicName = "myTopic";
+ Topic dest = session.createTopic(topicName);
+ String subscriptionName = "mySubscription";
+
+ // Expect a shared subscription with 'global' capability and link name qualifier,
+ // since this connection does not have a ClientID set.
+ Matcher<?> linkNameMatcher = equalTo(subscriptionName + SUB_NAME_DELIMITER + "global-volatile1");
+ testPeer.expectSharedVolatileSubscriberAttach(topicName, subscriptionName, linkNameMatcher, false);
+ testPeer.expectLinkFlow();
+
+ MessageConsumer subscriber = session.createSharedConsumer(dest, subscriptionName);
+
+ testPeer.expectDetach(true, true, true);
+ subscriber.close();
+
+ testPeer.expectClose();
+ connection.close();
+
+ testPeer.waitForAllHandlersToComplete(1000);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/0f0cfba5/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java
index 679c6f5..d39fca2 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/meta/JmsConnectionInfoTest.java
@@ -80,6 +80,8 @@ public class JmsConnectionInfoTest {
info.setUsername("user");
boolean validatePropertyNames = !info.isValidatePropertyNames();
info.setValidatePropertyNames(validatePropertyNames);
+ boolean awaitClientID = !info.isAwaitClientID();
+ info.setAwaitClientID(awaitClientID);
info.setMessageIDPolicy(new JmsDefaultMessageIDPolicy());
info.setPrefetchPolicy(new JmsDefaultPrefetchPolicy());
info.setPresettlePolicy(new JmsDefaultPresettlePolicy());
@@ -90,6 +92,7 @@ public class JmsConnectionInfoTest {
assertEquals(true, copy.isForceSyncSend());
assertEquals("test", copy.getClientId());
assertEquals(true, copy.isExplicitClientID());
+ assertEquals(awaitClientID, copy.isAwaitClientID());
assertEquals(100, copy.getCloseTimeout());
assertEquals(200, copy.getConnectTimeout());
assertEquals(true, copy.isForceAsyncSend());
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org