Repository: qpid-jms
Updated Branches:
  refs/heads/master 8a6666650 -> 1f764abed


QPIDJMS-68: add support for disabling use of a SASL layer on connections


Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/d5f91e8b
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/d5f91e8b
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/d5f91e8b

Branch: refs/heads/master
Commit: d5f91e8bc2e91b3a126efadc3f6fdc59d7815f84
Parents: 8a66666
Author: Robert Gemmell <[email protected]>
Authored: Mon Jun 15 11:35:36 2015 +0100
Committer: Robert Gemmell <[email protected]>
Committed: Mon Jun 15 11:35:36 2015 +0100

----------------------------------------------------------------------
 .../qpid/jms/provider/amqp/AmqpProvider.java    | 19 ++++++++++++--
 .../jms/integration/SaslIntegrationTest.java    | 21 +++++++++++++++
 .../qpid/jms/test/testpeer/TestAmqpPeer.java    | 27 +++++++++++++++-----
 3 files changed, 59 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d5f91e8b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpProvider.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpProvider.java
 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpProvider.java
index cd6fcc2..0286925 100644
--- 
a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpProvider.java
+++ 
b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/AmqpProvider.java
@@ -107,6 +107,7 @@ public class AmqpProvider implements Provider, 
TransportListener {
     private String vhost;
     private boolean traceFrames;
     private boolean traceBytes;
+    private boolean saslLayer = true;
     private boolean presettleConsumers;
     private boolean presettleProducers;
     private long connectTimeout = JmsConnectionInfo.DEFAULT_CONNECT_TIMEOUT;
@@ -270,8 +271,9 @@ public class AmqpProvider implements Provider, 
TransportListener {
                             protonTransport.setIdleTimeout(idleTimeout);
                             protonTransport.bind(protonConnection);
                             protonConnection.collect(protonCollector);
-                            Sasl sasl = protonTransport.sasl();
-                            if (sasl != null) {
+                            Sasl sasl = null;
+                            if (saslLayer) {
+                                sasl = protonTransport.sasl();
                                 sasl.client();
 
                                 String hostname = getVhost();
@@ -888,6 +890,19 @@ public class AmqpProvider implements Provider, 
TransportListener {
         return this.traceBytes;
     }
 
+    public boolean isSaslLayer() {
+        return saslLayer;
+    }
+
+    /**
+     * Sets whether a sasl layer is used for the connection or not.
+     *
+     * @param saslLayer true to enable the sasl layer, false to disable it.
+     */
+    public void setSaslLayer(boolean saslLayer) {
+        this.saslLayer = saslLayer;
+    }
+
     public String getVhost() {
         return vhost;
     }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d5f91e8b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java
 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java
index e731a9c..7ac5533 100644
--- 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java
+++ 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/integration/SaslIntegrationTest.java
@@ -224,4 +224,25 @@ public class SaslIntegrationTest extends QpidJmsTestCase {
             testPeer.waitForAllHandlersToComplete(1000);
         }
     }
+
+    @Test(timeout = 5000)
+    public void testSaslLayerDisabledConnection() throws Exception {
+        try (TestAmqpPeer testPeer = new TestAmqpPeer();) {
+            // Expect a connection with no SASL layer.
+            testPeer.expectSaslLayerDisabledConnect();
+            // Each connection creates a session for managing temporary 
destinations etc
+            testPeer.expectBegin(true);
+
+            ConnectionFactory factory = new 
JmsConnectionFactory("amqp://localhost:" + testPeer.getServerPort() + 
"?amqp.saslLayer=false");
+            Connection connection = factory.createConnection();
+            // Set a clientID to provoke the actual AMQP connection process to 
occur.
+            connection.setClientID("clientName");
+
+            testPeer.waitForAllHandlersToComplete(1000);
+            assertNull(testPeer.getThrowable());
+
+            testPeer.expectClose();
+            connection.close();
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d5f91e8b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
----------------------------------------------------------------------
diff --git 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
index cbfe514..312c111 100644
--- 
a/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
+++ 
b/qpid-jms-client/src/test/java/org/apache/qpid/jms/test/testpeer/TestAmqpPeer.java
@@ -389,6 +389,27 @@ public class TestAmqpPeer implements AutoCloseable
         addHandler(saslInitMatcher);
     }
 
+    /**
+     * Expect a connection that does not use a SASL layer, but proceeds 
straight
+     * to the AMQP connection (useful to skip a stage for connections that 
don't
+     * require SASL, e.g. because of anonymous or client certificate 
authentication).
+     */
+    public void expectSaslLayerDisabledConnect()
+    {
+        addHandler(new HeaderHandlerImpl(AmqpHeader.HEADER, 
AmqpHeader.HEADER));
+
+        OpenFrame openFrame = createOpenFrame();
+
+        OpenMatcher openMatcher = new OpenMatcher()
+            .withContainerId(notNullValue(String.class))
+            .onSuccess(new FrameSender(
+                    this, FrameType.AMQP, 0,
+                    openFrame,
+                    null));
+
+        addHandler(openMatcher);
+    }
+
     public void expectAnonymousConnect(boolean authorize)
     {
         expectAnonymousConnect(authorize, null, null);
@@ -627,12 +648,6 @@ public class TestAmqpPeer implements AutoCloseable
         addHandler(closeMatcher);
     }
 
-    public void expectHeaderAndOpen()
-    {
-        addHandler(new HeaderHandlerImpl(AmqpHeader.HEADER, 
AmqpHeader.HEADER));
-        addHandler(new OpenMatcher());
-    }
-
     public void expectBegin(boolean expectSessionFlow)
     {
         final BeginMatcher beginMatcher = new BeginMatcher()


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to