mirror of https://github.com/apache/lucene.git
SOLR-4853: Fixed SolrJettyTestBase so it may be reused by end users
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1489081 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
078e116d8b
commit
0800ccd3c2
|
@ -223,6 +223,8 @@ Bug Fixes
|
|||
* SOLR-4858: SolrCore reloading was broken when the UpdateLog
|
||||
was enabled. (Hossman, Anshum Gupta, Alexey Serba, Mark Miller, yonik)
|
||||
|
||||
* SOLR-4853: Fixed SolrJettyTestBase so it may be reused by end users
|
||||
(hossman)
|
||||
|
||||
Other Changes
|
||||
----------------------
|
||||
|
|
|
@ -495,6 +495,22 @@ public class BasicHttpSolrServerTest extends SolrJettyTestBase {
|
|||
client.getConnectionManager().shutdown();
|
||||
}
|
||||
|
||||
/**
|
||||
* A trivial test that verifies the example keystore used for SSL testing can be
|
||||
* found using the base class. this helps future-proof against hte possibility of
|
||||
* something moving/breaking thekeystore path in a way that results in the SSL
|
||||
* randomization logic being forced to silently never use SSL. (We can't enforce
|
||||
* this type of check in the base class because then it would not be usable by client
|
||||
* code depending on the test framework
|
||||
*/
|
||||
public void testExampleKeystorePath() {
|
||||
assertNotNull("Example keystore is null, meaning that something has changed in the " +
|
||||
"structure of the example configs and/or ExternalPaths.java - " +
|
||||
"SSL randomization is broken",
|
||||
getExampleKeystoreFile());
|
||||
}
|
||||
|
||||
|
||||
private int findUnusedPort() {
|
||||
for (int port = 0; port < 65535; port++) {
|
||||
Socket s = new Socket();
|
||||
|
|
|
@ -44,18 +44,32 @@ abstract public class SolrJettyTestBase extends SolrTestCaseJ4
|
|||
public String getSolrHome() { return ExternalPaths.EXAMPLE_HOME; }
|
||||
|
||||
private static boolean manageSslProps = true;
|
||||
private static final File TEST_KEYSTORE = new File(ExternalPaths.SOURCE_HOME,
|
||||
"example/etc/solrtest.keystore");
|
||||
private static File TEST_KEYSTORE;
|
||||
private static final Map<String,String> SSL_PROPS = new HashMap<String,String>();
|
||||
static {
|
||||
TEST_KEYSTORE = (null == ExternalPaths.SOURCE_HOME)
|
||||
? null : new File(ExternalPaths.SOURCE_HOME, "example/etc/solrtest.keystore");
|
||||
String keystorePath = null == TEST_KEYSTORE ? null : TEST_KEYSTORE.getAbsolutePath();
|
||||
|
||||
SSL_PROPS.put("tests.jettySsl","false");
|
||||
SSL_PROPS.put("tests.jettySsl.clientAuth","false");
|
||||
SSL_PROPS.put("javax.net.ssl.keyStore", TEST_KEYSTORE.getAbsolutePath());
|
||||
SSL_PROPS.put("javax.net.ssl.keyStore", keystorePath);
|
||||
SSL_PROPS.put("javax.net.ssl.keyStorePassword","secret");
|
||||
SSL_PROPS.put("javax.net.ssl.trustStore", TEST_KEYSTORE.getAbsolutePath());
|
||||
SSL_PROPS.put("javax.net.ssl.trustStore", keystorePath);
|
||||
SSL_PROPS.put("javax.net.ssl.trustStorePassword","secret");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the File object for the example keystore used when this baseclass randomly
|
||||
* uses SSL. May be null ifthis test does not appear to be running as part of the
|
||||
* standard solr distribution and does not have access to the example configs.
|
||||
*
|
||||
* @lucene.internal
|
||||
*/
|
||||
protected static File getExampleKeystoreFile() {
|
||||
return TEST_KEYSTORE;
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
public static void beforeSolrJettyTestBase() throws Exception {
|
||||
|
||||
|
@ -63,20 +77,27 @@ abstract public class SolrJettyTestBase extends SolrTestCaseJ4
|
|||
final boolean trySsl = random().nextBoolean();
|
||||
final boolean trySslClientAuth = random().nextBoolean();
|
||||
|
||||
// only randomize SSL if we are a solr test with access to the example keystore
|
||||
if (null == getExampleKeystoreFile()) {
|
||||
log.info("Solr's example keystore not defined (not a solr test?) skipping SSL randomization");
|
||||
manageSslProps = false;
|
||||
return;
|
||||
}
|
||||
|
||||
assertTrue("test keystore does not exist, randomized ssl testing broken: " +
|
||||
getExampleKeystoreFile().getAbsolutePath(),
|
||||
getExampleKeystoreFile().exists() );
|
||||
|
||||
// only randomize SSL if none of the SSL_PROPS are already set
|
||||
final Map<Object,Object> sysprops = System.getProperties();
|
||||
for (String prop : SSL_PROPS.keySet()) {
|
||||
if (sysprops.containsKey(prop)) {
|
||||
log.info("System property explicitly set, so skipping randomized ssl properties: " + prop);
|
||||
manageSslProps = false;
|
||||
break;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
assertTrue("test keystore does not exist, can't be used for randomized " +
|
||||
"ssl testing: " + TEST_KEYSTORE.getAbsolutePath(),
|
||||
TEST_KEYSTORE.exists() );
|
||||
|
||||
if (manageSslProps) {
|
||||
log.info("Randomized ssl ({}) and clientAuth ({})", trySsl, trySslClientAuth);
|
||||
for (String prop : SSL_PROPS.keySet()) {
|
||||
|
|
|
@ -25,30 +25,55 @@ import java.io.File;
|
|||
* @lucene.internal
|
||||
*/
|
||||
public class ExternalPaths {
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* The main directory path for the solr source being built if it can be determined. If it
|
||||
* can not be determined -- possily because the current context is a client code base
|
||||
* using hte test frameowrk -- then this variable will be null.
|
||||
* </p>
|
||||
* <p>
|
||||
* Note that all other static paths available in this class are derived from the source
|
||||
* home, and if it is null, those paths will just be relative to 'null' and may not be
|
||||
* meaningful.
|
||||
*/
|
||||
public static final String SOURCE_HOME = determineSourceHome();
|
||||
/* @see #SOURCE_HOME */
|
||||
public static String WEBAPP_HOME = new File(SOURCE_HOME, "webapp/web").getAbsolutePath();
|
||||
/* @see #SOURCE_HOME */
|
||||
public static String EXAMPLE_HOME = new File(SOURCE_HOME, "example/solr").getAbsolutePath();
|
||||
/* @see #SOURCE_HOME */
|
||||
public static String EXAMPLE_MULTICORE_HOME = new File(SOURCE_HOME, "example/multicore").getAbsolutePath();
|
||||
/* @see #SOURCE_HOME */
|
||||
public static String EXAMPLE_SCHEMA=EXAMPLE_HOME+"/collection1/conf/schema.xml";
|
||||
/* @see #SOURCE_HOME */
|
||||
public static String EXAMPLE_CONFIG=EXAMPLE_HOME+"/collection1/conf/solrconfig.xml";
|
||||
|
||||
/**
|
||||
* Ugly, ugly hack to determine the example home without depending on the CWD
|
||||
* this is needed for example/multicore tests which reside outside the classpath.
|
||||
* if the source home can't be determined, this method returns null.
|
||||
*/
|
||||
static String determineSourceHome() {
|
||||
// ugly, ugly hack to determine the example home without depending on the CWD
|
||||
// this is needed for example/multicore tests which reside outside the classpath
|
||||
File file;
|
||||
try {
|
||||
file = new File("solr/conf");
|
||||
if (!file.exists()) {
|
||||
file = new File(Thread.currentThread().getContextClassLoader().getResource("solr/conf").toURI());
|
||||
File file;
|
||||
try {
|
||||
file = new File("solr/conf");
|
||||
if (!file.exists()) {
|
||||
file = new File(Thread.currentThread().getContextClassLoader().getResource("solr/conf").toURI());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// If there is no "solr/conf" in the classpath, fall back to searching from the current directory.
|
||||
file = new File(".");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
// If there is no "solr/conf" in the classpath, fall back to searching from the current directory.
|
||||
file = new File(".");
|
||||
File base = file.getAbsoluteFile();
|
||||
while (!(new File(base, "solr/CHANGES.txt").exists()) && null != base) {
|
||||
base = base.getParentFile();
|
||||
}
|
||||
return (null == base) ? null : new File(base, "solr/").getAbsolutePath();
|
||||
} catch (RuntimeException e) {
|
||||
// all bets are off
|
||||
return null;
|
||||
}
|
||||
File base = file.getAbsoluteFile();
|
||||
while (!new File(base, "solr/CHANGES.txt").exists()) {
|
||||
base = base.getParentFile();
|
||||
}
|
||||
return new File(base, "solr/").getAbsolutePath();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue