mirror of https://github.com/apache/lucene.git
SOLR-2673: randomize test methods in LuceneTestCase to flush out test-ordering dependencies
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1150384 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
b66758fe6e
commit
06d319b97d
|
@ -347,12 +347,16 @@ public abstract class LuceneTestCase extends Assert {
|
||||||
@Deprecated
|
@Deprecated
|
||||||
private static List<String> testClassesRun = new ArrayList<String>();
|
private static List<String> testClassesRun = new ArrayList<String>();
|
||||||
|
|
||||||
@BeforeClass
|
private static void initRandom() {
|
||||||
public static void beforeClassLuceneTestCaseJ4() {
|
assert !random.initialized;
|
||||||
state = State.INITIAL;
|
|
||||||
staticSeed = "random".equals(TEST_SEED) ? seedRand.nextLong() : TwoLongs.fromString(TEST_SEED).l1;
|
staticSeed = "random".equals(TEST_SEED) ? seedRand.nextLong() : TwoLongs.fromString(TEST_SEED).l1;
|
||||||
random.setSeed(staticSeed);
|
random.setSeed(staticSeed);
|
||||||
random.initialized = true;
|
random.initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void beforeClassLuceneTestCaseJ4() {
|
||||||
|
state = State.INITIAL;
|
||||||
tempDirs.clear();
|
tempDirs.clear();
|
||||||
stores = Collections.synchronizedMap(new IdentityHashMap<MockDirectoryWrapper,StackTraceElement[]>());
|
stores = Collections.synchronizedMap(new IdentityHashMap<MockDirectoryWrapper,StackTraceElement[]>());
|
||||||
|
|
||||||
|
@ -1408,6 +1412,10 @@ public abstract class LuceneTestCase extends Assert {
|
||||||
protected List<FrameworkMethod> computeTestMethods() {
|
protected List<FrameworkMethod> computeTestMethods() {
|
||||||
if (testMethods != null)
|
if (testMethods != null)
|
||||||
return testMethods;
|
return testMethods;
|
||||||
|
|
||||||
|
initRandom();
|
||||||
|
Random r = new Random(random.nextLong());
|
||||||
|
|
||||||
testClassesRun.add(getTestClass().getJavaClass().getSimpleName());
|
testClassesRun.add(getTestClass().getJavaClass().getSimpleName());
|
||||||
testMethods = new ArrayList<FrameworkMethod>();
|
testMethods = new ArrayList<FrameworkMethod>();
|
||||||
for (Method m : getTestClass().getJavaClass().getMethods()) {
|
for (Method m : getTestClass().getJavaClass().getMethods()) {
|
||||||
|
@ -1457,6 +1465,15 @@ public abstract class LuceneTestCase extends Assert {
|
||||||
} catch (Exception e) { throw new RuntimeException(e); }
|
} catch (Exception e) { throw new RuntimeException(e); }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// sort the test methods first before shuffling them, so that the shuffle is consistent
|
||||||
|
// across different implementations that might order the methods different originally.
|
||||||
|
Collections.sort(testMethods, new Comparator<FrameworkMethod>() {
|
||||||
|
@Override
|
||||||
|
public int compare(FrameworkMethod f1, FrameworkMethod f2) {
|
||||||
|
return f1.getName().compareTo(f2.getName());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Collections.shuffle(testMethods, r);
|
||||||
return testMethods;
|
return testMethods;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1494,6 +1511,7 @@ public abstract class LuceneTestCase extends Assert {
|
||||||
|
|
||||||
public LuceneTestCaseRunner(Class<?> clazz) throws InitializationError {
|
public LuceneTestCaseRunner(Class<?> clazz) throws InitializationError {
|
||||||
super(clazz);
|
super(clazz);
|
||||||
|
// evil we cannot init our random here, because super() calls computeTestMethods!!!!;
|
||||||
Filter f = new Filter() {
|
Filter f = new Filter() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue