blob: aa9a95082f8913fce2914f69da4d2449c24f3b52 [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.camel.component.solr;
import java.io.File;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.util.SortedMap;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.http.conn.ssl.SSLContextBuilder;
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.embedded.SSLConfig;
import org.eclipse.jetty.servlet.ServletHolder;
// Create embedded's Solrs for testing,
// based on SolrJettyTestBase
public final class JettySolrFactory {
public static final File TEST_KEYSTORE = new File("./target/test-classes/solrtest.keystore");
private static final String TEST_KEYSTORE_PATH = TEST_KEYSTORE.getAbsolutePath();
private static final String TEST_KEYSTORE_PASSWORD = "secret";
private static boolean mockedSslClient;
private static int dataDirNo;
private JettySolrFactory() {
// Util classs
}
private static SSLConfig buildSSLConfig(boolean useSsl, boolean sslClientAuth) {
SSLConfig sslConfig = new SSLConfig(useSsl, false, TEST_KEYSTORE_PATH, TEST_KEYSTORE_PASSWORD,
TEST_KEYSTORE_PATH, TEST_KEYSTORE_PASSWORD);
return sslConfig;
}
private static void installAllTrustingClientSsl() throws KeyManagementException,
NoSuchAlgorithmException, KeyStoreException {
SSLContextBuilder builder = new SSLContextBuilder();
builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
// // Create a trust manager that does not validate certificate chains
final TrustManager[] trustAllCerts = new TrustManager[] {new X509TrustManager() {
@Override
public void checkClientTrusted(final X509Certificate[] chain, final String authType) {
}
@Override
public void checkServerTrusted(final X509Certificate[] chain, final String authType) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
}};
final SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
SSLContext.setDefault(sslContext);
// // Install the all-trusting trust manager
// final SSLContext sslContext = SSLContext.getInstance( "SSL" );
// sslContext.init( null, trustAllCerts, new
// java.security.SecureRandom() );
// // Create an ssl socket factory with our all-trusting manager
// final SSLSocketFactory sslSocketFactory =
// sslContext.getSocketFactory();
// HttpsURLConnection.setDefaultSSLSocketFactory(sslSocketFactory);
}
private static JettySolrRunner createJetty(String solrHome, String configFile, String schemaFile,
String context, boolean stopAtShutdown,
SortedMap<ServletHolder, String> extraServlets, boolean ssl)
throws Exception {
if (!mockedSslClient) {
installAllTrustingClientSsl();
mockedSslClient = true;
}
// Set appropriate paths for Solr to use.
System.setProperty("solr.solr.home", solrHome);
System.setProperty("jetty.testMode", "true");
System.setProperty("solr.data.dir", "target/test-classes/solr/data" + (dataDirNo++));
// Instruct Solr to keep the index in memory, for faster testing.
System.setProperty("solr.directoryFactory", "solr.RAMDirectoryFactory");
SSLConfig sslConfig = buildSSLConfig(ssl, false);
context = context == null ? "/solr" : context;
JettySolrRunner jetty = new JettySolrRunner(solrHome, context, 0, configFile, schemaFile,
stopAtShutdown, extraServlets, sslConfig);
jetty.start();
return jetty;
}
public static JettySolrRunner createJettyTestFixture(boolean useSsl) throws Exception {
String solrHome = "src/test/resources/solr";
String configFile = solrHome + "/solr-no-core.xml";
String schemaFile = solrHome + "/collection1/conf/schema.xml";
String context = "/solr";
boolean stopAtShutdown = true;
SortedMap<ServletHolder, String> extraServlets = null;
if (!useSsl) {
System.setProperty("tests.jettySsl", "false");
}
return createJetty(solrHome, configFile, schemaFile, context, stopAtShutdown, extraServlets, useSsl);
}
}