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:
Robert Muir 2011-07-24 14:37:03 +00:00
parent b66758fe6e
commit 06d319b97d
1 changed files with 21 additions and 3 deletions

View File

@ -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