You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2014/03/28 01:55:47 UTC

svn commit: r1582571 [3/3] - in /lucene/dev/branches/solr5914: ./ lucene/test-framework/src/java/org/apache/lucene/util/ solr/ solr/contrib/ solr/contrib/analysis-extras/src/test/org/apache/solr/schema/ solr/contrib/dataimporthandler/src/test/org/apach...

Modified: lucene/dev/branches/solr5914/solr/core/src/test/org/apache/solr/update/SolrIndexSplitterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/test/org/apache/solr/update/SolrIndexSplitterTest.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/test/org/apache/solr/update/SolrIndexSplitterTest.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/test/org/apache/solr/update/SolrIndexSplitterTest.java Fri Mar 28 00:55:45 2014
@@ -25,8 +25,6 @@ import org.apache.commons.io.FileUtils;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.store.Directory;
-import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.TestUtil;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
@@ -59,10 +57,13 @@ public class SolrIndexSplitterTest exten
     super.setUp();
     clearIndex();
     assertU(commit());
-    File tempDir = TestUtil.createTempDir(LuceneTestCase.getTestClass().getSimpleName());
-    indexDir1 = new File(tempDir, this.getClass().getName() + "_testSplit1");
-    indexDir2 = new File(tempDir, this.getClass().getName() + "_testSplit2");
-    indexDir3 = new File(tempDir, this.getClass().getName() + "_testSplit3");
+    File dataDir = createTempDir();
+    indexDir1 = new File(dataDir, this.getClass().getName()
+        + "_testSplit1");
+    indexDir2 = new File(dataDir, this.getClass().getName()
+        + "_testSplit2");
+    indexDir3 = new File(dataDir, this.getClass().getName()
+        + "_testSplit3");
 
     if (indexDir1.exists()) {
       FileUtils.deleteDirectory(indexDir1);
@@ -270,7 +271,11 @@ public class SolrIndexSplitterTest exten
 
   @Test
   public void testSplitByRouteKey() throws Exception  {
-    File indexDir = TestUtil.createTempDir(LuceneTestCase.getTestClass().getSimpleName());
+    File indexDir = createTempDir();
+    if (indexDir.exists())  {
+      FileUtils.deleteDirectory(indexDir);
+    }
+    indexDir.mkdirs();
 
     CompositeIdRouter r1 = new CompositeIdRouter();
     String splitKey = "sea-line!";

Modified: lucene/dev/branches/solr5914/solr/core/src/test/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactoryTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/core/src/test/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactoryTest.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/core/src/test/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactoryTest.java (original)
+++ lucene/dev/branches/solr5914/solr/core/src/test/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactoryTest.java Fri Mar 28 00:55:45 2014
@@ -49,8 +49,7 @@ public class AddSchemaFieldsUpdateProces
 
   @Before
   private void initManagedSchemaCore() throws Exception {
-    createTempDir();
-    final String tmpSolrHomePath = TestUtil.createTempDir(LuceneTestCase.getTestClass().getSimpleName()).getAbsolutePath();
+    final String tmpSolrHomePath = createTempDir().getAbsolutePath();
     tmpSolrHome = new File(tmpSolrHomePath).getAbsoluteFile();
     tmpConfDir = new File(tmpSolrHome, confDir);
     File testHomeConfDir = new File(TEST_HOME(), confDir);

Modified: lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java (original)
+++ lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java Fri Mar 28 00:55:45 2014
@@ -21,9 +21,6 @@ import java.io.File;
 import java.io.IOException;
 import java.util.Arrays;
 
-import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.TestUtil;
-import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
 import org.apache.solr.client.solrj.request.CoreAdminRequest;
 import org.apache.solr.client.solrj.request.QueryRequest;
@@ -46,6 +43,7 @@ public abstract class MergeIndexesExampl
 
   protected CoreContainer cores;
   private String saveProp;
+  private File dataDir1;
   private File dataDir2;
 
   @Override
@@ -55,9 +53,7 @@ public abstract class MergeIndexesExampl
 
   @BeforeClass
   public static void beforeClass2() throws Exception {
-    if (dataDir == null) {
-      createTempDir();
-    }
+
   }
 
   protected void setupCoreContainer() {
@@ -71,12 +67,11 @@ public abstract class MergeIndexesExampl
     saveProp = System.getProperty("solr.directoryFactory");
     System.setProperty("solr.directoryFactory", "solr.StandardDirectoryFactory");
     super.setUp();
-
+    File dataDir1 = createTempDir();
     // setup datadirs
-    System.setProperty( "solr.core0.data.dir", SolrTestCaseJ4.dataDir.getCanonicalPath() );
+    System.setProperty( "solr.core0.data.dir", dataDir1.getCanonicalPath() );
 
-    dataDir2 = TestUtil.createTempDir(LuceneTestCase.getTestClass().getSimpleName());
-    dataDir2.mkdirs();
+    dataDir2 = createTempDir();
 
     System.setProperty( "solr.core1.data.dir", this.dataDir2.getCanonicalPath() );
 

Modified: lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/MultiCoreExampleTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/MultiCoreExampleTestBase.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/MultiCoreExampleTestBase.java (original)
+++ lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/MultiCoreExampleTestBase.java Fri Mar 28 00:55:45 2014
@@ -57,10 +57,9 @@ public abstract class MultiCoreExampleTe
 
   @Override public void setUp() throws Exception {
     super.setUp();
-
-    dataDir1 = TestUtil.createTempDir(LuceneTestCase.getTestClass().getSimpleName() + "-core0"); 
-    dataDir2 = TestUtil.createTempDir(LuceneTestCase.getTestClass().getSimpleName() + "-core1"); 
-
+    dataDir1 = createTempDir();
+    dataDir2 = createTempDir();
+    
     System.setProperty( "solr.core0.data.dir", this.dataDir1.getCanonicalPath() ); 
     System.setProperty( "solr.core1.data.dir", this.dataDir2.getCanonicalPath() );
   }

Modified: lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTestBase.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTestBase.java (original)
+++ lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/SolrExampleTestBase.java Fri Mar 28 00:55:45 2014
@@ -36,9 +36,7 @@ abstract public class SolrExampleTestBas
 
   @BeforeClass
   public static void beforeClass() throws Exception {
-    if (dataDir == null) {
-      createTempDir();
-    }
+
   }
  
   @Override
@@ -49,7 +47,7 @@ abstract public class SolrExampleTestBas
     
     // this sets the property for jetty starting SolrDispatchFilter
     System.setProperty( "solr.solr.home", this.getSolrHome() ); 
-    System.setProperty( "solr.data.dir", this.dataDir.getCanonicalPath() ); 
+    System.setProperty( "solr.data.dir", this.initCoreDataDir.getCanonicalPath() ); 
   }
   
   /**

Modified: lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttpSolrServer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttpSolrServer.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttpSolrServer.java (original)
+++ lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttpSolrServer.java Fri Mar 28 00:55:45 2014
@@ -285,7 +285,8 @@ public class TestLBHttpSolrServer extend
 
 
     public void setUp() throws Exception {
-      File home = TestUtil.createTempDir(LuceneTestCase.getTestClass().getSimpleName());
+      File home = new File(dataDir,
+              getClass().getName() + "-" + System.currentTimeMillis());
       homeDir = new File(home, name);
       dataDir = new File(homeDir + "/collection1", "data");
       confDir = new File(homeDir + "/collection1", "conf");

Modified: lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/AbstractEmbeddedSolrServerTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/AbstractEmbeddedSolrServerTestCase.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/AbstractEmbeddedSolrServerTestCase.java (original)
+++ lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/AbstractEmbeddedSolrServerTestCase.java Fri Mar 28 00:55:45 2014
@@ -17,20 +17,17 @@ package org.apache.solr.client.solrj.emb
  * limitations under the License.
  */
 
-import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.TestUtil;
+import java.io.File;
+
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.SolrServer;
 import org.apache.solr.core.CoreContainer;
-import org.apache.solr.util.AbstractSolrTestCase;
 import org.junit.After;
 import org.junit.Before;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.File;
-
-public abstract class AbstractEmbeddedSolrServerTestCase extends LuceneTestCase {
+public abstract class AbstractEmbeddedSolrServerTestCase extends SolrTestCaseJ4 {
 
   protected static Logger log = LoggerFactory.getLogger(AbstractEmbeddedSolrServerTestCase.class);
 
@@ -49,7 +46,7 @@ public abstract class AbstractEmbeddedSo
     System.out.println("Solr home: " + SOLR_HOME.getAbsolutePath());
 
     //The index is always stored within a temporary directory
-    tempDir = TestUtil.createTempDir(LuceneTestCase.getTestClass().getSimpleName());
+    tempDir = createTempDir();
     
     File dataDir = new File(tempDir,"data1");
     File dataDir2 = new File(tempDir,"data2");

Modified: lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/JettyWebappTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/JettyWebappTest.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/JettyWebappTest.java (original)
+++ lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/JettyWebappTest.java Fri Mar 28 00:55:45 2014
@@ -59,7 +59,9 @@ public class JettyWebappTest extends Sol
     System.setProperty("solr.solr.home", ExternalPaths.EXAMPLE_HOME);
     System.setProperty("tests.shardhandler.randomSeed", Long.toString(random().nextLong()));
 
-    File dataDir = TestUtil.createTempDir(LuceneTestCase.getTestClass().getSimpleName());
+    File dataDir = createTempDir();
+    dataDir.mkdirs();
+
     System.setProperty("solr.data.dir", dataDir.getCanonicalPath());
     String path = ExternalPaths.WEBAPP_HOME;
 

Modified: lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java (original)
+++ lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java Fri Mar 28 00:55:45 2014
@@ -99,7 +99,7 @@ public class TestCoreAdmin extends Abstr
     
     SolrServer server = getSolrAdmin();
     
-    File tmp = TestUtil.createTempDir(LuceneTestCase.getTestClass().getSimpleName());
+    File tmp = createTempDir();
 
     log.info("Creating cores underneath {}", tmp);
     

Modified: lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/common/util/ContentStreamTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/common/util/ContentStreamTest.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/common/util/ContentStreamTest.java (original)
+++ lucene/dev/branches/solr5914/solr/solrj/src/test/org/apache/solr/common/util/ContentStreamTest.java Fri Mar 28 00:55:45 2014
@@ -23,16 +23,17 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.Reader;
 import java.net.URL;
 
 import org.apache.commons.io.IOUtils;
-import org.apache.lucene.util.LuceneTestCase;
+import org.apache.solr.SolrTestCaseJ4;
 import org.apache.lucene.util.TestUtil;
 import org.apache.solr.core.SolrResourceLoader;
 
 /**
  */
-public class ContentStreamTest extends LuceneTestCase 
+public class ContentStreamTest extends SolrTestCaseJ4 
 {  
   public void testStringStream() throws IOException 
   {
@@ -47,15 +48,26 @@ public class ContentStreamTest extends L
   {
     InputStream is = new SolrResourceLoader(null, null).openResource( "solrj/README" );
     assertNotNull( is );
-    File file = TestUtil.createTempFile("README", "");
+    File file = TestUtil.createTempFile("README", "", createTempDir());
     FileOutputStream os = new FileOutputStream(file);
     IOUtils.copy(is, os);
     os.close();
+    is.close();
     
-    ContentStreamBase stream = new ContentStreamBase.FileStream( file );
-    assertEquals( file.length(), stream.getSize().intValue() );
-    assertTrue( IOUtils.contentEquals( new FileInputStream( file ), stream.getStream() ) );
-    assertTrue( IOUtils.contentEquals( new InputStreamReader(new FileInputStream(file), "UTF-8"), stream.getReader() ) );
+    ContentStreamBase stream = new ContentStreamBase.FileStream(file);
+    InputStream s = stream.getStream();
+    FileInputStream fis = new FileInputStream(file);
+    InputStreamReader isr = new InputStreamReader(
+        new FileInputStream(file), "UTF-8");
+    try {
+      assertEquals(file.length(), stream.getSize().intValue());
+      assertTrue(IOUtils.contentEquals(fis, s));
+      assertTrue(IOUtils.contentEquals(isr, stream.getReader()));
+    } finally {
+      s.close();
+      isr.close();
+      fis.close();
+    }
   }
   
 
@@ -63,15 +75,30 @@ public class ContentStreamTest extends L
   {
     InputStream is = new SolrResourceLoader(null, null).openResource( "solrj/README" );
     assertNotNull( is );
-    File file = TestUtil.createTempFile("README", "");
+    File file = new File(createTempDir(), "README");
     FileOutputStream os = new FileOutputStream(file);
     IOUtils.copy(is, os);
     os.close();
+    is.close();
     
-    ContentStreamBase stream = new ContentStreamBase.URLStream( new URL(file.toURI().toASCIIString()) );
-    assertTrue( IOUtils.contentEquals( new FileInputStream( file ), stream.getStream() ) );
-    assertEquals( file.length(), stream.getSize().intValue() );
-    assertTrue( IOUtils.contentEquals( new InputStreamReader(new FileInputStream(file), "UTF-8"), stream.getReader() ) );
-    assertEquals( file.length(), stream.getSize().intValue() );
+    ContentStreamBase stream = new ContentStreamBase.URLStream(new URL(file
+        .toURI().toASCIIString()));
+    InputStream s = stream.getStream();
+    FileInputStream fis = new FileInputStream(file);
+    FileInputStream fis2 = new FileInputStream(file);
+    InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
+    Reader r = stream.getReader();
+    try {
+      assertTrue(IOUtils.contentEquals(fis2, s));
+      assertEquals(file.length(), stream.getSize().intValue());
+      assertTrue(IOUtils.contentEquals(isr, r));
+      assertEquals(file.length(), stream.getSize().intValue());
+    } finally {
+      r.close();
+      s.close();
+      isr.close();
+      fis.close();
+      fis2.close();
+    }
   }
 }

Modified: lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java (original)
+++ lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java Fri Mar 28 00:55:45 2014
@@ -278,8 +278,7 @@ public abstract class BaseDistributedSea
     super.setUp();
     System.setProperty("solr.test.sys.prop1", "propone");
     System.setProperty("solr.test.sys.prop2", "proptwo");
-    testDir = TestUtil.createTempDir(LuceneTestCase.getTestClass().getSimpleName());
-    testDir.mkdirs();
+    testDir = createTempDir();
   }
 
   @Override

Modified: lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/SolrJettyTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/SolrJettyTestBase.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/SolrJettyTestBase.java (original)
+++ lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/SolrJettyTestBase.java Fri Mar 28 00:55:45 2014
@@ -56,7 +56,7 @@ abstract public class SolrJettyTestBase 
     ignoreException("maxWarmingSearchers");
 
     // this sets the property for jetty starting SolrDispatchFilter
-    System.setProperty( "solr.data.dir", dataDir.getCanonicalPath() );
+    System.setProperty( "solr.data.dir", createTempDir().getCanonicalPath() );
 
     context = context==null ? "/solr" : context;
     SolrJettyTestBase.context = context;

Modified: lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java (original)
+++ lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java Fri Mar 28 00:55:45 2014
@@ -150,6 +150,9 @@ public abstract class SolrTestCaseJ4 ext
   // these are meant to be accessed sequentially, but are volatile just to ensure any test
   // thread will read the latest value
   protected static volatile SSLTestConfig sslConfig;
+  
+  private static boolean LEAVE_TEST_TMP_DIR = Boolean.getBoolean("solr.test.leavetmpdir");
+  private static boolean LEAVE_TEST_TMP_DIR_ANNOTATION;
 
   @ClassRule
   public static TestRule solrClassRules = 
@@ -163,6 +166,17 @@ public abstract class SolrTestCaseJ4 ext
   @BeforeClass 
   @SuppressWarnings("unused")
   private static void beforeClass() {
+    String cname = getSimpleClassName();
+    
+    LEAVE_TEST_TMP_DIR_ANNOTATION = RandomizedContext.current().getTargetClass()
+        .isAnnotationPresent(SuppressTempDirCleanUp.class);
+    
+    boolean ensureClosed = !(LEAVE_TEST_TMP_DIR || LEAVE_TEST_TMP_DIR_ANNOTATION);
+    rootTmpDir = TestUtil.createTempDir("solrtest-" + cname, null, ensureClosed);
+    initCoreDataDir = TestUtil.createTempDir("solrtest-" + cname, rootTmpDir);
+
+    System.err.println("Creating dataDir: " + initCoreDataDir.getAbsolutePath());
+    
     System.setProperty("jetty.testMode", "true");
     System.setProperty("enable.update.log", usually() ? "true" : "false");
     System.setProperty("tests.shardhandler.randomSeed", Long.toString(random().nextLong()));
@@ -194,18 +208,29 @@ public abstract class SolrTestCaseJ4 ext
       coreName = ConfigSolrXmlOld.DEFAULT_DEFAULT_CORE_NAME;
     } finally {
       try {
-        if (dataDir != null && dataDir.exists() && !recurseDelete(dataDir)) {
-          String msg = "!!!! WARNING: best effort to remove "
-              + dataDir.getAbsolutePath() + " FAILED !!!!!";
-          if (RandomizedContext.current().getTargetClass()
-              .isAnnotationPresent(SuppressTempDirCleanUp.class)) {
-            System.err.println(msg);
-          } else {
-            fail(msg);
+
+        if (LEAVE_TEST_TMP_DIR) {
+          System.err
+              .println("NOTE: per solr.test.leavetmpdir, the test tmp directory will not be removed: "
+                  + rootTmpDir.getAbsolutePath());
+        } else {
+          // TODO: tmp files should already get cleaned up by the test framework, but
+          // we still do it here as well, so that we clean up as much as we can, even
+          // when a test is the SuppressTempDirCleanUp annotation
+          if (rootTmpDir != null && rootTmpDir.exists() && !recurseDelete(rootTmpDir)) {
+            String msg = "!!!! WARNING: best effort to remove "
+                + rootTmpDir.getAbsolutePath() + " FAILED !!!!!";
+            if (LEAVE_TEST_TMP_DIR_ANNOTATION) {
+              System.err.println(msg);
+            } else {
+              // TODO: do we want to fail here with this message? Is the test framework
+              // fail that should happen better?
+              fail(msg);
+            }
           }
         }
       } finally {
-        dataDir = null;
+        initCoreDataDir = null;
         System.clearProperty("jetty.testMode");
         System.clearProperty("tests.shardhandler.randomSeed");
         System.clearProperty("enable.update.log");
@@ -483,7 +508,14 @@ public abstract class SolrTestCaseJ4 ext
       SolrException.ignorePatterns.remove(pattern);
   }
 
-
+  public static File createTempDir() {
+    return createTempDir(null);
+  }
+  
+  public static File createTempDir(String tag) {
+    return TestUtil.createTempDir(getClassName() + (tag == null ? "" : "-" + tag), rootTmpDir);
+  }
+  
   public static void resetExceptionIgnores() {
     SolrException.ignorePatterns = null;
     ignoreException("ignore_exception");  // always ignore "ignore_exception"    
@@ -542,7 +574,9 @@ public abstract class SolrTestCaseJ4 ext
   /**
    * The directory used to story the index managed by the TestHarness
    */
-  protected static volatile File dataDir;
+  protected static volatile File initCoreDataDir;
+  
+  protected static volatile File rootTmpDir;
   
   // hack due to File dataDir
   protected static String hdfsDataDir;
@@ -562,10 +596,6 @@ public abstract class SolrTestCaseJ4 ext
 
   private static String factoryProp;
 
-  public static void createTempDir() {
-    dataDir = TestUtil.createTempDir(LuceneTestCase.getTestClass().getSimpleName() + "-datadir");
-    System.err.println("Creating dataDir: " + dataDir.getAbsolutePath());
-  }
 
   public static void initCore() throws Exception {
     log.info("####initCore");
@@ -575,9 +605,6 @@ public abstract class SolrTestCaseJ4 ext
     if (factoryProp == null) {
       System.setProperty("solr.directoryFactory","solr.RAMDirectoryFactory");
     }
-    if (dataDir == null) {
-      createTempDir();
-    }
 
     // other  methods like starting a jetty instance need these too
     System.setProperty("solr.test.sys.prop1", "propone");
@@ -593,7 +620,7 @@ public abstract class SolrTestCaseJ4 ext
   public static void createCore() {
     assertNotNull(testSolrHome);
     solrConfig = TestHarness.createConfig(testSolrHome, coreName, getSolrConfigFile());
-    h = new TestHarness( coreName, hdfsDataDir == null ? dataDir.getAbsolutePath() : hdfsDataDir,
+    h = new TestHarness( coreName, hdfsDataDir == null ? initCoreDataDir.getAbsolutePath() : hdfsDataDir,
             solrConfig,
             getSchemaFile());
     lrf = h.getRequestFactory
@@ -602,8 +629,6 @@ public abstract class SolrTestCaseJ4 ext
 
   public static CoreContainer createCoreContainer(String solrHome, String solrXML) {
     testSolrHome = checkNotNull(solrHome);
-    if (dataDir == null)
-      createTempDir();
     h = new TestHarness(solrHome, solrXML);
     lrf = h.getRequestFactory("standard", 0, 20, CommonParams.VERSION, "2.2");
     return h.getCoreContainer();
@@ -611,9 +636,7 @@ public abstract class SolrTestCaseJ4 ext
 
   public static CoreContainer createDefaultCoreContainer(String solrHome) {
     testSolrHome = checkNotNull(solrHome);
-    if (dataDir == null)
-      createTempDir();
-    h = new TestHarness("collection1", dataDir.getAbsolutePath(), "solrconfig.xml", "schema.xml");
+    h = new TestHarness("collection1", initCoreDataDir.getAbsolutePath(), "solrconfig.xml", "schema.xml");
     lrf = h.getRequestFactory("standard", 0, 20, CommonParams.VERSION, "2.2");
     return h.getCoreContainer();
   }

Modified: lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java (original)
+++ lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/AbstractDistribZkTestBase.java Fri Mar 28 00:55:45 2014
@@ -59,7 +59,6 @@ public abstract class AbstractDistribZkT
   @Override
   public void setUp() throws Exception {
     super.setUp();
-    createTempDir();
     
     String zkDir = testDir.getAbsolutePath() + File.separator
     + "zookeeper/server1/data";

Modified: lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java (original)
+++ lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java Fri Mar 28 00:55:45 2014
@@ -40,7 +40,6 @@ import java.util.concurrent.atomic.Atomi
 
 import org.apache.commons.io.FilenameUtils;
 import org.apache.http.params.CoreConnectionPNames;
-import org.apache.lucene.util.TestUtil;
 import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.SolrRequest;
@@ -285,7 +284,7 @@ public abstract class AbstractFullDistri
     // System.clearProperty(ZkStateReader.NUM_SHARDS_PROP);
     System.setProperty(ZkStateReader.NUM_SHARDS_PROP, "1");
 
-    File controlJettyDir = TestUtil.createTempDir(getClass().getSimpleName() + "-controljetty");
+    File controlJettyDir = createTempDir();
     setupJettySolrHome(controlJettyDir);
 
     controlJetty = createJetty(controlJettyDir, testDir + "/control/data");  // don't pass shard name... let it default to "shard1"
@@ -360,7 +359,9 @@ public abstract class AbstractFullDistri
     for (int i = 1; i <= numJettys; i++) {
       if (sb.length() > 0) sb.append(',');
       int cnt = this.jettyIntCntr.incrementAndGet();
-      File jettyDir = TestUtil.createTempDir(getClass().getSimpleName() + "-jetty" + cnt);
+
+      File jettyDir = createTempDir();
+
       jettyDir.mkdirs();
       setupJettySolrHome(jettyDir);
       log.info("create jetty " + i); 
@@ -423,7 +424,8 @@ public abstract class AbstractFullDistri
 
 
     int cnt = this.jettyIntCntr.incrementAndGet();
-      File jettyDir = TestUtil.createTempDir(getClass().getSimpleName() + "-jetty" + cnt);
+
+      File jettyDir = createTempDir("jetty");
       jettyDir.mkdirs();
       org.apache.commons.io.FileUtils.copyDirectory(new File(getSolrHome()), jettyDir);
       JettySolrRunner j = createJetty(jettyDir, testDir + "/jetty" + cnt, shard, "solrconfig.xml", null);

Modified: lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/AbstractZkTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/AbstractZkTestCase.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/AbstractZkTestCase.java (original)
+++ lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/AbstractZkTestCase.java Fri Mar 28 00:55:45 2014
@@ -63,8 +63,7 @@ public abstract class AbstractZkTestCase
 
   @BeforeClass
   public static void azt_beforeClass() throws Exception {
-    createTempDir();
-    zkDir = dataDir.getAbsolutePath() + File.separator
+    zkDir = createTempDir().getAbsolutePath() + File.separator
         + "zookeeper/server1/data";
     zkServer = new ZkTestServer(zkDir);
     zkServer.run();

Modified: lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/ZkTestServer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/ZkTestServer.java?rev=1582571&r1=1582570&r2=1582571&view=diff
==============================================================================
--- lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/ZkTestServer.java (original)
+++ lucene/dev/branches/solr5914/solr/test-framework/src/java/org/apache/solr/cloud/ZkTestServer.java Fri Mar 28 00:55:45 2014
@@ -53,7 +53,7 @@ public class ZkTestServer {
 
   private int clientPort;
 
-  private Thread zooThread;
+  private volatile Thread zooThread;
   
   private int theTickTime = TICK_TIME;
 
@@ -105,9 +105,9 @@ public class ZkTestServer {
             config.getMaxClientCnxns());
         cnxnFactory.startup(zooKeeperServer);
         cnxnFactory.join();
-        if (zooKeeperServer.isRunning()) {
+       // if (zooKeeperServer.isRunning()) {
           zkServer.shutdown();
-        }
+       // }
       } catch (InterruptedException e) {
         // warn, but generally this is ok
         log.warn("Server interrupted", e);
@@ -121,14 +121,19 @@ public class ZkTestServer {
     protected void shutdown() throws IOException {
       zooKeeperServer.shutdown();
       ZKDatabase zkDb = zooKeeperServer.getZKDatabase();
-      if (zkDb != null) {
-        zkDb.close();
-      }
       if (cnxnFactory != null && cnxnFactory.getLocalPort() != 0) {
         waitForServerDown(getZkHost() + ":" + getPort(), 5000);
       }
       if (cnxnFactory != null) {
         cnxnFactory.shutdown();
+        try {
+          cnxnFactory.join();
+        } catch (InterruptedException e) {
+          Thread.currentThread().interrupt();
+        }
+      }
+      if (zkDb != null) {
+        zkDb.close();
       }
     }
 
@@ -251,11 +256,15 @@ public class ZkTestServer {
   }
 
   @SuppressWarnings("deprecation")
-  public void shutdown() throws IOException {
+  public void shutdown() throws IOException, InterruptedException {
     // TODO: this can log an exception while trying to unregister a JMX MBean
     zkServer.shutdown();
+    try {
+      zooThread.join();
+    } catch (NullPointerException e) {
+      // okay
+    }
   }
- 
   
   public static boolean waitForServerDown(String hp, long timeout) {
     long start = System.currentTimeMillis();