LUCENE-3437: Detect the test thread by reference, not by name.
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/branches/branch_3x@1171081 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java b/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java
index 21b737a..ac38ea8 100644
--- a/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java
+++ b/lucene/src/test-framework/org/apache/lucene/util/LuceneTestCase.java
@@ -63,9 +63,11 @@
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Rule;
+import org.junit.rules.MethodRule;
import org.junit.rules.TestWatchman;
import org.junit.runner.RunWith;
import org.junit.runners.model.FrameworkMethod;
+import org.junit.runners.model.Statement;
/**
* Base class for all Lucene unit tests, Junit3 or Junit4 variant.
@@ -415,6 +417,29 @@
super.starting(method);
}
};
+
+ /**
+ * The thread executing the current test case.
+ * @see #isTestThread()
+ */
+ volatile Thread testCaseThread;
+
+ /** @see #testCaseThread */
+ @Rule
+ public final MethodRule setTestThread = new MethodRule() {
+ public Statement apply(final Statement s, FrameworkMethod fm, Object target) {
+ return new Statement() {
+ public void evaluate() throws Throwable {
+ try {
+ LuceneTestCase.this.testCaseThread = Thread.currentThread();
+ s.evaluate();
+ } finally {
+ LuceneTestCase.this.testCaseThread = null;
+ }
+ }
+ };
+ }
+ };
@Before
public void setUp() throws Exception {
@@ -480,6 +505,15 @@
}
}
+ /**
+ * Returns true if and only if the calling thread is the primary thread
+ * executing the test case.
+ */
+ protected boolean isTestThread() {
+ assertNotNull("Test case thread not set?", testCaseThread);
+ return Thread.currentThread() == testCaseThread;
+ }
+
@After
public void tearDown() throws Exception {
State oldState = state; // capture test execution state
@@ -1237,7 +1271,7 @@
static final Random seedRand = new Random();
protected static final SmartRandom random = new SmartRandom(0);
-
+
private String name = "<unknown>";
/**
diff --git a/lucene/src/test/org/apache/lucene/index/TestConcurrentMergeScheduler.java b/lucene/src/test/org/apache/lucene/index/TestConcurrentMergeScheduler.java
index 90a318f..ae1bb2c 100644
--- a/lucene/src/test/org/apache/lucene/index/TestConcurrentMergeScheduler.java
+++ b/lucene/src/test/org/apache/lucene/index/TestConcurrentMergeScheduler.java
@@ -28,7 +28,7 @@
public class TestConcurrentMergeScheduler extends LuceneTestCase {
- private static class FailOnlyOnFlush extends MockDirectoryWrapper.Failure {
+ private class FailOnlyOnFlush extends MockDirectoryWrapper.Failure {
boolean doFail;
boolean hitExc;
@@ -44,8 +44,7 @@
@Override
public void eval(MockDirectoryWrapper dir) throws IOException {
- if (doFail && (Thread.currentThread().getName().equals("main")
- || Thread.currentThread().getName().equals("Main Thread"))) {
+ if (doFail && isTestThread()) {
boolean isDoFlush = false;
boolean isClose = false;
StackTraceElement[] trace = new Exception().getStackTrace();