You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2018/01/04 23:44:12 UTC

[4/4] qpid-broker-j git commit: QPID-6933: [System Tests] Refactor TLS tests as JMS 1.1 system test

QPID-6933: [System Tests] Refactor TLS tests as JMS 1.1 system test


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/0904d669
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/0904d669
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/0904d669

Branch: refs/heads/master
Commit: 0904d6691a0599de0f2f679439bfc4ccadb5d8a5
Parents: 99fa51f
Author: Alex Rudyy <or...@apache.org>
Authored: Thu Jan 4 22:21:07 2018 +0000
Committer: Alex Rudyy <or...@apache.org>
Committed: Thu Jan 4 23:43:53 2018 +0000

----------------------------------------------------------------------
 .../qpid/systests/AmqpManagementFacade.java     | 186 ++++-
 .../apache/qpid/systests/ConnectionBuilder.java |   6 +
 .../org/apache/qpid/systests/JmsTestBase.java   |  75 +-
 .../QpidJmsClient0xConnectionBuilder.java       |  87 ++-
 .../QpidJmsClientConnectionBuilder.java         |  42 +
 systests/qpid-systests-jms_1.1/pom.xml          |  24 +
 .../queue/ProducerFlowControlTest.java          |   4 +-
 .../jms_1_1/extensions/tls/TlsTest.java         | 694 +++++++++++++++++
 .../qpid/test/utils/QpidBrokerTestCase.java     |   2 +-
 .../org/apache/qpid/client/ssl/SSLTest.java     | 769 -------------------
 .../queue/NodeAutoCreationPolicyTest.java       |  12 +-
 .../queue/QueueMessageDurabilityTest.java       |   8 +-
 .../server/routing/ExchangeRoutingTest.java     |  10 +-
 .../security/acl/AbstractACLTestCase.java       |   2 +-
 .../apache/qpid/systest/MessageRoutingTest.java |   2 +-
 test-profiles/CPPExcludes                       |   5 -
 test-profiles/Excludes                          |   2 -
 test-profiles/Java10Excludes                    |  16 -
 test-profiles/JavaPre010Excludes                |   3 -
 test-profiles/cpp.ssl.excludes                  |   3 -
 20 files changed, 1097 insertions(+), 855 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0904d669/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/AmqpManagementFacade.java
----------------------------------------------------------------------
diff --git a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/AmqpManagementFacade.java b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/AmqpManagementFacade.java
index 39707eb..7f789c6 100644
--- a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/AmqpManagementFacade.java
+++ b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/AmqpManagementFacade.java
@@ -29,6 +29,7 @@ import java.util.Map;
 import java.util.TreeMap;
 
 import javax.jms.BytesMessage;
+import javax.jms.Destination;
 import javax.jms.JMSException;
 import javax.jms.MapMessage;
 import javax.jms.Message;
@@ -42,13 +43,20 @@ import javax.jms.TemporaryQueue;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
+import org.apache.qpid.server.model.Protocol;
+
 public class AmqpManagementFacade
 {
+    private static final String AMQP_0_X_REPLY_TO_DESTINATION = "ADDR:!response";
+    private static final String AMQP_0_X_CONSUMER_REPLY_DESTINATION =
+            "ADDR:$management ; {assert : never, node: { type: queue }, link:{name: \"!response\"}}";
     private final String _managementAddress;
+    private final Protocol _protocol;
 
-    public AmqpManagementFacade(final String managementAddress)
+    public AmqpManagementFacade(final Protocol protocol)
     {
-        _managementAddress = managementAddress;
+        _managementAddress = protocol == Protocol.AMQP_1_0 ? "$management" : "ADDR:$management";
+        _protocol = protocol;
     }
 
     public void createEntityUsingAmqpManagement(final String name, final Session session, final String type)
@@ -82,6 +90,96 @@ public class AmqpManagementFacade
         producer.close();
     }
 
+    public Map<String, Object> createEntityAndAssertResponse(final String name,
+                                            final String type,
+                                            final Map<String, Object> attributes,
+                                            final Session session)
+            throws JMSException
+    {
+        Destination replyToDestination;
+        Destination replyConsumerDestination;
+        if (_protocol == Protocol.AMQP_1_0)
+        {
+            replyToDestination = session.createTemporaryQueue();
+            replyConsumerDestination = replyToDestination;
+        }
+        else
+        {
+            replyToDestination = session.createQueue(AMQP_0_X_REPLY_TO_DESTINATION);
+            replyConsumerDestination = session.createQueue(AMQP_0_X_CONSUMER_REPLY_DESTINATION);
+        }
+
+        MessageConsumer consumer = session.createConsumer(replyConsumerDestination);
+
+        MessageProducer producer = session.createProducer(session.createQueue(_managementAddress));
+
+        MapMessage createMessage = session.createMapMessage();
+        createMessage.setStringProperty("type", type);
+        createMessage.setStringProperty("operation", "CREATE");
+        createMessage.setString("name", name);
+        createMessage.setString("object-path", name);
+        createMessage.setJMSReplyTo(replyToDestination);
+        for (Map.Entry<String, Object> entry : attributes.entrySet())
+        {
+            createMessage.setObject(entry.getKey(), entry.getValue());
+        }
+        producer.send(createMessage);
+        if (session.getTransacted())
+        {
+            session.commit();
+        }
+        producer.close();
+
+        Message response = consumer.receive(5000);
+        try
+        {
+            if (response != null)
+            {
+                int statusCode = response.getIntProperty("statusCode");
+                if (statusCode == 201)
+                {
+                    if (response instanceof MapMessage)
+                    {
+                        MapMessage bodyMap = (MapMessage) response;
+                        Map<String, Object> result = new HashMap<>();
+                        Enumeration keys = bodyMap.getMapNames();
+                        while (keys.hasMoreElements())
+                        {
+                            final String key = String.valueOf(keys.nextElement());
+                            Object value = bodyMap.getObject(key);
+                            result.put(key, value);
+                        }
+                        return result;
+                    }
+                    else if (response instanceof ObjectMessage)
+                    {
+                        Object body = ((ObjectMessage) response).getObject();
+                        if (body instanceof Map)
+                        {
+                            @SuppressWarnings("unchecked")
+                            Map<String, Object> bodyMap = (Map<String, Object>) body;
+                            return new HashMap<>(bodyMap);
+                        }
+                    }
+                }
+                else
+                {
+                    throw new OperationUnsuccessfulException(response.getStringProperty("statusDescription"), statusCode);
+                }
+            }
+
+            throw new IllegalArgumentException("Cannot parse the results from a management query");
+        }
+        finally
+        {
+            consumer.close();
+            if (_protocol == Protocol.AMQP_1_0)
+            {
+                ((TemporaryQueue) replyToDestination).delete();
+            }
+        }
+    }
+
     public void updateEntityUsingAmqpManagement(final String name,
                                                 final Session session,
                                                 final String type,
@@ -132,14 +230,28 @@ public class AmqpManagementFacade
                                                       Map<String, Object> arguments)
             throws JMSException
     {
+        Destination replyToDestination;
+        Destination replyConsumerDestination;
+        if (_protocol == Protocol.AMQP_1_0)
+        {
+            replyToDestination = session.createTemporaryQueue();
+            replyConsumerDestination = replyToDestination;
+        }
+        else
+        {
+            replyToDestination = session.createQueue(AMQP_0_X_REPLY_TO_DESTINATION);
+            replyConsumerDestination = session.createQueue(AMQP_0_X_CONSUMER_REPLY_DESTINATION);
+        }
+
+        MessageConsumer consumer = session.createConsumer(replyConsumerDestination);
+
         MessageProducer producer = session.createProducer(session.createQueue(_managementAddress));
-        final TemporaryQueue responseQ = session.createTemporaryQueue();
-        MessageConsumer consumer = session.createConsumer(responseQ);
+
         MapMessage opMessage = session.createMapMessage();
         opMessage.setStringProperty("type", type);
         opMessage.setStringProperty("operation", operation);
         opMessage.setStringProperty("index", "object-path");
-        opMessage.setJMSReplyTo(responseQ);
+        opMessage.setJMSReplyTo(replyToDestination);
 
         opMessage.setStringProperty("key", name);
         for (Map.Entry<String, Object> argument : arguments.entrySet())
@@ -179,7 +291,7 @@ public class AmqpManagementFacade
             int statusCode = response.getIntProperty("statusCode");
             if (statusCode < 200 || statusCode > 299)
             {
-                throw new OperationUnsuccessfulException(statusCode);
+                throw new OperationUnsuccessfulException(response.getStringProperty("statusDescription"), statusCode);
             }
             if (response instanceof MapMessage)
             {
@@ -221,24 +333,39 @@ public class AmqpManagementFacade
                 session.commit();
             }
             consumer.close();
-            responseQ.delete();
+            if(_protocol == Protocol.AMQP_1_0)
+            {
+                ((TemporaryQueue)replyToDestination).delete();
+            }
         }
     }
 
     public List<Map<String, Object>> managementQueryObjects(final Session session, final String type)
             throws JMSException
     {
-        MessageProducer producer = session.createProducer(session.createQueue("$management"));
-        final TemporaryQueue responseQ = session.createTemporaryQueue();
-        MessageConsumer consumer = session.createConsumer(responseQ);
+        Destination replyToDestination;
+        Destination replyConsumerDestination;
+        if(_protocol == Protocol.AMQP_1_0)
+        {
+            replyToDestination = session.createTemporaryQueue();
+            replyConsumerDestination = replyToDestination;
+        }
+        else
+        {
+            replyToDestination = session.createQueue(AMQP_0_X_REPLY_TO_DESTINATION);
+            replyConsumerDestination = session.createQueue(AMQP_0_X_CONSUMER_REPLY_DESTINATION);
+        }
+
+        MessageConsumer consumer = session.createConsumer(replyConsumerDestination);
         MapMessage message = session.createMapMessage();
         message.setStringProperty("identity", "self");
         message.setStringProperty("type", "org.amqp.management");
         message.setStringProperty("operation", "QUERY");
         message.setStringProperty("entityType", type);
         message.setString("attributeNames", "[]");
-        message.setJMSReplyTo(responseQ);
+        message.setJMSReplyTo(replyToDestination);
 
+        MessageProducer producer = session.createProducer(session.createQueue(_managementAddress));
         producer.send(message);
 
         Message response = consumer.receive(5000);
@@ -267,7 +394,10 @@ public class AmqpManagementFacade
         finally
         {
             consumer.close();
-            responseQ.delete();
+            if(_protocol == Protocol.AMQP_1_0)
+            {
+                ((TemporaryQueue)replyToDestination).delete();
+            }
         }
     }
 
@@ -276,10 +406,23 @@ public class AmqpManagementFacade
                                                              final String name,
                                                              final boolean actuals) throws JMSException
     {
+        Destination replyToDestination;
+        Destination replyConsumerDestination;
+        if(_protocol == Protocol.AMQP_1_0)
+        {
+            replyToDestination = session.createTemporaryQueue();
+            replyConsumerDestination = replyToDestination;
+        }
+        else
+        {
+            replyToDestination = session.createQueue(AMQP_0_X_REPLY_TO_DESTINATION);
+            replyConsumerDestination = session.createQueue(AMQP_0_X_CONSUMER_REPLY_DESTINATION);
+        }
+
+        MessageConsumer consumer = session.createConsumer(replyConsumerDestination);
+
         MessageProducer producer = session.createProducer(session.createQueue(_managementAddress));
 
-        final TemporaryQueue responseQueue = session.createTemporaryQueue();
-        MessageConsumer consumer = session.createConsumer(responseQueue);
 
         MapMessage request = session.createMapMessage();
         request.setStringProperty("type", type);
@@ -289,7 +432,7 @@ public class AmqpManagementFacade
         request.setStringProperty("index", "object-path");
         request.setStringProperty("key", name);
         request.setBooleanProperty("actuals", actuals);
-        request.setJMSReplyTo(responseQueue);
+        request.setJMSReplyTo(replyToDestination);
 
         producer.send(request);
         if (session.getTransacted())
@@ -308,6 +451,7 @@ public class AmqpManagementFacade
             {
                 MapMessage bodyMap = (MapMessage) response;
                 Map<String, Object> data = new HashMap<>();
+                @SuppressWarnings("unchecked")
                 Enumeration<String> keys = bodyMap.getMapNames();
                 while (keys.hasMoreElements())
                 {
@@ -321,6 +465,7 @@ public class AmqpManagementFacade
                 Object body = ((ObjectMessage) response).getObject();
                 if (body instanceof Map)
                 {
+                    @SuppressWarnings("unchecked")
                     Map<String, ?> bodyMap = (Map<String, ?>) body;
                     return new HashMap<>(bodyMap);
                 }
@@ -333,7 +478,10 @@ public class AmqpManagementFacade
         finally
         {
             consumer.close();
-            responseQueue.delete();
+            if(_protocol == Protocol.AMQP_1_0)
+            {
+                ((TemporaryQueue)replyToDestination).delete();
+            }
         }
     }
 
@@ -347,7 +495,7 @@ public class AmqpManagementFacade
                                                                 session,
                                                                 "org.apache.qpid.Queue",
                                                                 arguments);
-
+        @SuppressWarnings("unchecked")
         Map<String, Object> statisticsMap = (Map<String, Object>) statistics;
         return ((Number) statisticsMap.get("queueDepthMessages")).intValue();
     }
@@ -402,9 +550,9 @@ public class AmqpManagementFacade
     {
         private final int _statusCode;
 
-        private OperationUnsuccessfulException(final int statusCode)
+        private OperationUnsuccessfulException(final String message, final int statusCode)
         {
-            super();
+            super(message == null ? String.format("Unexpected status code %d", statusCode): message);
             _statusCode = statusCode;
         }
 

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0904d669/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/ConnectionBuilder.java
----------------------------------------------------------------------
diff --git a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/ConnectionBuilder.java b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/ConnectionBuilder.java
index 92454e9..e0bb609 100644
--- a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/ConnectionBuilder.java
+++ b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/ConnectionBuilder.java
@@ -49,6 +49,12 @@ public interface ConnectionBuilder
     ConnectionBuilder setMessageRedelivery(final boolean redelivery);
     ConnectionBuilder setDeserializationPolicyWhiteList(String whiteList);
     ConnectionBuilder setDeserializationPolicyBlackList(String blackList);
+    ConnectionBuilder setKeyStoreLocation(String keyStoreLocation);
+    ConnectionBuilder setKeyStorePassword(String keyStorePassword);
+    ConnectionBuilder setTrustStoreLocation(String trustStoreLocation);
+    ConnectionBuilder setTrustStorePassword(String trustStorePassword);
+    ConnectionBuilder setVerifyHostName(boolean verifyHostName);
+    ConnectionBuilder setKeyAlias(String alias);
 
     Connection build() throws NamingException, JMSException;
     ConnectionFactory buildConnectionFactory() throws NamingException;

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0904d669/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/JmsTestBase.java
----------------------------------------------------------------------
diff --git a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/JmsTestBase.java b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/JmsTestBase.java
index a5c9553..c94ed67 100644
--- a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/JmsTestBase.java
+++ b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/JmsTestBase.java
@@ -26,6 +26,7 @@ import static org.junit.Assert.assertTrue;
 import java.net.InetSocketAddress;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.List;
 import java.util.Map;
 
 import javax.jms.Connection;
@@ -55,14 +56,14 @@ public abstract class JmsTestBase extends BrokerAdminUsingTestBase
     @BeforeClass
     public static void setUpTestBase()
     {
-        if ("1.0".equals(System.getProperty("broker.version", "1.0")))
+        Protocol protocol = getProtocol();
+        _managementFacade = new AmqpManagementFacade(protocol);
+        if (protocol == Protocol.AMQP_1_0)
         {
-            _managementFacade = new AmqpManagementFacade("$management");
             _jmsProvider = new QpidJmsClientProvider(_managementFacade);
         }
         else
         {
-            _managementFacade = new AmqpManagementFacade("ADDR:$management");
             _jmsProvider = new QpidJmsClient0xProvider();
         }
     }
@@ -119,7 +120,7 @@ public abstract class JmsTestBase extends BrokerAdminUsingTestBase
         return getConnectionBuilder().build();
     }
 
-    protected long getReceiveTimeout()
+    protected static long getReceiveTimeout()
     {
         return Long.getLong("qpid.test_receive_timeout", 1000L);
     }
@@ -236,21 +237,14 @@ public abstract class JmsTestBase extends BrokerAdminUsingTestBase
         }
     }
 
-    protected Map<String, Object> readEntityUsingAmqpManagement(String type, String name, boolean actuals) throws Exception
+    protected Map<String, Object> readEntityUsingAmqpManagement(String name, String type, boolean actuals)
+            throws Exception
     {
         Connection connection = getConnection();
         try
         {
             connection.start();
-            Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-            try
-            {
-                return _managementFacade.readEntityUsingAmqpManagement(session, type, name, actuals);
-            }
-            finally
-            {
-                session.close();
-            }
+            return readEntityUsingAmqpManagement(name, type, actuals, connection);
         }
         finally
         {
@@ -258,13 +252,62 @@ public abstract class JmsTestBase extends BrokerAdminUsingTestBase
         }
     }
 
+    protected Map<String, Object> readEntityUsingAmqpManagement(final String name,
+                                                                final String type,
+                                                                final boolean actuals,
+                                                                final Connection connection)
+            throws JMSException
+    {
+        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        try
+        {
+            return _managementFacade.readEntityUsingAmqpManagement(session, type, name, actuals);
+        }
+        finally
+        {
+            session.close();
+        }
+    }
+
+    protected List<Map<String, Object>> queryEntitiesUsingAmqpManagement(final String type, final Connection connection)
+            throws JMSException
+    {
+        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        try
+        {
+            return _managementFacade.managementQueryObjects(session, type);
+        }
+        finally
+        {
+            session.close();
+        }
+    }
+
+    protected Map<String, Object> createEntity(final String entityName,
+                                               final String entityType,
+                                               final Map<String, Object> attributes, final Connection connection)
+            throws Exception
+    {
+        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        try
+        {
+            return _managementFacade.createEntityAndAssertResponse(entityName, entityType, attributes, session);
+        }
+        finally
+        {
+            session.close();
+        }
+    }
+
     protected TopicConnection getTopicConnection() throws JMSException, NamingException
     {
         return (TopicConnection) getConnection();
     }
 
-    public Protocol getProtocol()
+    protected static Protocol getProtocol()
     {
-        return Protocol.valueOf("AMQP_" + System.getProperty("broker.version", "0-9-1").replace('-', '_').replace('.', '_'));
+        return Protocol.valueOf("AMQP_" + System.getProperty("broker.version", "0-9-1")
+                                                .replace('-', '_')
+                                                .replace('.', '_'));
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0904d669/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClient0xConnectionBuilder.java
----------------------------------------------------------------------
diff --git a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClient0xConnectionBuilder.java b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClient0xConnectionBuilder.java
index eeb82ac..539f12e 100644
--- a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClient0xConnectionBuilder.java
+++ b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClient0xConnectionBuilder.java
@@ -20,6 +20,9 @@
 
 package org.apache.qpid.systests;
 
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.TreeMap;
@@ -44,6 +47,12 @@ public class QpidJmsClient0xConnectionBuilder implements ConnectionBuilder
     private String _host = "localhost";
     private int _port;
     private int _sslPort;
+    private String _keyStoreLocation;
+    private String _keyStorePassword;
+    private String _trustStoreLocation;
+    private String _trustStorePassword;
+    private Boolean _verifyHostName;
+    private String _keyAlias;
 
     @Override
     public ConnectionBuilder setHost(final String host)
@@ -179,6 +188,48 @@ public class QpidJmsClient0xConnectionBuilder implements ConnectionBuilder
     }
 
     @Override
+    public ConnectionBuilder setKeyStoreLocation(final String keyStoreLocation)
+    {
+        _keyStoreLocation = keyStoreLocation;
+        return this;
+    }
+
+    @Override
+    public ConnectionBuilder setKeyStorePassword(final String keyStorePassword)
+    {
+        _keyStorePassword = keyStorePassword;
+        return this;
+    }
+
+    @Override
+    public ConnectionBuilder setTrustStoreLocation(final String trustStoreLocation)
+    {
+        _trustStoreLocation = trustStoreLocation;
+        return this;
+    }
+
+    @Override
+    public ConnectionBuilder setTrustStorePassword(final String trustStorePassword)
+    {
+        _trustStorePassword = trustStorePassword;
+        return this;
+    }
+
+    @Override
+    public ConnectionBuilder setVerifyHostName(final boolean verifyHostName)
+    {
+        _verifyHostName = verifyHostName;
+        return this;
+    }
+
+    @Override
+    public ConnectionBuilder setKeyAlias(final String alias)
+    {
+        _keyAlias = alias;
+        return this;
+    }
+
+    @Override
     public Connection build() throws JMSException, NamingException
     {
         return buildConnectionFactory().createConnection(_username, _password);
@@ -224,6 +275,30 @@ public class QpidJmsClient0xConnectionBuilder implements ConnectionBuilder
         if (_enableTls)
         {
             cUrlBuilder.append(_sslPort).append("?ssl='true'");
+            if (_keyStoreLocation != null)
+            {
+                cUrlBuilder.append("&key_store='").append(encodePathOption(_keyStoreLocation)).append('\'');
+            }
+            if (_keyStorePassword != null)
+            {
+                cUrlBuilder.append("&key_store_password='").append(_keyStorePassword).append('\'');
+            }
+            if (_trustStoreLocation != null)
+            {
+                cUrlBuilder.append("&trust_store='").append(encodePathOption(_trustStoreLocation)).append('\'');
+            }
+            if (_trustStorePassword != null)
+            {
+                cUrlBuilder.append("&trust_store_password='").append(_trustStorePassword).append('\'');
+            }
+            if (_verifyHostName != null)
+            {
+                cUrlBuilder.append("&ssl_verify_hostname='").append(_verifyHostName).append('\'');
+            }
+            if (_keyAlias != null)
+            {
+                cUrlBuilder.append("&ssl_cert_alias='").append(_keyAlias).append('\'');
+            }
         }
         else
         {
@@ -272,8 +347,16 @@ public class QpidJmsClient0xConnectionBuilder implements ConnectionBuilder
         }
     }
 
-    String getBrokerDetails()
+    private String encodePathOption(final String canonicalPath)
     {
-        return "tcp://" + _host + ":" + _port;
+        try
+        {
+            return URLEncoder.encode(URLEncoder.encode(canonicalPath, StandardCharsets.UTF_8.name()).replace("+", "%20"),
+                                     StandardCharsets.UTF_8.name());
+        }
+        catch (UnsupportedEncodingException e)
+        {
+            throw new RuntimeException(e);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0904d669/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClientConnectionBuilder.java
----------------------------------------------------------------------
diff --git a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClientConnectionBuilder.java b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClientConnectionBuilder.java
index 2db1746..9adf0fa 100644
--- a/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClientConnectionBuilder.java
+++ b/systests/qpid-systests-jms-core/src/main/java/org/apache/qpid/systests/QpidJmsClientConnectionBuilder.java
@@ -193,6 +193,48 @@ public class QpidJmsClientConnectionBuilder implements ConnectionBuilder
     }
 
     @Override
+    public ConnectionBuilder setKeyStoreLocation(final String keyStoreLocation)
+    {
+        _options.put("transport.keyStoreLocation", keyStoreLocation);
+        return this;
+    }
+
+    @Override
+    public ConnectionBuilder setKeyStorePassword(final String keyStorePassword)
+    {
+        _options.put("transport.keyStorePassword", keyStorePassword);
+        return this;
+    }
+
+    @Override
+    public ConnectionBuilder setTrustStoreLocation(final String trustStoreLocation)
+    {
+        _options.put("transport.trustStoreLocation", trustStoreLocation);
+        return this;
+    }
+
+    @Override
+    public ConnectionBuilder setTrustStorePassword(final String trustStorePassword)
+    {
+        _options.put("transport.trustStorePassword", trustStorePassword);
+        return this;
+    }
+
+    @Override
+    public ConnectionBuilder setVerifyHostName(final boolean verifyHostName)
+    {
+        _options.put("transport.verifyHost", verifyHostName);
+        return this;
+    }
+
+    @Override
+    public ConnectionBuilder setKeyAlias(final String alias)
+    {
+        _options.put("transport.keyAlias", alias);
+        return this;
+    }
+
+    @Override
     public Connection build() throws NamingException, JMSException
     {
         return buildConnectionFactory().createConnection();

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0904d669/systests/qpid-systests-jms_1.1/pom.xml
----------------------------------------------------------------------
diff --git a/systests/qpid-systests-jms_1.1/pom.xml b/systests/qpid-systests-jms_1.1/pom.xml
index b853c1f..cc07920 100644
--- a/systests/qpid-systests-jms_1.1/pom.xml
+++ b/systests/qpid-systests-jms_1.1/pom.xml
@@ -104,6 +104,30 @@
                     </systemPropertyVariables>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <id>copy-test-profile-resources</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${java.io.tmpdir}</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>${project.basedir}/../..</directory>
+                                    <includes>
+                                        <include>test-profiles/</include>
+                                    </includes>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
     </build>
 

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0904d669/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/queue/ProducerFlowControlTest.java
----------------------------------------------------------------------
diff --git a/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/queue/ProducerFlowControlTest.java b/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/queue/ProducerFlowControlTest.java
index 6f76755..c7362ff 100644
--- a/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/queue/ProducerFlowControlTest.java
+++ b/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/queue/ProducerFlowControlTest.java
@@ -407,7 +407,7 @@ public class ProducerFlowControlTest extends JmsTestBase
 
     private boolean isFlowStopped(final String queueName) throws Exception
     {
-        Map<String, Object> attributes = readEntityUsingAmqpManagement("org.apache.qpid.Queue", queueName, false);
+        Map<String, Object> attributes = readEntityUsingAmqpManagement(queueName, "org.apache.qpid.Queue", false);
         return Boolean.TRUE.equals(attributes.get("queueFlowStopped"));
     }
 
@@ -467,7 +467,7 @@ public class ProducerFlowControlTest extends JmsTestBase
         boolean found = false;
         do
         {
-            Map<String, Object> attributes = readEntityUsingAmqpManagement("org.apache.qpid.Queue", queueName, false);
+            Map<String, Object> attributes = readEntityUsingAmqpManagement(queueName, "org.apache.qpid.Queue", false);
             Object actualValue = attributes.get(attributeName);
             if (expectedValue == null)
             {

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0904d669/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/tls/TlsTest.java
----------------------------------------------------------------------
diff --git a/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/tls/TlsTest.java b/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/tls/TlsTest.java
new file mode 100644
index 0000000..e10aecb
--- /dev/null
+++ b/systests/qpid-systests-jms_1.1/src/test/java/org/apache/qpid/systests/jms_1_1/extensions/tls/TlsTest.java
@@ -0,0 +1,694 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.systests.jms_1_1.extensions.tls;
+
+import static org.apache.qpid.test.utils.TestSSLConstants.BROKER_KEYSTORE_PASSWORD;
+import static org.apache.qpid.test.utils.TestSSLConstants.BROKER_TRUSTSTORE_PASSWORD;
+import static org.apache.qpid.test.utils.TestSSLConstants.KEYSTORE_PASSWORD;
+import static org.apache.qpid.test.utils.TestSSLConstants.TRUSTSTORE_PASSWORD;
+import static org.hamcrest.CoreMatchers.anyOf;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.not;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+import static org.junit.Assume.assumeThat;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.net.InetSocketAddress;
+import java.nio.file.Files;
+import java.security.Key;
+import java.security.cert.Certificate;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.jms.Connection;
+import javax.jms.JMSException;
+import javax.jms.Session;
+import javax.xml.bind.DatatypeConverter;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import org.apache.qpid.server.model.Port;
+import org.apache.qpid.server.model.Protocol;
+import org.apache.qpid.server.security.FileKeyStore;
+import org.apache.qpid.server.security.FileTrustStore;
+import org.apache.qpid.systests.JmsTestBase;
+import org.apache.qpid.test.utils.TestSSLConstants;
+import org.apache.qpid.tests.utils.BrokerAdmin;
+
+public class TlsTest extends JmsTestBase
+{
+    private static final String TEST_PROFILE_RESOURCE_BASE = System.getProperty("java.io.tmpdir") + "/";
+    private static final String BROKER_KEYSTORE =
+            TEST_PROFILE_RESOURCE_BASE + org.apache.qpid.test.utils.TestSSLConstants.BROKER_KEYSTORE;
+    private static final String BROKER_TRUSTSTORE =
+            TEST_PROFILE_RESOURCE_BASE + org.apache.qpid.test.utils.TestSSLConstants.BROKER_TRUSTSTORE;
+    private static final String KEYSTORE =
+            TEST_PROFILE_RESOURCE_BASE + org.apache.qpid.test.utils.TestSSLConstants.KEYSTORE;
+    private static final String TRUSTSTORE =
+            TEST_PROFILE_RESOURCE_BASE + org.apache.qpid.test.utils.TestSSLConstants.TRUSTSTORE;
+
+    @BeforeClass
+    public static void setUp() throws Exception
+    {
+        System.setProperty("javax.net.debug", "ssl");
+
+        // workaround for QPID-8069
+        if (getProtocol() != Protocol.AMQP_1_0 && getProtocol() != Protocol.AMQP_0_10)
+        {
+            System.setProperty("amqj.MaximumStateWait", "4000");
+        }
+    }
+
+    @AfterClass
+    public static void tearDown() throws Exception
+    {
+        System.clearProperty("javax.net.debug");
+        if (getProtocol() != Protocol.AMQP_1_0)
+        {
+            System.clearProperty("amqj.MaximumStateWait");
+        }
+    }
+
+    @Test
+    public void testCreateSSLConnectionUsingConnectionURLParams() throws Exception
+    {
+        //Start the broker (NEEDing client certificate authentication)
+        int port = configureTlsPort(getTestPortName(), true, false, false);
+
+        InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
+        Connection connection = getConnectionBuilder().setSslPort(port)
+                                                      .setHost(brokerAddress.getHostName())
+                                                      .setTls(true)
+                                                      .setKeyStoreLocation(KEYSTORE)
+                                                      .setKeyStorePassword(KEYSTORE_PASSWORD)
+                                                      .setTrustStoreLocation(TRUSTSTORE)
+                                                      .setTrustStorePassword(TRUSTSTORE_PASSWORD)
+                                                      .build();
+        try
+        {
+            assertConnection(connection);
+        }
+        finally
+        {
+            connection.close();
+        }
+    }
+
+    @Test
+    public void testCreateSSLConnectionWithCertificateTrust() throws Exception
+    {
+        assumeThat("Qpid JMS Client does not support trusting of a certificate",
+                   getProtocol(),
+                   is(not(equalTo(Protocol.AMQP_1_0))));
+
+        int port = configureTlsPort(getTestPortName(), false, false, false);
+        File trustCertFile = extractCertFileFromTestTrustStore();
+
+        InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
+        Connection connection = getConnectionBuilder().setSslPort(port)
+                                                      .setHost(brokerAddress.getHostName())
+                                                      .setTls(true)
+                                                      .setOptions(Collections.singletonMap("trusted_certs_path",
+                                                                                           trustCertFile.getCanonicalPath()))
+                                                      .build();
+        try
+        {
+            assertConnection(connection);
+        }
+        finally
+        {
+            connection.close();
+        }
+    }
+
+    @Test
+    public void testSSLConnectionToPlainPortRejected() throws Exception
+    {
+        assumeThat("QPID-8069", getProtocol(), is(anyOf(equalTo(Protocol.AMQP_1_0), equalTo(Protocol.AMQP_0_10))));
+
+        setSslStoreSystemProperties();
+        try
+        {
+            InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
+            getConnectionBuilder().setSslPort(brokerAddress.getPort())
+                                  .setHost(brokerAddress.getHostName())
+                                  .setTls(true)
+                                  .build();
+
+            fail("Exception not thrown");
+        }
+        catch (JMSException e)
+        {
+            // PASS
+        }
+        finally
+        {
+            clearSslStoreSystemProperties();
+        }
+    }
+
+    @Test
+    public void testHostVerificationIsOnByDefault() throws Exception
+    {
+        assumeThat("QPID-8069", getProtocol(), is(anyOf(equalTo(Protocol.AMQP_1_0), equalTo(Protocol.AMQP_0_10))));
+
+        //Start the broker (NEEDing client certificate authentication)
+        int port = configureTlsPort(getTestPortName(), true, false, false);
+
+        try
+        {
+            getConnectionBuilder().setSslPort(port)
+                                  .setHost("127.0.0.1")
+                                  .setTls(true)
+                                  .setKeyStoreLocation(KEYSTORE)
+                                  .setKeyStorePassword(KEYSTORE_PASSWORD)
+                                  .setTrustStoreLocation(TRUSTSTORE)
+                                  .setTrustStorePassword(TRUSTSTORE_PASSWORD)
+                                  .build();
+            fail("Exception not thrown");
+        }
+        catch (JMSException e)
+        {
+            // PASS
+        }
+
+        Connection connection = getConnectionBuilder().setSslPort(port)
+                                                      .setHost("127.0.0.1")
+                                                      .setTls(true)
+                                                      .setKeyStoreLocation(KEYSTORE)
+                                                      .setKeyStorePassword(KEYSTORE_PASSWORD)
+                                                      .setTrustStoreLocation(TRUSTSTORE)
+                                                      .setTrustStorePassword(TRUSTSTORE_PASSWORD)
+                                                      .setVerifyHostName(false)
+                                                      .build();
+        try
+        {
+            assertConnection(connection);
+        }
+        finally
+        {
+            connection.close();
+        }
+    }
+
+    @Test
+    public void testCreateSslConnectionUsingJVMSettings() throws Exception
+    {
+        //Start the broker (NEEDing client certificate authentication)
+        int port = configureTlsPort(getTestPortName(), true, false, false);
+        setSslStoreSystemProperties();
+        try
+        {
+            Connection connection = getConnectionBuilder().setSslPort(port)
+                                                          .setTls(true)
+                                                          .build();
+            try
+            {
+                assertConnection(connection);
+            }
+            finally
+            {
+                connection.close();
+            }
+        }
+        finally
+        {
+            clearSslStoreSystemProperties();
+        }
+    }
+
+    @Test
+    public void testMultipleCertsInSingleStore() throws Exception
+    {
+        //Start the broker (NEEDing client certificate authentication)
+        int port = configureTlsPort(getTestPortName(), true, false, false);
+        setSslStoreSystemProperties();
+        try
+        {
+            Connection connection = getConnectionBuilder().setClientId(getTestName())
+                                                          .setSslPort(port)
+                                                          .setTls(true)
+                                                          .setKeyAlias(TestSSLConstants.CERT_ALIAS_APP1)
+                                                          .build();
+            try
+            {
+                assertConnection(connection);
+            }
+            finally
+            {
+                connection.close();
+            }
+
+            Connection connection2 = getConnectionBuilder().setSslPort(port)
+                                                           .setTls(true)
+                                                           .setKeyAlias(TestSSLConstants.CERT_ALIAS_APP2)
+                                                           .build();
+            try
+            {
+                assertConnection(connection2);
+            }
+            finally
+            {
+                connection2.close();
+            }
+        }
+        finally
+        {
+            clearSslStoreSystemProperties();
+        }
+    }
+
+    @Test
+    public void testVerifyHostNameWithIncorrectHostname() throws Exception
+    {
+        assumeThat("QPID-8069", getProtocol(), is(anyOf(equalTo(Protocol.AMQP_1_0), equalTo(Protocol.AMQP_0_10))));
+
+        //Start the broker (WANTing client certificate authentication)
+        int port = configureTlsPort(getTestPortName(), false, true, false);
+
+        setSslStoreSystemProperties();
+        try
+        {
+            getConnectionBuilder().setSslPort(port)
+                                  .setHost("127.0.0.1")
+                                  .setTls(true)
+                                  .setVerifyHostName(true)
+                                  .build();
+            fail("Exception not thrown");
+        }
+        catch (JMSException e)
+        {
+            // PASS
+        }
+        finally
+        {
+            clearSslStoreSystemProperties();
+        }
+    }
+
+    @Test
+    public void testVerifyLocalHost() throws Exception
+    {
+        //Start the broker (WANTing client certificate authentication)
+        int port = configureTlsPort(getTestPortName(), false, true, false);
+
+        setSslStoreSystemProperties();
+        try
+        {
+            Connection connection = getConnectionBuilder().setSslPort(port)
+                                                          .setHost("localhost")
+                                                          .setTls(true)
+                                                          .build();
+            try
+            {
+                assertConnection(connection);
+            }
+            finally
+            {
+                connection.close();
+            }
+        }
+        finally
+        {
+            clearSslStoreSystemProperties();
+        }
+    }
+
+    @Test
+    public void testCreateSSLConnectionUsingConnectionURLParamsTrustStoreOnly() throws Exception
+    {
+        //Start the broker (WANTing client certificate authentication)
+        int port = configureTlsPort(getTestPortName(), false, true, false);
+
+        InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
+        Connection connection = getConnectionBuilder().setSslPort(port)
+                                                      .setHost(brokerAddress.getHostName())
+                                                      .setTls(true)
+                                                      .setTrustStoreLocation(TRUSTSTORE)
+                                                      .setTrustStorePassword(TRUSTSTORE_PASSWORD)
+                                                      .build();
+        try
+        {
+            assertConnection(connection);
+        }
+        finally
+        {
+            connection.close();
+        }
+    }
+
+    @Test
+    public void testClientCertificateMissingWhilstNeeding() throws Exception
+    {
+        assumeThat("QPID-8069", getProtocol(), is(anyOf(equalTo(Protocol.AMQP_1_0), equalTo(Protocol.AMQP_0_10))));
+
+        //Start the broker (NEEDing client certificate authentication)
+        int port = configureTlsPort(getTestPortName(), true, false, false);
+
+        try
+        {
+            getConnectionBuilder().setSslPort(port)
+                                  .setHost(getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP).getHostName())
+                                  .setTls(true)
+                                  .setTrustStoreLocation(TRUSTSTORE)
+                                  .setTrustStorePassword(TRUSTSTORE_PASSWORD)
+                                  .build();
+            fail("Connection was established successfully");
+        }
+        catch (JMSException e)
+        {
+            // PASS
+        }
+    }
+
+    @Test
+    public void testClientCertificateMissingWhilstWanting() throws Exception
+    {
+        //Start the broker (WANTing client certificate authentication)
+        int port = configureTlsPort(getTestPortName(), false, true, false);
+
+        InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
+        Connection connection = getConnectionBuilder().setSslPort(port)
+                                                      .setHost(brokerAddress.getHostName())
+                                                      .setTls(true)
+                                                      .setTrustStoreLocation(TRUSTSTORE)
+                                                      .setTrustStorePassword(TRUSTSTORE_PASSWORD)
+                                                      .build();
+        try
+        {
+            assertConnection(connection);
+        }
+        finally
+        {
+            connection.close();
+        }
+    }
+
+    @Test
+    public void testClientCertMissingWhilstWantingAndNeeding() throws Exception
+    {
+        assumeThat("QPID-8069", getProtocol(), is(anyOf(equalTo(Protocol.AMQP_1_0), equalTo(Protocol.AMQP_0_10))));
+        //Start the broker (NEEDing and WANTing client certificate authentication)
+        int port = configureTlsPort(getTestPortName(), true, true, false);
+
+        try
+        {
+            getConnectionBuilder().setSslPort(port)
+                                  .setHost(getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP).getHostName())
+                                  .setTls(true)
+                                  .setTrustStoreLocation(TRUSTSTORE)
+                                  .setTrustStorePassword(TRUSTSTORE_PASSWORD)
+                                  .build();
+            fail("Connection was established successfully");
+        }
+        catch (JMSException e)
+        {
+            // PASS
+        }
+    }
+
+    @Test
+    public void testCreateSSLandTCPonSamePort() throws Exception
+    {
+
+        //Start the broker (WANTing client certificate authentication)
+        int port = configureTlsPort(getTestPortName(), false, true, true);
+
+        InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
+        Connection connection = getConnectionBuilder().setSslPort(port)
+                                                      .setHost(brokerAddress.getHostName())
+                                                      .setTls(true)
+                                                      .setKeyStoreLocation(KEYSTORE)
+                                                      .setKeyStorePassword(KEYSTORE_PASSWORD)
+                                                      .setTrustStoreLocation(TRUSTSTORE)
+                                                      .setTrustStorePassword(TRUSTSTORE_PASSWORD)
+                                                      .build();
+        try
+        {
+            assertConnection(connection);
+        }
+        finally
+        {
+            connection.close();
+        }
+
+        Connection connection2 = getConnectionBuilder().setPort(port)
+                                                       .setHost(brokerAddress.getHostName())
+                                                       .build();
+        try
+        {
+            assertConnection(connection2);
+        }
+        finally
+        {
+            connection2.close();
+        }
+    }
+
+    @Test
+    public void testCreateSSLWithCertFileAndPrivateKey() throws Exception
+    {
+        assumeThat("Qpid JMS Client does not support trusting of a certificate",
+                   getProtocol(),
+                   is(not(equalTo(Protocol.AMQP_1_0))));
+
+        //Start the broker (NEEDing client certificate authentication)
+        int port = configureTlsPort(getTestPortName(), true, false, false);
+
+        clearSslStoreSystemProperties();
+        File[] certAndKeyFiles = extractResourcesFromTestKeyStore();
+        final Map<String, String> options = new HashMap<>();
+        options.put("client_cert_path", certAndKeyFiles[1].getCanonicalPath());
+        options.put("client_cert_priv_key_path", certAndKeyFiles[0].getCanonicalPath());
+        InetSocketAddress brokerAddress = getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP);
+        Connection connection = getConnectionBuilder().setSslPort(port)
+                                                      .setHost(brokerAddress.getHostName())
+                                                      .setTls(true)
+                                                      .setTrustStoreLocation(TRUSTSTORE)
+                                                      .setTrustStorePassword(TRUSTSTORE_PASSWORD)
+                                                      .setVerifyHostName(false)
+                                                      .setOptions(options)
+                                                      .build();
+        try
+        {
+            assertConnection(connection);
+        }
+        finally
+        {
+            connection.close();
+        }
+    }
+
+
+    private int configureTlsPort(final String portName,
+                                 final boolean needClientAuth,
+                                 final boolean wantClientAuth,
+                                 final boolean samePort) throws Exception
+    {
+
+        Connection connection = getConnectionBuilder().setVirtualHost("$management").build();
+        try
+        {
+            connection.start();
+            return createPort(portName, needClientAuth, wantClientAuth, samePort, connection);
+        }
+        finally
+        {
+            connection.close();
+        }
+    }
+
+    private int createPort(final String portName,
+                           final boolean needClientAuth,
+                           final boolean wantClientAuth,
+                           final boolean plainAndSsl,
+                           Connection connection) throws Exception
+    {
+        String keyStoreName = portName + "KeyStore";
+        String trustStoreName = portName + "TrustStore";
+        String authenticationProvider = null;
+
+        List<Map<String, Object>> ports = queryEntitiesUsingAmqpManagement("org.apache.qpid.AmqpPort", connection);
+        for (Map<String, Object> port : ports)
+        {
+            String name = String.valueOf(port.get(Port.NAME));
+
+            Map<String, Object> attributes =
+                    readEntityUsingAmqpManagement(name, "org.apache.qpid.AmqpPort", false, connection);
+            if (attributes.get("boundPort")
+                          .equals(getBrokerAdmin().getBrokerAddress(BrokerAdmin.PortType.AMQP).getPort()))
+            {
+                authenticationProvider = String.valueOf(attributes.get(Port.AUTHENTICATION_PROVIDER));
+                break;
+            }
+        }
+
+        final Map<String, Object> keyStoreAttributes = new HashMap<>();
+        keyStoreAttributes.put("storeUrl", BROKER_KEYSTORE);
+        keyStoreAttributes.put("password", BROKER_KEYSTORE_PASSWORD);
+        createEntity(keyStoreName, FileKeyStore.class.getName(), keyStoreAttributes, connection);
+
+        final Map<String, Object> trustStoreAttributes = new HashMap<>();
+        trustStoreAttributes.put("storeUrl", BROKER_TRUSTSTORE);
+        trustStoreAttributes.put("password", BROKER_TRUSTSTORE_PASSWORD);
+        createEntity(trustStoreName, FileTrustStore.class.getName(), trustStoreAttributes, connection);
+
+        Map<String, Object> sslPortAttributes = new HashMap<>();
+        sslPortAttributes.put(Port.TRANSPORTS, plainAndSsl ? "[\"SSL\",\"TCP\"]" : "[\"SSL\"]");
+        sslPortAttributes.put(Port.PORT, 0);
+        sslPortAttributes.put(Port.AUTHENTICATION_PROVIDER, authenticationProvider);
+        sslPortAttributes.put(Port.NEED_CLIENT_AUTH, needClientAuth);
+        sslPortAttributes.put(Port.WANT_CLIENT_AUTH, wantClientAuth);
+        sslPortAttributes.put(Port.NAME, portName);
+        sslPortAttributes.put(Port.KEY_STORE, keyStoreName);
+        sslPortAttributes.put(Port.TRUST_STORES, "[\"" + trustStoreName + "\"]");
+        createEntity(portName, "org.apache.qpid.AmqpPort", sslPortAttributes, connection);
+
+        Map<String, Object> portEffectiveAttributes =
+                readEntityUsingAmqpManagement(portName, "org.apache.qpid.AmqpPort", false, connection);
+        if (portEffectiveAttributes.containsKey("boundPort"))
+        {
+            return (int) portEffectiveAttributes.get("boundPort");
+        }
+        throw new RuntimeException("Bound port is not found");
+    }
+
+    private void setSslStoreSystemProperties()
+    {
+        System.setProperty("javax.net.ssl.keyStore", KEYSTORE);
+        System.setProperty("javax.net.ssl.keyStorePassword", KEYSTORE_PASSWORD);
+        System.setProperty("javax.net.ssl.trustStore", TRUSTSTORE);
+        System.setProperty("javax.net.ssl.trustStorePassword", TRUSTSTORE_PASSWORD);
+    }
+
+    private void clearSslStoreSystemProperties()
+    {
+        System.clearProperty("javax.net.ssl.keyStore");
+        System.clearProperty("javax.net.ssl.keyStorePassword");
+        System.clearProperty("javax.net.ssl.trustStore");
+        System.clearProperty("javax.net.ssl.trustStorePassword");
+    }
+
+    private File[] extractResourcesFromTestKeyStore() throws Exception
+    {
+        java.security.KeyStore ks = java.security.KeyStore.getInstance(java.security.KeyStore.getDefaultType());
+        try (InputStream is = new FileInputStream(KEYSTORE))
+        {
+            ks.load(is, KEYSTORE_PASSWORD.toCharArray());
+        }
+
+        File privateKeyFile = Files.createTempFile(getTestName(), ".private-key.der").toFile();
+        try (FileOutputStream kos = new FileOutputStream(privateKeyFile))
+        {
+            Key pvt = ks.getKey(TestSSLConstants.CERT_ALIAS_APP1, KEYSTORE_PASSWORD.toCharArray());
+            kos.write("-----BEGIN PRIVATE KEY-----\n".getBytes());
+            String base64encoded = DatatypeConverter.printBase64Binary(pvt.getEncoded());
+            while (base64encoded.length() > 76)
+            {
+                kos.write(base64encoded.substring(0, 76).getBytes());
+                kos.write("\n".getBytes());
+                base64encoded = base64encoded.substring(76);
+            }
+
+            kos.write(base64encoded.getBytes());
+            kos.write("\n-----END PRIVATE KEY-----".getBytes());
+            kos.flush();
+        }
+
+        File certificateFile = Files.createTempFile(getTestName(), ".certificate.der").toFile();
+        try (FileOutputStream cos = new FileOutputStream(certificateFile))
+        {
+            Certificate[] chain = ks.getCertificateChain(TestSSLConstants.CERT_ALIAS_APP1);
+            for (Certificate pub : chain)
+            {
+                cos.write("-----BEGIN CERTIFICATE-----\n".getBytes());
+                String base64encoded = DatatypeConverter.printBase64Binary(pub.getEncoded());
+                while (base64encoded.length() > 76)
+                {
+                    cos.write(base64encoded.substring(0, 76).getBytes());
+                    cos.write("\n".getBytes());
+                    base64encoded = base64encoded.substring(76);
+                }
+                cos.write(base64encoded.getBytes());
+
+                cos.write("\n-----END CERTIFICATE-----\n".getBytes());
+            }
+            cos.flush();
+        }
+
+        return new File[]{privateKeyFile, certificateFile};
+    }
+
+    private File extractCertFileFromTestTrustStore() throws Exception
+    {
+        java.security.KeyStore ks = java.security.KeyStore.getInstance(java.security.KeyStore.getDefaultType());
+        try (InputStream is = new FileInputStream(TRUSTSTORE))
+        {
+            ks.load(is, TRUSTSTORE_PASSWORD.toCharArray());
+        }
+
+        File certificateFile = Files.createTempFile(getTestName(), ".crt").toFile();
+
+        try (FileOutputStream cos = new FileOutputStream(certificateFile))
+        {
+
+            for (String alias : Collections.list(ks.aliases()))
+            {
+                Certificate pub = ks.getCertificate(alias);
+                cos.write("-----BEGIN CERTIFICATE-----\n".getBytes());
+                String base64encoded = DatatypeConverter.printBase64Binary(pub.getEncoded());
+                while (base64encoded.length() > 76)
+                {
+                    cos.write(base64encoded.substring(0, 76).getBytes());
+                    cos.write("\n".getBytes());
+                    base64encoded = base64encoded.substring(76);
+                }
+                cos.write(base64encoded.getBytes());
+
+                cos.write("\n-----END CERTIFICATE-----\n".getBytes());
+            }
+            cos.flush();
+        }
+
+        return certificateFile;
+    }
+
+    private String getTestPortName()
+    {
+        return getTestName() + "TlsPort";
+    }
+
+    private void assertConnection(final Connection connection) throws JMSException
+    {
+        assertNotNull("connection should be successful", connection);
+        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
+        assertNotNull("create session should be successful", session);
+    }
+}

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0904d669/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java
----------------------------------------------------------------------
diff --git a/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java b/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java
index 7c7aaa1..fe53a24 100755
--- a/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java
+++ b/systests/src/main/java/org/apache/qpid/test/utils/QpidBrokerTestCase.java
@@ -106,7 +106,7 @@ public class QpidBrokerTestCase extends QpidTestCase
     {
         try
         {
-            _managementFacade = new AmqpManagementFacade(isBroker10() ? "$management" : "ADDR:$management");
+            _managementFacade = new AmqpManagementFacade(BROKER_PROTOCOL);
             _jmsProvider = isBroker10() ? new QpidJmsClientProvider(_managementFacade) : new QpidJmsClient0xProvider();
 
             _defaultBroker = new BrokerHolderFactory().create(DEFAULT_BROKER_TYPE, DEFAULT_PORT, this);


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org