blob: 0544d503e4b6475259c0f8a97493a42f5c8b19c4 [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
*
* 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.activemq.usecases;
import org.apache.activemq.JmsMultipleBrokersTestSupport;
import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.network.DiscoveryNetworkConnector;
import org.apache.activemq.network.NetworkConnector;
import org.apache.activemq.spring.SpringSslContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.URI;
public class NetworkAsyncStartSslTest extends JmsMultipleBrokersTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(NetworkAsyncStartSslTest.class);
private String brokerBDomain = "localhost:61617";
private String brokerCDomain = "localhost:61618";
int bridgeCount=0;
public static final String KEYSTORE_TYPE = "jks";
public static final String PASSWORD = "password";
public static final String SERVER_KEYSTORE = "src/test/resources/server.keystore";
public static final String TRUST_KEYSTORE = "src/test/resources/client.keystore";
public void testSslPerConnectorConfig() throws Exception {
String transport = "ssl";
String brokerBUri = transport + "://" + brokerBDomain;
String brokerCUri = transport + "://" + brokerCDomain;
SpringSslContext brokerSslContext = new SpringSslContext();
brokerSslContext.setKeyStore(SERVER_KEYSTORE);
brokerSslContext.setKeyStorePassword(PASSWORD);
brokerSslContext.setKeyStoreType(KEYSTORE_TYPE);
brokerSslContext.setTrustStore(TRUST_KEYSTORE);
brokerSslContext.setTrustStorePassword(PASSWORD);
brokerSslContext.afterPropertiesSet();
BrokerService brokerC = brokers.get("BrokerC").broker;
brokerC.setSslContext(brokerSslContext);
brokerC.addConnector(brokerCUri);
brokerC.start();
BrokerService brokerB = brokers.get("BrokerB").broker;
brokerB.setSslContext(brokerSslContext);
brokerB.addConnector(brokerBUri);
brokerB.start();
BrokerService brokerA = brokers.get("BrokerA").broker;
brokerA.setNetworkConnectorStartAsync(true);
NetworkConnector networkConnector = bridgeBroker(brokerA, brokerBUri);
networkConnector.setSslContext(brokerSslContext);
LOG.info("Added bridge to: " + brokerBUri);
// no ssl context, will fail
bridgeBroker(brokerA, brokerCUri);
LOG.info("Added bridge to: " + brokerCUri);
LOG.info("starting A..");
brokerA.start();
// wait for A to get bridge to B
waitForBridgeFormation(brokerA, 1, 0);
assertTrue("one worked", hasBridge("BrokerA", "BrokerB"));
assertFalse("one failed", hasBridge("BrokerA", "BrokerC"));
}
private NetworkConnector bridgeBroker(BrokerService localBroker, String remoteURI) throws Exception {
String uri = "static:(" + remoteURI + ")";
NetworkConnector connector = new DiscoveryNetworkConnector(new URI(uri));
connector.setName("bridge-" + bridgeCount++);
localBroker.addNetworkConnector(connector);
return connector;
}
@Override
public void setUp() throws Exception {
super.setAutoFail(true);
super.setUp();
// initially with no tcp transport connector
createBroker(new URI("broker:()BrokerA?persistent=false&useJmx=false"));
createBroker(new URI("broker:()BrokerB?persistent=false&useJmx=false"));
createBroker(new URI("broker:()BrokerC?persistent=false&useJmx=false"));
}
}