SOLR-10338: Configure SecureRandom non blocking for tests.

This commit is contained in:
markrmiller 2017-03-31 10:53:20 -04:00
parent bdd0c7e320
commit 0445f8200e
6 changed files with 57 additions and 1 deletions

View File

@ -2,7 +2,7 @@
<project version="4">
<component name="RunManager" selected="JUnit.Lucene core">
<configuration default="true" type="JUnit" factoryName="JUnit">
<option name="VM_PARAMETERS" value="-ea" />
<option name="VM_PARAMETERS" value="-ea -Djava.security.egd=file:/dev/./urandom" />
</configuration>
<configuration default="false" name="Lucene core" type="JUnit" factoryName="JUnit">
<module name="lucene-core-tests" />

View File

@ -277,6 +277,7 @@
<tests.postingsformat>${tests.postingsformat}</tests.postingsformat>
<tests.timezone>${tests.timezone}</tests.timezone>
<tests.verbose>${tests.verbose}</tests.verbose>
<java.security.egd>file:/dev/./urandom</java.security.egd>
</systemPropertyVariables>
</configuration>
</plugin>

View File

@ -1062,6 +1062,9 @@
<sysproperty key="tests.src.home" value="${user.dir}" />
<!-- replaces default random source to the nonblocking variant -->
<sysproperty key="java.security.egd" value="file:/dev/./urandom"/>
<!-- Only pass these to the test JVMs if defined in ANT. -->
<syspropertyset>
<propertyref prefix="tests.maxfailures" />

View File

@ -176,6 +176,8 @@ Other Changes
* SOLR-10147: Admin UI -> Cloud -> Graph: Impossible to see shard state (Amrit Sarkar, janhoy)
* SOLR-10338: Configure SecureRandom non blocking for tests. (Mihaly Toth, hossman, Ishan Chattopadhyaya, via Mark Miller)
================== 6.5.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.

View File

@ -0,0 +1,41 @@
/*
* 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.
*/
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
public class SecureRandomAlgorithmTesterApp {
public static void main(String[] args) throws NoSuchAlgorithmException {
String algorithm = args[0];
String method = args[1];
int amount = Integer.valueOf(args[2]);
SecureRandom secureRandom;
if(algorithm.equals("default"))
secureRandom = new SecureRandom();
else
secureRandom = SecureRandom.getInstance(algorithm);
System.out.println("Algorithm:" + secureRandom.getAlgorithm());
switch(method) {
case "seed": secureRandom.generateSeed(amount); break;
case "bytes": secureRandom.nextBytes(new byte[amount]); break;
case "long": secureRandom.nextLong(); break;
case "int": secureRandom.nextInt(); break;
default: throw new IllegalArgumentException("Not supported random function: " + method);
}
System.out.println("SecureRandom function invoked");
}
}

View File

@ -39,6 +39,7 @@ import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.security.SecureRandom;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
@ -2431,6 +2432,14 @@ public abstract class SolrTestCaseJ4 extends LuceneTestCase {
}
}
@BeforeClass
public static void assertNonBlockingRandomGeneratorAvailable() {
if(Boolean.parseBoolean(System.getProperty("test.solr.allow.any.securerandom","false")))
return;
// Use -Djava.security.egd=file:/dev/./urandom VM option if you hit this
assertEquals("SHA1PRNG", new SecureRandom().getAlgorithm());
}
@AfterClass
public static void unchooseMPForMP() {
System.clearProperty(SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY);