blob: dd11623116d4f61fe262ef3ba09f08635829c55b [file] [log] [blame]
/**
* 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
* <p/>
* http://www.apache.org/licenses/LICENSE-2.0
* <p/>
* 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.activemq.ra;
import javax.jms.ConnectionFactory;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.net.ssl.KeyManager;
import javax.net.ssl.TrustManager;
import org.apache.activemq.broker.SslBrokerService;
import org.apache.activemq.broker.SslContext;
import org.apache.activemq.broker.TransportConnector;
import org.apache.activemq.transport.TransportFactory;
import org.apache.activemq.transport.tcp.SslTransportFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
public class SSLMAnagedConnectionFactoryTest {
private static final String KAHADB_DIRECTORY = "target/activemq-data/";
private static final String DEFAULT_HOST = "ssl://localhost:0";
private ConnectionManagerAdapter connectionManager = new ConnectionManagerAdapter();
private ActiveMQManagedConnectionFactory managedConnectionFactory;
private ConnectionFactory connectionFactory;
private ManagedConnectionProxy connection;
private ActiveMQManagedConnection managedConnection;
private SslBrokerService broker;
private String connectionURI;
@Before
public void setUp() throws Exception {
createAndStartBroker();
managedConnectionFactory = new ActiveMQManagedConnectionFactory();
managedConnectionFactory.setServerUrl(connectionURI);
managedConnectionFactory.setTrustStore("server.keystore");
managedConnectionFactory.setTrustStorePassword("password");
managedConnectionFactory.setKeyStore("client.keystore");
managedConnectionFactory.setKeyStorePassword("password");
connectionFactory = (ConnectionFactory)managedConnectionFactory.createConnectionFactory(connectionManager);
}
@After
public void tearDown() throws Exception {
if (broker != null) {
broker.stop();
}
}
@Test(timeout = 60000)
public void testSSLManagedConnection() throws Exception {
connection = (ManagedConnectionProxy)connectionFactory.createConnection();
managedConnection = connection.getManagedConnection();
//do some stuff
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue t = session.createQueue("TEST");
MessageProducer producer = session.createProducer(t);
producer.send(session.createTextMessage("test message."));
managedConnection.destroy();
connection.close();
}
private void createAndStartBroker() throws Exception {
broker = new SslBrokerService();
broker.setDeleteAllMessagesOnStartup(true);
broker.setUseJmx(false);
broker.setBrokerName("BROKER");
broker.setDataDirectory(KAHADB_DIRECTORY);
KeyManager[] km = SSLTest.getKeyManager();
TrustManager[] tm = SSLTest.getTrustManager();
TransportConnector connector = broker.addSslConnector(DEFAULT_HOST, km, tm, null);
broker.start();
broker.waitUntilStarted();
connectionURI = connector.getPublishableConnectString();
SslTransportFactory sslFactory = new SslTransportFactory();
SslContext ctx = new SslContext(km, tm, null);
SslContext.setCurrentSslContext(ctx);
TransportFactory.registerTransportFactory("ssl", sslFactory);
}
}