/** * 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.camel.component.stomp; import javax.net.ssl.SSLContext; import org.apache.activemq.broker.BrokerService; import org.apache.activemq.broker.SslContext; import org.apache.camel.impl.JndiRegistry; import org.apache.camel.test.AvailablePortFinder; import org.apache.camel.test.junit4.CamelTestSupport; import org.apache.camel.util.jsse.KeyManagersParameters; import org.apache.camel.util.jsse.KeyStoreParameters; import org.apache.camel.util.jsse.SSLContextParameters; import org.apache.camel.util.jsse.TrustManagersParameters; import org.fusesource.stomp.client.Stomp; public abstract class StompBaseTest extends CamelTestSupport { protected BrokerService brokerService; protected int numberOfMessages = 100; protected int port; private boolean canTest; private SSLContextParameters serverSslContextParameters; private SSLContext serverSslContext; private SSLContextParameters clientSslContextParameters; private SSLContext clientSslContext; protected int getPort() { return port; } /** * Whether we can test on this box, as not all boxes can be used for reliable CI testing. */ protected boolean canTest() { return canTest; } protected boolean isUseSsl() { return false; } @Override public boolean isUseRouteBuilder() { return false; } @Override protected JndiRegistry createRegistry() throws Exception { JndiRegistry registry = super.createRegistry(); if (isUseSsl()) { registry.bind("sslContextParameters", getClientSSLContextParameters()); } return registry; } @Override public void setUp() throws Exception { port = AvailablePortFinder.getNextAvailable(61613); try { brokerService = new BrokerService(); brokerService.setPersistent(false); brokerService.setAdvisorySupport(false); if (isUseSsl()) { SslContext sslContext = new SslContext(); sslContext.setSSLContext(getServerSSLContext()); brokerService.setSslContext(sslContext); brokerService.addConnector("stomp+ssl://localhost:" + getPort() + "?trace=true"); } else { brokerService.addConnector("stomp://localhost:" + getPort() + "?trace=true"); } brokerService.start(); brokerService.waitUntilStarted(); super.setUp(); canTest = true; } catch (Exception e) { System.err.println("Cannot test due " + e.getMessage() + " more details in the log"); log.warn("Cannot test due " + e.getMessage(), e); canTest = false; } } @Override public void tearDown() throws Exception { super.tearDown(); if (brokerService != null) { brokerService.stop(); brokerService.waitUntilStopped(); } } protected Stomp createStompClient() throws Exception { Stomp stomp; if (isUseSsl()) { stomp = new Stomp("ssl://localhost:" + getPort()); stomp.setSslContext(getClientSSLContext()); } else { stomp = new Stomp("tcp://localhost:" + getPort()); } return stomp; } protected SSLContextParameters getServerSSLContextParameters() { if (serverSslContextParameters == null) { serverSslContextParameters = getSSLContextParameters("jsse/server.keystore", "password"); } return serverSslContextParameters; } protected SSLContext getServerSSLContext() throws Exception { if (serverSslContext == null) { serverSslContext = getServerSSLContextParameters().createSSLContext(context); } return serverSslContext; } protected SSLContextParameters getClientSSLContextParameters() { if (clientSslContextParameters == null) { clientSslContextParameters = getSSLContextParameters("jsse/client.keystore", "password"); } return clientSslContextParameters; } protected SSLContext getClientSSLContext() throws Exception { if (clientSslContext == null) { clientSslContext = getClientSSLContextParameters().createSSLContext(context); } return clientSslContext; } private SSLContextParameters getSSLContextParameters(String path, String password) { KeyStoreParameters ksp = new KeyStoreParameters(); ksp.setResource(path); ksp.setPassword(password); KeyManagersParameters kmp = new KeyManagersParameters(); kmp.setKeyPassword(password); kmp.setKeyStore(ksp); TrustManagersParameters tmp = new TrustManagersParameters(); tmp.setKeyStore(ksp); SSLContextParameters sslContextParameters = new SSLContextParameters(); sslContextParameters.setKeyManagers(kmp); sslContextParameters.setTrustManagers(tmp); return sslContextParameters; } }