You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2012/10/29 15:55:07 UTC

svn commit: r1403336 [4/5] - in /lucene/dev/branches/lucene3846: ./ dev-tools/ dev-tools/eclipse/ dev-tools/idea/.idea/libraries/ dev-tools/idea/lucene/classification/ dev-tools/maven/ dev-tools/maven/lucene/classification/ dev-tools/maven/lucene/core/...

Modified: lucene/dev/branches/lucene3846/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java Mon Oct 29 14:55:01 2012
@@ -603,11 +603,15 @@ public class DistributedUpdateProcessor 
         for (Entry<String,Object> entry : ((Map<String,Object>) val).entrySet()) {
           String key = entry.getKey();
           Object fieldVal = entry.getValue();
+          boolean updateField = false;
           if ("add".equals(key)) {
+            updateField = true;
             oldDoc.addField( sif.getName(), fieldVal, sif.getBoost());
           } else if ("set".equals(key)) {
+            updateField = true;
             oldDoc.setField(sif.getName(),  fieldVal, sif.getBoost());
           } else if ("inc".equals(key)) {
+            updateField = true;
             SolrInputField numericField = oldDoc.get(sif.getName());
             if (numericField == null) {
               oldDoc.setField(sif.getName(),  fieldVal, sif.getBoost());
@@ -636,6 +640,12 @@ public class DistributedUpdateProcessor 
             }
 
           }
+
+          // validate that the field being modified is not the id field.
+          if (updateField && idField.getName().equals(sif.getName())) {
+            throw new SolrException(ErrorCode.BAD_REQUEST, "Invalid update of id field: " + sif);
+          }
+
         }
       } else {
         // normal fields are treated as a "set"

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/AnalysisAfterCoreReloadTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/AnalysisAfterCoreReloadTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/AnalysisAfterCoreReloadTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/AnalysisAfterCoreReloadTest.java Mon Oct 29 14:55:01 2012
@@ -23,49 +23,26 @@ import java.io.IOException;
 import org.apache.commons.io.FileUtils;
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.SolrServer;
-import org.apache.solr.client.solrj.embedded.JettySolrRunner;
-import org.apache.solr.client.solrj.impl.HttpSolrServer;
-import org.apache.solr.client.solrj.request.CoreAdminRequest;
+import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
+import org.apache.solr.client.solrj.request.AbstractUpdateRequest.ACTION;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.client.solrj.request.UpdateRequest;
-import org.apache.solr.client.solrj.request.AbstractUpdateRequest.ACTION;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.core.SolrCore;
-import org.apache.solr.util.AbstractSolrTestCase;
-import org.junit.After;
+import org.junit.BeforeClass;
 
-public class AnalysisAfterCoreReloadTest extends AbstractSolrTestCase {
-  private File homeDir;
+public class AnalysisAfterCoreReloadTest extends SolrTestCaseJ4 {
+  
   int port = 0;
   static final String context = "/solr";
-  JettySolrRunner jetty;
+
   static final String collection = "collection1";
   
-  @After
-  public void cleanUp() throws Exception {
-    jetty.stop();
-    if (homeDir != null && homeDir.isDirectory() && homeDir.exists())
-      recurseDelete(homeDir);
-  }
-  
-  @Override
-  public String getSolrHome() { 
-    return homeDir.getAbsolutePath(); 
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema.xml");
   }
 
-  @Override
-  public void setUp() throws Exception {
-    homeDir = new File(TEMP_DIR + File.separator + "solr-test-home-" + System.nanoTime());
-    homeDir.mkdirs();
-    FileUtils.copyDirectory(new File(getFile("solr/" + collection).getParent()), homeDir, false);
-
-    super.setUp();
-    
-    jetty = new JettySolrRunner(getSolrHome(), context, 0 );
-    jetty.start(false);
-    port = jetty.getLocalPort();
-  }
-  
   public void testStopwordsAfterCoreReload() throws Exception {
     SolrInputDocument doc = new SolrInputDocument();
     doc.setField( "id", "42" );
@@ -100,8 +77,7 @@ public class AnalysisAfterCoreReloadTest
 
     // overwrite stopwords file with stopword list ["stopwordc"] and reload the core
     overwriteStopwords("stopwordc\n");
-    SolrServer coreadmin = getSolrAdmin();
-    CoreAdminRequest.reloadCore(collection, coreadmin);
+    h.getCoreContainer().reload(collection);
 
     up.process( getSolrCore() );
 
@@ -133,42 +109,33 @@ public class AnalysisAfterCoreReloadTest
     SolrCore core = h.getCoreContainer().getCore(collection);
     try {
       String configDir = core.getResourceLoader().getConfigDir();
+      FileUtils.moveFile(new File(configDir, "stopwords.txt"), new File(configDir, "stopwords.txt.bak"));
       File file = new File(configDir, "stopwords.txt");
       FileUtils.writeStringToFile(file, stopwords);
+     
     } finally {
       core.close();
     }
   }
   
-  protected SolrServer getSolrAdmin() {
-    return createServer("");
-  }
-  protected SolrServer getSolrCore() {
-    return createServer(collection);
-  }
-  private SolrServer createServer( String name ) {
+  @Override
+  public void tearDown() throws Exception {
+    SolrCore core = h.getCoreContainer().getCore(collection);
+    String configDir;
     try {
-      // setup the server...
-      String url = "http://127.0.0.1:"+port+context+"/"+name;
-      HttpSolrServer s = new HttpSolrServer( url );
-      s.setConnectionTimeout(SolrTestCaseJ4.DEFAULT_CONNECTION_TIMEOUT);
-      s.setDefaultMaxConnectionsPerHost(100);
-      s.setMaxTotalConnections(100);
-      return s;
+      configDir = core.getResourceLoader().getConfigDir();
+    } finally {
+      core.close();
     }
-    catch( Exception ex ) {
-      throw new RuntimeException( ex );
+    super.tearDown();
+    if (new File(configDir, "stopwords.txt.bak").exists()) {
+      FileUtils.deleteQuietly(new File(configDir, "stopwords.txt"));
+      FileUtils.moveFile(new File(configDir, "stopwords.txt.bak"), new File(configDir, "stopwords.txt"));
     }
   }
 
-  @Override
-  public String getSchemaFile() {
-    return "schema.xml";
-  }
-
-  @Override
-  public String getSolrConfigFile() {
-    return "solrconfig.xml";
+  protected SolrServer getSolrCore() {
+    return new EmbeddedSolrServer(h.getCore());
   }
 
 }

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZk2Test.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZk2Test.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZk2Test.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZk2Test.java Mon Oct 29 14:55:01 2012
@@ -33,13 +33,22 @@ import org.apache.solr.common.cloud.ZkSt
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.servlet.SolrDispatchFilter;
+import org.junit.BeforeClass;
 
 /**
  * This test simply does a bunch of basic things in solrcloud mode and asserts things
  * work as expected.
  */
 public class BasicDistributedZk2Test extends AbstractFullDistribZkTestBase {
-
+  @BeforeClass
+  public static void beforeThisClass2() throws Exception {
+    // TODO: we use an fs based dir because something
+    // like a ram dir will not recover correctly right now
+    // because tran log will still exist on restart and ram
+    // dir will not persist - perhaps translog can empty on
+    // start if using an EphemeralDirectoryFactory 
+    useFactory(null);
+  }
   /*
    * (non-Javadoc)
    * 
@@ -59,11 +68,11 @@ public class BasicDistributedZk2Test ext
           "now is the time for all good men", "foo_f", 1.414f, "foo_b", "true",
           "foo_d", 1.414d);
       
-      // make sure we are in a steady state...
-      waitForRecoveriesToFinish(false);
-      
       commit();
       
+      // make sure we are in a steady state...
+      waitForRecoveriesToFinish(false);
+
       assertDocCounts(false);
       
       indexAbunchOfDocs();
@@ -100,6 +109,7 @@ public class BasicDistributedZk2Test ext
       
       // TODO: bring this to it's own method?
       // try indexing to a leader that has no replicas up
+      ZkStateReader zkStateReader = cloudClient.getZkStateReader();
       ZkNodeProps leaderProps = zkStateReader.getLeaderProps(
           DEFAULT_COLLECTION, SHARD2);
       
@@ -175,9 +185,13 @@ public class BasicDistributedZk2Test ext
 
     query("q", "*:*", "sort", "n_tl1 desc");
     
+    int oldLiveNodes = cloudClient.getZkStateReader().getZkClient().getChildren(ZkStateReader.LIVE_NODES_ZKNODE, null, true).size();
+    
+    assertEquals(5, oldLiveNodes);
+    
     // kill a shard
     CloudJettyRunner deadShard = chaosMonkey.stopShard(SHARD2, 0);
-    cloudClient.connect();
+
 
     // we are careful to make sure the downed node is no longer in the state,
     // because on some systems (especially freebsd w/ blackhole enabled), trying
@@ -186,10 +200,23 @@ public class BasicDistributedZk2Test ext
     jetties.addAll(shardToJetty.get(SHARD2));
     jetties.remove(deadShard);
     
+    // wait till live nodes drops by 1
+    int liveNodes = cloudClient.getZkStateReader().getZkClient().getChildren(ZkStateReader.LIVE_NODES_ZKNODE, null, true).size();
+    int tries = 50;
+    while(oldLiveNodes == liveNodes) {
+      Thread.sleep(100);
+      if (tries-- == 0) {
+        fail("We expected a node to drop...");
+      }
+      liveNodes = cloudClient.getZkStateReader().getZkClient().getChildren(ZkStateReader.LIVE_NODES_ZKNODE, null, true).size();
+    }
+    assertEquals(4, liveNodes);
+
+    int cnt = 0;
     for (CloudJettyRunner cjetty : jetties) {
       waitToSeeNotLive(((SolrDispatchFilter) cjetty.jetty.getDispatchFilter()
           .getFilter()).getCores().getZkController().getZkStateReader(),
-          deadShard);
+          deadShard, cnt++);
     }
     waitToSeeNotLive(cloudClient.getZkStateReader(), deadShard);
 
@@ -203,6 +230,9 @@ public class BasicDistributedZk2Test ext
     }
     
     commit();
+    
+    printLayout();
+    
     query("q", "*:*", "sort", "n_tl1 desc");
     
     // long cloudClientDocs = cloudClient.query(new

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/BasicDistributedZkTest.java Mon Oct 29 14:55:01 2012
@@ -27,6 +27,7 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Random;
 import java.util.Set;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CompletionService;
@@ -69,9 +70,11 @@ import org.apache.solr.common.params.Com
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.UpdateParams;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.update.DirectUpdateHandler2;
 import org.apache.solr.update.SolrCmdDistributor.Request;
 import org.apache.solr.util.DefaultSolrThreadFactory;
 import org.junit.Before;
+import org.junit.BeforeClass;
 
 /**
  * This test simply does a bunch of basic things in solrcloud mode and asserts things
@@ -111,6 +114,12 @@ public class BasicDistributedZkTest exte
   CompletionService<Request> completionService;
   Set<Future<Request>> pending;
   
+  @BeforeClass
+  public static void beforeThisClass2() throws Exception {
+    // TODO: we use an fs based dir because something
+    // like a ram dir will not recover correctly right now
+    useFactory(null);
+  }
   
   @Before
   @Override
@@ -124,7 +133,7 @@ public class BasicDistributedZkTest exte
     fixShardCount = true;
     
     sliceCount = 2;
-    shardCount = 3;
+    shardCount = 4;
     completionService = new ExecutorCompletionService<Request>(executor);
     pending = new HashSet<Future<Request>>();
     
@@ -151,7 +160,7 @@ public class BasicDistributedZkTest exte
   public void doTest() throws Exception {
     // setLoggingLevel(null);
 
-    
+    ZkStateReader zkStateReader = cloudClient.getZkStateReader();
     // make sure we have leaders for each shard
     for (int j = 1; j < sliceCount; j++) {
       zkStateReader.getLeaderProps(DEFAULT_COLLECTION, "shard" + j, 10000);
@@ -330,13 +339,278 @@ public class BasicDistributedZkTest exte
     testUpdateProcessorsRunOnlyOnce("distrib-dup-test-chain-implicit");
 
     testCollectionsAPI();
-    
+    testCoreUnloadAndLeaders();
+    testUnloadLotsOfCores();
     // Thread.sleep(10000000000L);
     if (DEBUG) {
       super.printLayout();
     }
   }
 
+  /**
+   * @throws Exception on any problem
+   */
+  private void testCoreUnloadAndLeaders() throws Exception {
+    // create a new collection collection
+    SolrServer client = clients.get(0);
+    String url1 = getBaseUrl(client);
+    HttpSolrServer server = new HttpSolrServer(url1);
+    
+    Create createCmd = new Create();
+    createCmd.setCoreName("unloadcollection1");
+    createCmd.setCollection("unloadcollection");
+    createCmd.setNumShards(1);
+    String core1DataDir = dataDir.getAbsolutePath() + File.separator + System.currentTimeMillis() + "unloadcollection1" + "_1n";
+    createCmd.setDataDir(core1DataDir);
+    server.request(createCmd);
+    
+    ZkStateReader zkStateReader = solrj.getZkStateReader();
+    
+    zkStateReader.updateClusterState(true);
+
+    int slices = zkStateReader.getClusterState().getCollectionStates().get("unloadcollection").size();
+    assertEquals(1, slices);
+    
+    client = clients.get(1);
+    String url2 = getBaseUrl(client);
+    server = new HttpSolrServer(url2);
+    
+    createCmd = new Create();
+    createCmd.setCoreName("unloadcollection2");
+    createCmd.setCollection("unloadcollection");
+    String core2dataDir = dataDir.getAbsolutePath() + File.separator + System.currentTimeMillis() + "unloadcollection1" + "_2n";
+    createCmd.setDataDir(core2dataDir);
+    server.request(createCmd);
+    
+    zkStateReader.updateClusterState(true);
+    slices = zkStateReader.getClusterState().getCollectionStates().get("unloadcollection").size();
+    assertEquals(1, slices);
+    
+    waitForRecoveriesToFinish("unloadcollection", zkStateReader, false);
+    
+    ZkCoreNodeProps leaderProps = getLeaderUrlFromZk("unloadcollection", "shard1");
+    
+    Random random = random();
+    HttpSolrServer collectionClient;
+    if (random.nextBoolean()) {
+      collectionClient = new HttpSolrServer(leaderProps.getCoreUrl());
+      // lets try and use the solrj client to index and retrieve a couple
+      // documents
+      SolrInputDocument doc1 = getDoc(id, 6, i1, -600, tlong, 600, t1,
+          "humpty dumpy sat on a wall");
+      SolrInputDocument doc2 = getDoc(id, 7, i1, -600, tlong, 600, t1,
+          "humpty dumpy3 sat on a walls");
+      SolrInputDocument doc3 = getDoc(id, 8, i1, -600, tlong, 600, t1,
+          "humpty dumpy2 sat on a walled");
+      collectionClient.add(doc1);
+      collectionClient.add(doc2);
+      collectionClient.add(doc3);
+      collectionClient.commit();
+    }
+
+    // create another replica for our collection
+    client = clients.get(2);
+    String url3 = getBaseUrl(client);
+    server = new HttpSolrServer(url3);
+    
+    createCmd = new Create();
+    createCmd.setCoreName("unloadcollection3");
+    createCmd.setCollection("unloadcollection");
+    String core3dataDir = dataDir.getAbsolutePath() + File.separator + System.currentTimeMillis() + "unloadcollection" + "_3n";
+    createCmd.setDataDir(core3dataDir);
+    server.request(createCmd);
+    
+    waitForRecoveriesToFinish("unloadcollection", zkStateReader, false);
+    
+    // so that we start with some versions when we reload...
+    DirectUpdateHandler2.commitOnClose = false;
+    
+    HttpSolrServer addClient = new HttpSolrServer(url3 + "/unloadcollection3");
+    // add a few docs
+    for (int x = 20; x < 100; x++) {
+      SolrInputDocument doc1 = getDoc(id, x, i1, -600, tlong, 600, t1,
+          "humpty dumpy sat on a wall");
+      addClient.add(doc1);
+    }
+
+    // don't commit so they remain in the tran log
+    //collectionClient.commit();
+    
+    // unload the leader
+    collectionClient = new HttpSolrServer(leaderProps.getBaseUrl());
+    
+    Unload unloadCmd = new Unload(false);
+    unloadCmd.setCoreName(leaderProps.getCoreName());
+    ModifiableSolrParams p = (ModifiableSolrParams) unloadCmd.getParams();
+
+    collectionClient.request(unloadCmd);
+
+//    Thread.currentThread().sleep(500);
+//    printLayout();
+    
+    int tries = 20;
+    while (leaderProps.getCoreUrl().equals(zkStateReader.getLeaderUrl("unloadcollection", "shard1", 15000))) {
+      Thread.sleep(100);
+      if (tries-- == 0) {
+        fail("Leader never changed");
+      }
+    }
+    
+    // ensure there is a leader
+    zkStateReader.getLeaderProps("unloadcollection", "shard1", 15000);
+    
+    addClient = new HttpSolrServer(url2 + "/unloadcollection2");
+    // add a few docs while the leader is down
+    for (int x = 101; x < 200; x++) {
+      SolrInputDocument doc1 = getDoc(id, x, i1, -600, tlong, 600, t1,
+          "humpty dumpy sat on a wall");
+      addClient.add(doc1);
+    }
+    
+    
+    // create another replica for our collection
+    client = clients.get(3);
+    String url4 = getBaseUrl(client);
+    server = new HttpSolrServer(url4);
+    
+    createCmd = new Create();
+    createCmd.setCoreName("unloadcollection4");
+    createCmd.setCollection("unloadcollection");
+    String core4dataDir = dataDir.getAbsolutePath() + File.separator + System.currentTimeMillis() + "unloadcollection" + "_4n";
+    createCmd.setDataDir(core4dataDir);
+    server.request(createCmd);
+    
+    waitForRecoveriesToFinish("unloadcollection", zkStateReader, false);
+    
+    // unload the leader again
+    leaderProps = getLeaderUrlFromZk("unloadcollection", "shard1");
+    collectionClient = new HttpSolrServer(leaderProps.getBaseUrl());
+    
+    unloadCmd = new Unload(false);
+    unloadCmd.setCoreName(leaderProps.getCoreName());
+    p = (ModifiableSolrParams) unloadCmd.getParams();
+    collectionClient.request(unloadCmd);
+    
+    tries = 20;
+    while (leaderProps.getCoreUrl().equals(zkStateReader.getLeaderUrl("unloadcollection", "shard1", 15000))) {
+      Thread.sleep(100);
+      if (tries-- == 0) {
+        fail("Leader never changed");
+      }
+    }
+    
+    zkStateReader.getLeaderProps("unloadcollection", "shard1", 15000);
+    
+    
+    // set this back
+    DirectUpdateHandler2.commitOnClose = true;
+    
+    // bring the downed leader back as replica
+    server = new HttpSolrServer(leaderProps.getBaseUrl());
+    
+    createCmd = new Create();
+    createCmd.setCoreName(leaderProps.getCoreName());
+    createCmd.setCollection("unloadcollection");
+    createCmd.setDataDir(core1DataDir);
+    server.request(createCmd);
+
+    waitForRecoveriesToFinish("unloadcollection", zkStateReader, false);
+    
+    
+    server = new HttpSolrServer(url1 + "/unloadcollection");
+   // System.out.println(server.query(new SolrQuery("*:*")).getResults().getNumFound());
+    server = new HttpSolrServer(url2 + "/unloadcollection");
+    server.commit();
+    SolrQuery q = new SolrQuery("*:*");
+    q.set("distrib", false);
+    long found1 = server.query(q).getResults().getNumFound();
+    server = new HttpSolrServer(url3 + "/unloadcollection");
+    server.commit();
+    q = new SolrQuery("*:*");
+    q.set("distrib", false);
+    long found3 = server.query(q).getResults().getNumFound();
+    server = new HttpSolrServer(url4 + "/unloadcollection");
+    server.commit();
+    q = new SolrQuery("*:*");
+    q.set("distrib", false);
+    long found4 = server.query(q).getResults().getNumFound();
+    
+    // all 3 shards should now have the same number of docs
+    assertEquals(found1, found3);
+    assertEquals(found3, found4);
+    
+  }
+  
+  private void testUnloadLotsOfCores() throws Exception {
+    SolrServer client = clients.get(2);
+    String url3 = getBaseUrl(client);
+    final HttpSolrServer server = new HttpSolrServer(url3);
+    
+    ThreadPoolExecutor executor = new ThreadPoolExecutor(0, Integer.MAX_VALUE,
+        5, TimeUnit.SECONDS, new SynchronousQueue<Runnable>(),
+        new DefaultSolrThreadFactory("testExecutor"));
+    int cnt = atLeast(6);
+    for (int i = 0; i < cnt; i++) {
+      final int freezeI = i;
+      executor.execute(new Runnable() {
+        
+        @Override
+        public void run() {
+          Create createCmd = new Create();
+          createCmd.setCoreName("multiunload" + freezeI);
+          createCmd.setCollection("multiunload");
+          String core3dataDir = dataDir.getAbsolutePath() + File.separator
+              + System.currentTimeMillis() + "unloadcollection" + "_3n" + freezeI;
+          createCmd.setDataDir(core3dataDir);
+          try {
+            server.request(createCmd);
+          } catch (SolrServerException e) {
+            throw new RuntimeException(e);
+          } catch (IOException e) {
+            throw new RuntimeException(e);
+          }
+        }
+        
+      });
+    }
+    executor.shutdown();
+    executor.awaitTermination(120, TimeUnit.SECONDS);
+    executor = new ThreadPoolExecutor(0, Integer.MAX_VALUE, 5,
+        TimeUnit.SECONDS, new SynchronousQueue<Runnable>(),
+        new DefaultSolrThreadFactory("testExecutor"));
+    for (int j = 0; j < cnt; j++) {
+      final int freezeJ = j;
+      executor.execute(new Runnable() {
+        @Override
+        public void run() {
+          Unload unloadCmd = new Unload(true);
+          unloadCmd.setCoreName("multiunload" + freezeJ);
+          try {
+            server.request(unloadCmd);
+          } catch (SolrServerException e) {
+            throw new RuntimeException(e);
+          } catch (IOException e) {
+            throw new RuntimeException(e);
+          }
+        }
+      });
+      Thread.sleep(random().nextInt(50));
+    }
+    executor.shutdown();
+    executor.awaitTermination(120, TimeUnit.SECONDS);
+  }
+
+
+  private String getBaseUrl(SolrServer client) {
+    String url2 = ((HttpSolrServer) client).getBaseURL()
+        .substring(
+            0,
+            ((HttpSolrServer) client).getBaseURL().length()
+                - DEFAULT_COLLECTION.length() -1);
+    return url2;
+  }
+
+
   private void testCollectionsAPI() throws Exception {
  
     // TODO: fragile - because we dont pass collection.confName, it will only
@@ -347,32 +621,13 @@ public class BasicDistributedZkTest exte
     // create new collections rapid fire
     Map<String,List<Integer>> collectionInfos = new HashMap<String,List<Integer>>();
     int cnt = atLeast(3);
+    
     for (int i = 0; i < cnt; i++) {
-      ModifiableSolrParams params = new ModifiableSolrParams();
-      params.set("action", CollectionAction.CREATE.toString());
-      int numShards = _TestUtil.nextInt(random(), 0, shardCount) + 1;
-      int numReplicas = _TestUtil.nextInt(random(), 0, 5) + 1;
-      params.set("numShards", numShards);
-      params.set(OverseerCollectionProcessor.REPLICATION_FACTOR, numReplicas);
-      String collectionName = "awholynewcollection_" + i;
-      int clientIndex = random().nextInt(2);
-      List<Integer> list = new ArrayList<Integer>();
-      list.add(numShards);
-      list.add(numReplicas);
-      collectionInfos.put(collectionName, list);
-      params.set("name", collectionName);
-      SolrRequest request = new QueryRequest(params);
-      request.setPath("/admin/collections");
-   
-      final String baseUrl = ((HttpSolrServer) clients.get(clientIndex)).getBaseURL().substring(
-          0,
-          ((HttpSolrServer) clients.get(clientIndex)).getBaseURL().length()
-              - DEFAULT_COLLECTION.length() - 1);
-      
-      createNewSolrServer("", baseUrl).request(request);
+      createCollection(collectionInfos, i,
+          _TestUtil.nextInt(random(), 0, shardCount) + 1,
+          _TestUtil.nextInt(random(), 0, 5) + 1);
     }
     
-    
     Set<Entry<String,List<Integer>>> collectionInfosEntrySet = collectionInfos.entrySet();
     for (Entry<String,List<Integer>> entry : collectionInfosEntrySet) {
       String collection = entry.getKey();
@@ -386,9 +641,9 @@ public class BasicDistributedZkTest exte
       // poll for a second - it can take a moment before we are ready to serve
       waitForNon403or404or503(collectionClient);
     }
-    
-    for (int i = 0; i < cnt; i++) {
-      waitForRecoveriesToFinish("awholynewcollection_" + i, zkStateReader, false);
+    ZkStateReader zkStateReader = solrj.getZkStateReader();
+    for (int j = 0; j < cnt; j++) {
+      waitForRecoveriesToFinish("awholynewcollection_" + j, zkStateReader, false);
     }
     
     List<String> collectionNameList = new ArrayList<String>();
@@ -400,7 +655,7 @@ public class BasicDistributedZkTest exte
     HttpSolrServer collectionClient = new HttpSolrServer(url);
     
     
-    // lets try and use the solrj client to index and retrieve a couple documents
+    // lets try and use the solrj client to index a couple documents
     SolrInputDocument doc1 = getDoc(id, 6, i1, -600, tlong, 600, t1,
         "humpty dumpy sat on a wall");
     SolrInputDocument doc2 = getDoc(id, 7, i1, -600, tlong, 600, t1,
@@ -442,6 +697,9 @@ public class BasicDistributedZkTest exte
     boolean allTimesAreCorrect = waitForReloads(collectionName, urlToTimeBefore);
     assertTrue("some core start times did not change on reload", allTimesAreCorrect);
     
+    
+    waitForRecoveriesToFinish("awholynewcollection_" + (cnt - 1), zkStateReader, false);
+    
     // remove a collection
     params = new ModifiableSolrParams();
     params.set("action", CollectionAction.DELETE.toString());
@@ -453,9 +711,37 @@ public class BasicDistributedZkTest exte
     
     // ensure its out of the state
     checkForMissingCollection(collectionName);
+    
+    //collectionNameList.remove(collectionName);
 
   }
 
+
+  protected void createCollection(Map<String,List<Integer>> collectionInfos,
+      int i, int numShards, int numReplicas) throws SolrServerException, IOException {
+    ModifiableSolrParams params = new ModifiableSolrParams();
+    params.set("action", CollectionAction.CREATE.toString());
+
+    params.set("numShards", numShards);
+    params.set(OverseerCollectionProcessor.REPLICATION_FACTOR, numReplicas);
+    String collectionName = "awholynewcollection_" + i;
+    int clientIndex = random().nextInt(2);
+    List<Integer> list = new ArrayList<Integer>();
+    list.add(numShards);
+    list.add(numReplicas);
+    collectionInfos.put(collectionName, list);
+    params.set("name", collectionName);
+    SolrRequest request = new QueryRequest(params);
+    request.setPath("/admin/collections");
+  
+    final String baseUrl = ((HttpSolrServer) clients.get(clientIndex)).getBaseURL().substring(
+        0,
+        ((HttpSolrServer) clients.get(clientIndex)).getBaseURL().length()
+            - DEFAULT_COLLECTION.length() - 1);
+    
+    createNewSolrServer("", baseUrl).request(request);
+  }
+
   private boolean waitForReloads(String collectionName, Map<String,Long> urlToTimeBefore) throws SolrServerException, IOException {
     
     
@@ -537,6 +823,15 @@ public class BasicDistributedZkTest exte
     
     throw new RuntimeException("Could not find a live node for collection:" + collection);
   }
+  
+  private ZkCoreNodeProps getLeaderUrlFromZk(String collection, String slice) {
+    ClusterState clusterState = solrj.getZkStateReader().getClusterState();
+    ZkNodeProps leader = clusterState.getLeader(collection, slice);
+    if (leader == null) {
+      throw new RuntimeException("Could not find leader:" + collection + " " + slice);
+    }
+    return new ZkCoreNodeProps(leader);
+  }
 
   private void waitForNon403or404or503(HttpSolrServer collectionClient)
       throws Exception {
@@ -560,7 +855,7 @@ public class BasicDistributedZkTest exte
       }
       Thread.sleep(50);
     }
-    printLayout();
+
     fail("Could not find the new collection - " + exp.code() + " : " + collectionClient.getBaseURL());
   }
 
@@ -950,21 +1245,30 @@ public class BasicDistributedZkTest exte
     
     indexDoc("collection2", getDoc(id, "10000000")); 
     indexDoc("collection2", getDoc(id, "10000001")); 
-    indexDoc("collection2", getDoc(id, "10000003")); 
-    
+    indexDoc("collection2", getDoc(id, "10000003"));
+    solrj.setDefaultCollection("collection2");
+    solrj.add(getDoc(id, "10000004"));
+    solrj.setDefaultCollection(null);
     
     indexDoc("collection3", getDoc(id, "20000000"));
     indexDoc("collection3", getDoc(id, "20000001")); 
+    solrj.setDefaultCollection("collection3");
+    solrj.add(getDoc(id, "10000005"));
+    solrj.setDefaultCollection(null);
     
     otherCollectionClients.get("collection2").get(0).commit();
     otherCollectionClients.get("collection3").get(0).commit();
     
+    solrj.setDefaultCollection("collection1");
     long collection1Docs = solrj.query(new SolrQuery("*:*")).getResults()
         .getNumFound();
+
     long collection2Docs = otherCollectionClients.get("collection2").get(0)
         .query(new SolrQuery("*:*")).getResults().getNumFound();
+    System.out.println("found2: "+ collection2Docs);
     long collection3Docs = otherCollectionClients.get("collection3").get(0)
         .query(new SolrQuery("*:*")).getResults().getNumFound();
+    System.out.println("found3: "+ collection3Docs);
     
     SolrQuery query = new SolrQuery("*:*");
     query.set("collection", "collection2,collection3");
@@ -991,6 +1295,8 @@ public class BasicDistributedZkTest exte
     query.remove("collection");
     found = solrj.query(query).getResults().getNumFound();
     assertEquals(collection1Docs, found);
+    
+    assertEquals(collection3Docs, collection2Docs - 1);
   }
   
   protected SolrInputDocument getDoc(Object... fields) throws Exception {
@@ -1099,5 +1405,8 @@ public class BasicDistributedZkTest exte
     }
     System.clearProperty("numShards");
     System.clearProperty("zkHost");
+    
+    // insurance
+    DirectUpdateHandler2.commitOnClose = true;
   }
 }

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/ChaosMonkeyNothingIsSafeTest.java Mon Oct 29 14:55:01 2012
@@ -29,6 +29,7 @@ import org.apache.solr.client.solrj.impl
 import org.apache.solr.client.solrj.impl.HttpClientUtil;
 import org.apache.solr.client.solrj.impl.HttpSolrServer;
 import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.cloud.ZkStateReader;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -82,7 +83,7 @@ public class ChaosMonkeyNothingIsSafeTes
       handle.clear();
       handle.put("QTime", SKIPVAL);
       handle.put("timestamp", SKIPVAL);
-      
+      ZkStateReader zkStateReader = cloudClient.getZkStateReader();
       // make sure we have leaders for each shard
       for (int j = 1; j < sliceCount; j++) {
         zkStateReader.getLeaderProps(DEFAULT_COLLECTION, "shard" + j, 10000);
@@ -189,19 +190,6 @@ public class ChaosMonkeyNothingIsSafeTes
       }
     }
   }
-  
-  // skip the randoms - they can deadlock...
-  protected void indexr(Object... fields) throws Exception {
-    SolrInputDocument doc = getDoc(fields);
-    indexDoc(doc);
-  }
-
-  private SolrInputDocument getDoc(Object... fields) {
-    SolrInputDocument doc = new SolrInputDocument();
-    addFields(doc, fields);
-    addFields(doc, "rnd_b", true);
-    return doc;
-  }
 
   class FullThrottleStopableIndexingThread extends StopableIndexingThread {
     private HttpClient httpClient = HttpClientUtil.createClient(null);
@@ -306,4 +294,18 @@ public class ChaosMonkeyNothingIsSafeTes
     
   };
   
+  
+  // skip the randoms - they can deadlock...
+  protected void indexr(Object... fields) throws Exception {
+    SolrInputDocument doc = getDoc(fields);
+    indexDoc(doc);
+  }
+
+  SolrInputDocument getDoc(Object... fields) throws Exception {
+    SolrInputDocument doc = new SolrInputDocument();
+    addFields(doc, fields);
+    addFields(doc, "rnd_b", true);
+    return doc;
+  }
+  
 }

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudDistribCmdsTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudDistribCmdsTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudDistribCmdsTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/FullSolrCloudDistribCmdsTest.java Mon Oct 29 14:55:01 2012
@@ -131,6 +131,7 @@ public class FullSolrCloudDistribCmdsTes
   }
 
   private void testThatCantForwardToLeaderFails() throws Exception {
+    ZkStateReader zkStateReader = cloudClient.getZkStateReader();
     ZkNodeProps props = zkStateReader.getLeaderProps(DEFAULT_COLLECTION, "shard1");
     
     chaosMonkey.stopShard("shard1");
@@ -250,7 +251,6 @@ public class FullSolrCloudDistribCmdsTes
   
   private void testOptimisticUpdate(QueryResponse results) throws Exception {
     SolrDocument doc = results.getResults().get(0);
-    System.out.println("version:" + doc.getFieldValue(VersionInfo.VERSION_FIELD));
     Long version = (Long) doc.getFieldValue(VersionInfo.VERSION_FIELD);
     Integer theDoc = (Integer) doc.getFieldValue("id");
     UpdateRequest uReq = new UpdateRequest();

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java Mon Oct 29 14:55:01 2012
@@ -478,7 +478,7 @@ public class OverseerTest extends SolrTe
   }
   
   private void verifyShardLeader(ZkStateReader reader, String collection, String shard, String expectedCore) throws InterruptedException, KeeperException {
-    int maxIterations = 100;
+    int maxIterations = 200;
     while(maxIterations-->0) {
       reader.updateClusterState(true); // poll state
       ZkNodeProps props =  reader.getClusterState().getLeader(collection, shard);

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/RecoveryZkTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/RecoveryZkTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/RecoveryZkTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/RecoveryZkTest.java Mon Oct 29 14:55:01 2012
@@ -24,6 +24,7 @@ import org.apache.solr.client.solrj.Solr
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.cloud.ZkStateReader;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -71,7 +72,7 @@ public class RecoveryZkTest extends Abst
     
     // make sure replication can start
     Thread.sleep(1500);
-    
+    ZkStateReader zkStateReader = cloudClient.getZkStateReader();
     waitForRecoveriesToFinish(DEFAULT_COLLECTION, zkStateReader, false, true);
     
     // stop indexing threads

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/SyncSliceTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/SyncSliceTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/SyncSliceTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/SyncSliceTest.java Mon Oct 29 14:55:01 2012
@@ -47,8 +47,11 @@ import org.junit.BeforeClass;
 public class SyncSliceTest extends AbstractFullDistribZkTestBase {
   
   @BeforeClass
-  public static void beforeSuperClass() {
-    
+  public static void beforeSuperClass() throws Exception {
+    // TODO: we use an fs based dir because something
+    // like a ram dir will not recovery correctly right now
+    // due to tran log persisting across restarts
+    useFactory(null);
   }
   
   @AfterClass
@@ -159,7 +162,7 @@ public class SyncSliceTest extends Abstr
     // to talk to a downed node causes grief
     waitToSeeDownInClusterState(leaderJetty, jetties);
 
-    waitForThingsToLevelOut(15);
+    waitForThingsToLevelOut(45);
     
     checkShardConsistency(false, true);
     

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/ZkSolrClientTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/ZkSolrClientTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/ZkSolrClientTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/cloud/ZkSolrClientTest.java Mon Oct 29 14:55:01 2012
@@ -19,23 +19,26 @@ package org.apache.solr.cloud;
 
 import java.io.File;
 import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.CyclicBarrier;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import junit.framework.Assert;
-import junit.framework.TestCase;
 
 import org.apache.solr.common.cloud.SolrZkClient;
-import org.apache.solr.core.SolrConfig;
 import org.apache.solr.util.AbstractSolrTestCase;
 import org.apache.zookeeper.KeeperException;
 import org.apache.zookeeper.WatchedEvent;
 import org.apache.zookeeper.Watcher;
 import org.junit.AfterClass;
+import org.junit.BeforeClass;
 
 public class ZkSolrClientTest extends AbstractSolrTestCase {
   private static final boolean DEBUG = false;
 
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema.xml");
+  }
+  
   public void testConnect() throws Exception {
     String zkDir = dataDir.getAbsolutePath() + File.separator
         + "zookeeper/server1/data";
@@ -43,7 +46,7 @@ public class ZkSolrClientTest extends Ab
 
     server = new ZkTestServer(zkDir);
     server.run();
-
+    AbstractZkTestCase.tryCleanSolrZkNode(server.getZkHost());
     SolrZkClient zkClient = new SolrZkClient(server.getZkAddress(), AbstractZkTestCase.TIMEOUT);
 
     zkClient.close();
@@ -57,7 +60,7 @@ public class ZkSolrClientTest extends Ab
 
     server = new ZkTestServer(zkDir);
     server.run();
-
+    AbstractZkTestCase.tryCleanSolrZkNode(server.getZkHost());
     AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
 
     SolrZkClient zkClient = new SolrZkClient(server.getZkHost(),
@@ -77,7 +80,7 @@ public class ZkSolrClientTest extends Ab
     try {
       server = new ZkTestServer(zkDir);
       server.run();
-
+      AbstractZkTestCase.tryCleanSolrZkNode(server.getZkHost());
       AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
 
       zkClient = new SolrZkClient(server.getZkAddress(), AbstractZkTestCase.TIMEOUT);
@@ -170,6 +173,7 @@ public class ZkSolrClientTest extends Ab
     final AtomicInteger cnt = new AtomicInteger();
     ZkTestServer server = new ZkTestServer(zkDir);
     server.run();
+    AbstractZkTestCase.tryCleanSolrZkNode(server.getZkHost());
     Thread.sleep(400);
     AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
     final SolrZkClient zkClient = new SolrZkClient(server.getZkAddress(), AbstractZkTestCase.TIMEOUT);
@@ -234,16 +238,6 @@ public class ZkSolrClientTest extends Ab
   }
 
   @Override
-  public String getSchemaFile() {
-    return null;
-  }
-
-  @Override
-  public String getSolrConfigFile() {
-    return null;
-  }
-  
-  @Override
   public void tearDown() throws Exception {
     super.tearDown();
   }

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/AlternateDirectoryTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/AlternateDirectoryTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/AlternateDirectoryTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/AlternateDirectoryTest.java Mon Oct 29 14:55:01 2012
@@ -41,7 +41,7 @@ public class AlternateDirectoryTest exte
     assertTrue(TestIndexReaderFactory.newReaderCalled);
   }
 
-  static public class TestFSDirectoryFactory extends CachingDirectoryFactory {
+  static public class TestFSDirectoryFactory extends StandardDirectoryFactory {
     public static volatile boolean openCalled = false;
     public static volatile Directory dir;
     

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/IndexReaderFactoryTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/IndexReaderFactoryTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/IndexReaderFactoryTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/IndexReaderFactoryTest.java Mon Oct 29 14:55:01 2012
@@ -17,17 +17,13 @@ package org.apache.solr.core;
  */
 
 import org.apache.solr.util.AbstractSolrTestCase;
+import org.junit.BeforeClass;
 
 public class IndexReaderFactoryTest extends AbstractSolrTestCase {
 
-  @Override
-  public String getSchemaFile() {
-    return "schema.xml";
-  }
-
-  @Override
-  public String getSolrConfigFile() {
-    return "solrconfig-termindex.xml";
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig-termindex.xml", "schema.xml");
   }
 
   /**

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java Mon Oct 29 14:55:01 2012
@@ -67,7 +67,7 @@ public class SolrCoreCheckLockOnStartupT
       assertNotNull(t.getCause());
       assertTrue(t.getCause() instanceof RuntimeException);
       assertNotNull(t.getCause().getCause());
-      assertTrue(t.getCause().getCause() instanceof LockObtainFailedException);
+      assertTrue(t.getCause().getCause().toString(), t.getCause().getCause() instanceof LockObtainFailedException);
     } finally {
       indexWriter.close();
       directory.close();

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestArbitraryIndexDir.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestArbitraryIndexDir.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestArbitraryIndexDir.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestArbitraryIndexDir.java Mon Oct 29 14:55:01 2012
@@ -85,16 +85,6 @@ public class TestArbitraryIndexDir exten
 
   }
 
-  @Override
-  public String getSchemaFile() {
-    return null;
-  }
-
-  @Override
-  public String getSolrConfigFile() {
-    return null;  // prevent superclass from creating it's own TestHarness
-  }
-
   @Test
   public void testLoadNewIndexDir() throws IOException, ParserConfigurationException, SAXException, ParseException {
     //add a doc in original index dir

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestJmxIntegration.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestJmxIntegration.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestJmxIntegration.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestJmxIntegration.java Mon Oct 29 14:55:01 2012
@@ -20,6 +20,7 @@ import org.apache.solr.core.JmxMonitored
 import org.apache.solr.util.AbstractSolrTestCase;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Ignore;
 import org.junit.Test;
 
@@ -35,14 +36,10 @@ import java.util.*;
  */
 public class TestJmxIntegration extends AbstractSolrTestCase {
 
-  @Override
-  public String getSchemaFile() {
-    return "schema.xml";
-  }
-
-  @Override
-  public String getSolrConfigFile() {
-    return "solrconfig.xml";
+  
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema.xml");
   }
 
   @Override

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestPropInject.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestPropInject.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestPropInject.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestPropInject.java Mon Oct 29 14:55:01 2012
@@ -17,24 +17,19 @@ package org.apache.solr.core;
  * limitations under the License.
  */
 
-import java.io.IOException;
-
 import org.apache.lucene.index.ConcurrentMergeScheduler;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.LogByteSizeMergePolicy;
 import org.apache.solr.update.DirectUpdateHandler2;
 import org.apache.solr.util.AbstractSolrTestCase;
 import org.apache.solr.util.RefCounted;
+import org.junit.BeforeClass;
 
 public class TestPropInject extends AbstractSolrTestCase {
-  @Override
-  public String getSchemaFile() {
-    return "schema.xml";
-  }
 
-  @Override
-  public String getSolrConfigFile() {
-    return "solrconfig-propinject.xml";
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig-propinject.xml", "schema.xml");
   }
 
   public void testMergePolicy() throws Exception {

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestXIncludeConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestXIncludeConfig.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestXIncludeConfig.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/core/TestXIncludeConfig.java Mon Oct 29 14:55:01 2012
@@ -17,26 +17,19 @@ package org.apache.solr.core;
  * limitations under the License.
  */
 
-import org.apache.solr.update.processor.UpdateRequestProcessorChain;
-import org.apache.solr.update.processor.RegexReplaceProcessorFactory;
-
-import org.apache.solr.util.AbstractSolrTestCase;
-
 import javax.xml.parsers.DocumentBuilderFactory;
 
+import org.apache.solr.update.processor.RegexReplaceProcessorFactory;
+import org.apache.solr.update.processor.UpdateRequestProcessorChain;
+import org.apache.solr.util.AbstractSolrTestCase;
 import org.junit.Assume;
+import org.junit.BeforeClass;
 
 public class TestXIncludeConfig extends AbstractSolrTestCase {
 
-  @Override
-  public String getSchemaFile() {
-    return "schema-xinclude.xml";
-  }
-
-  //public String getSolrConfigFile() { return "solrconfig.xml"; }
-  @Override
-  public String getSolrConfigFile() {
-    return "solrconfig-xinclude.xml";
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig-xinclude.xml", "schema-xinclude.xml");
   }
 
   @Override

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/StandardRequestHandlerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/StandardRequestHandlerTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/StandardRequestHandlerTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/StandardRequestHandlerTest.java Mon Oct 29 14:55:01 2012
@@ -27,15 +27,19 @@ import org.apache.solr.request.LocalSolr
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.search.QueryParsing;
 import org.apache.solr.util.AbstractSolrTestCase;
+import org.junit.BeforeClass;
 
 /**
  * Most of the tests for StandardRequestHandler are in ConvertedLegacyTest
  * 
  */
 public class StandardRequestHandlerTest extends AbstractSolrTestCase {
-
-  @Override public String getSchemaFile() { return "schema.xml"; }
-  @Override public String getSolrConfigFile() { return "solrconfig.xml"; }
+  
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema.xml");
+  }
+  
   @Override public void setUp() throws Exception {
     super.setUp();
     lrf = h.getRequestFactory("standard", 0, 20 );

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java Mon Oct 29 14:55:01 2012
@@ -54,8 +54,8 @@ import org.apache.solr.common.params.Mod
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.util.AbstractSolrTestCase;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
+import org.junit.After;
+import org.junit.Before;
 
 /**
  * Test for ReplicationHandler
@@ -72,9 +72,9 @@ public class TestReplicationHandler exte
       + File.separator + "collection1" + File.separator + "conf"
       + File.separator;
 
-  static JettySolrRunner masterJetty, slaveJetty;
-  static SolrServer masterClient, slaveClient;
-  static SolrInstance master = null, slave = null;
+  JettySolrRunner masterJetty, slaveJetty;
+  SolrServer masterClient, slaveClient;
+  SolrInstance master = null, slave = null;
 
   static String context = "/solr";
 
@@ -83,9 +83,11 @@ public class TestReplicationHandler exte
   static int nDocs = 500;
 
 
-  @BeforeClass
-  public static void beforeClass() throws Exception {
-    useFactory(null); // need an FS factory
+  @Before
+  public void setup() throws Exception {
+    super.setUp();
+    // For manual testing only
+    // useFactory(null); // force an FS factory
     master = new SolrInstance("master", null);
     master.setUp();
     masterJetty = createJetty(master);
@@ -109,8 +111,9 @@ public class TestReplicationHandler exte
     }
   }
 
-  @AfterClass
-  public static void afterClass() throws Exception {
+  @After
+  public void tearDown() throws Exception {
+    super.tearDown();
     masterJetty.stop();
     slaveJetty.stop();
     master.tearDown();
@@ -415,7 +418,7 @@ public class TestReplicationHandler exte
     // setup an xslt dir to force subdir file replication
     File masterXsltDir = new File(master.getConfDir() + File.separator + "xslt");
     File masterXsl = new File(masterXsltDir, "dummy.xsl");
-    assertTrue(masterXsltDir.mkdir());
+    assertTrue("could not make dir " + masterXsltDir, masterXsltDir.mkdirs());
     assertTrue(masterXsl.createNewFile());
 
     File slaveXsltDir = new File(slave.getConfDir() + File.separator + "xslt");
@@ -522,6 +525,17 @@ public class TestReplicationHandler exte
     for (int i = 0; i < nDocs; i++)
       index(masterClient, "id", i, "name", "name = " + i);
 
+    // make sure prepareCommit doesn't mess up commit  (SOLR-3938)
+    // todo: make SolrJ easier to pass arbitrary params to
+    String masterUrl = "http://127.0.0.1:" + masterJetty.getLocalPort() + "/solr/update?prepareCommit=true";
+    URL url = new URL(masterUrl);
+    InputStream stream = url.openStream();
+    try {
+      stream.close();
+    } catch (IOException e) {
+      //e.printStackTrace();
+    }
+
     masterClient.commit();
 
     NamedList masterQueryRsp = rQuery(nDocs, "*:*", masterClient);
@@ -529,10 +543,10 @@ public class TestReplicationHandler exte
     assertEquals(nDocs, masterQueryResult.getNumFound());
 
     // snappull
-    String masterUrl = "http://127.0.0.1:" + slaveJetty.getLocalPort() + "/solr/replication?command=fetchindex&masterUrl=";
+    masterUrl = "http://127.0.0.1:" + slaveJetty.getLocalPort() + "/solr/replication?command=fetchindex&masterUrl=";
     masterUrl += "http://127.0.0.1:" + masterJetty.getLocalPort() + "/solr/replication";
-    URL url = new URL(masterUrl);
-    InputStream stream = url.openStream();
+    url = new URL(masterUrl);
+    stream = url.openStream();
     try {
       stream.close();
     } catch (IOException e) {
@@ -585,14 +599,10 @@ public class TestReplicationHandler exte
 
     nDocs--;
     masterClient.deleteByQuery("*:*");
-    for (int i = 0; i < nDocs; i++)
-      index(masterClient, "id", i, "name", "name = " + i);
 
     masterClient.commit();
 
-    NamedList masterQueryRsp = rQuery(nDocs, "*:*", masterClient);
-    SolrDocumentList masterQueryResult = (SolrDocumentList) masterQueryRsp.get("response");
-    assertEquals(nDocs, masterQueryResult.getNumFound());
+
 
     //change solrconfig having 'replicateAfter startup' option on master
     master.copyConfigFile(CONF_DIR + "solrconfig-master2.xml",
@@ -602,6 +612,16 @@ public class TestReplicationHandler exte
 
     masterJetty = createJetty(master);
     masterClient = createNewSolrServer(masterJetty.getLocalPort());
+    
+    for (int i = 0; i < nDocs; i++)
+      index(masterClient, "id", i, "name", "name = " + i);
+
+    masterClient.commit();
+    
+    NamedList masterQueryRsp = rQuery(nDocs, "*:*", masterClient);
+    SolrDocumentList masterQueryResult = (SolrDocumentList) masterQueryRsp.get("response");
+    assertEquals(nDocs, masterQueryResult.getNumFound());
+    
 
     slave.setTestPort(masterJetty.getLocalPort());
     slave.copyConfigFile(slave.getSolrConfigFile(), "solrconfig.xml");
@@ -639,15 +659,6 @@ public class TestReplicationHandler exte
     //stop slave
     slaveJetty.stop();
 
-    masterClient.deleteByQuery("*:*");
-    for (int i = 0; i < 10; i++)
-      index(masterClient, "id", i, "name", "name = " + i);
-
-    masterClient.commit();
-
-    NamedList masterQueryRsp = rQuery(10, "*:*", masterClient);
-    SolrDocumentList masterQueryResult = (SolrDocumentList) masterQueryRsp.get("response");
-    assertEquals(10, masterQueryResult.getNumFound());
 
     //change solrconfig having 'replicateAfter startup' option on master
     master.copyConfigFile(CONF_DIR + "solrconfig-master3.xml",
@@ -658,6 +669,16 @@ public class TestReplicationHandler exte
     masterJetty = createJetty(master);
     masterClient = createNewSolrServer(masterJetty.getLocalPort());
 
+    masterClient.deleteByQuery("*:*");
+    for (int i = 0; i < 10; i++)
+      index(masterClient, "id", i, "name", "name = " + i);
+
+    masterClient.commit();
+
+    NamedList masterQueryRsp = rQuery(10, "*:*", masterClient);
+    SolrDocumentList masterQueryResult = (SolrDocumentList) masterQueryRsp.get("response");
+    assertEquals(10, masterQueryResult.getNumFound());
+    
     slave.setTestPort(masterJetty.getLocalPort());
     slave.copyConfigFile(slave.getSolrConfigFile(), "solrconfig.xml");
 

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/admin/LukeRequestHandlerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/admin/LukeRequestHandlerTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/admin/LukeRequestHandlerTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/admin/LukeRequestHandlerTest.java Mon Oct 29 14:55:01 2012
@@ -17,28 +17,24 @@
 
 package org.apache.solr.handler.admin;
 
+import java.util.Arrays;
+import java.util.EnumSet;
+
 import org.apache.solr.common.luke.FieldFlag;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.util.AbstractSolrTestCase;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.util.EnumSet;
-import java.util.Arrays;
-
 /**
  * :TODO: currently only tests some of the utilities in the LukeRequestHandler
  */
 public class LukeRequestHandlerTest extends AbstractSolrTestCase {
 
-  @Override
-  public String getSchemaFile() {
-    return "schema12.xml";
-  }
-
-  @Override
-  public String getSolrConfigFile() {
-    return "solrconfig.xml";
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema12.xml");
   }
 
   @Before

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/handler/component/StatsComponentTest.java Mon Oct 29 14:55:01 2012
@@ -16,25 +16,23 @@ package org.apache.solr.handler.componen
  * limitations under the License.
  */
 
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.Locale;
 import java.util.Map;
-import java.util.HashMap;
 import java.util.TimeZone;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
 
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.MapSolrParams;
 import org.apache.solr.common.params.StatsParams;
-
-import org.apache.solr.schema.IndexSchema;
-import org.apache.solr.schema.SchemaField;
-
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.LocalSolrQueryRequest;
 import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.schema.SchemaField;
 import org.apache.solr.util.AbstractSolrTestCase;
+import org.junit.BeforeClass;
 
 
 /**
@@ -42,19 +40,15 @@ import org.apache.solr.util.AbstractSolr
  */
 public class StatsComponentTest extends AbstractSolrTestCase {
 
-  @Override
-  public String getSchemaFile() {
-    return "schema11.xml";
-  }
-
-  @Override
-  public String getSolrConfigFile() {
-    return "solrconfig.xml";
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema11.xml");
   }
 
   @Override
   public void setUp() throws Exception {
     super.setUp();
+    clearIndex();
     lrf = h.getRequestFactory("standard", 0, 20);
   }
 

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/highlight/HighlighterConfigTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/highlight/HighlighterConfigTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/highlight/HighlighterConfigTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/highlight/HighlighterConfigTest.java Mon Oct 29 14:55:01 2012
@@ -16,16 +16,19 @@
  */
 package org.apache.solr.highlight;
 
+import java.util.HashMap;
+
 import org.apache.solr.handler.component.HighlightComponent;
 import org.apache.solr.util.AbstractSolrTestCase;
 import org.apache.solr.util.TestHarness;
-
-import java.util.HashMap;
+import org.junit.BeforeClass;
 
 public class HighlighterConfigTest extends AbstractSolrTestCase {
-    @Override public String getSchemaFile() { return "schema.xml"; }
-    // the default case (i.e. <highlight> without a class attribute) is tested every time sorlconfig.xml is used
-    @Override public String getSolrConfigFile() { return "solrconfig-highlight.xml"; }
+
+    @BeforeClass
+    public static void beforeClass() throws Exception {
+      initCore("solrconfig-highlight.xml", "schema.xml");
+    }
 
     @Override
     public void setUp() throws Exception {

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/request/TestBinaryResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/request/TestBinaryResponseWriter.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/request/TestBinaryResponseWriter.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/request/TestBinaryResponseWriter.java Mon Oct 29 14:55:01 2012
@@ -16,22 +16,22 @@
  */
 package org.apache.solr.request;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.util.Locale;
+import java.util.UUID;
+
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.SolrDocumentList;
 import org.apache.solr.common.params.CommonParams;
-import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.JavaBinCodec;
+import org.apache.solr.common.util.NamedList;
 import org.apache.solr.response.BinaryQueryResponseWriter;
 import org.apache.solr.response.BinaryResponseWriter.Resolver;
 import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.search.ReturnFields;
-
 import org.apache.solr.util.AbstractSolrTestCase;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.util.Locale;
-import java.util.UUID;
+import org.junit.BeforeClass;
 
 /**
  * Test for BinaryResponseWriter
@@ -41,14 +41,10 @@ import java.util.UUID;
  */
 public class TestBinaryResponseWriter extends AbstractSolrTestCase {
 
-  @Override
-  public String getSchemaFile() {
-    return "schema12.xml";
-  }
-
-  @Override
-  public String getSolrConfigFile() {
-    return "solrconfig.xml";
+  
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema12.xml");
   }
 
   /**
@@ -96,7 +92,7 @@ public class TestBinaryResponseWriter ex
     assertTrue("ddd_s not found", out.getFieldNames().contains("ddd_s"));
     assertEquals("Wrong number of fields found", 
                  2, out.getFieldNames().size());
-
+    req.close();
 
   }
 

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/request/TestWriterPerf.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/request/TestWriterPerf.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/request/TestWriterPerf.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/request/TestWriterPerf.java Mon Oct 29 14:55:01 2012
@@ -17,30 +17,34 @@
 
 package org.apache.solr.request;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+
+import org.apache.solr.client.solrj.ResponseParser;
+import org.apache.solr.client.solrj.impl.BinaryResponseParser;
+import org.apache.solr.client.solrj.impl.XMLResponseParser;
 import org.apache.solr.response.BinaryQueryResponseWriter;
 import org.apache.solr.response.QueryResponseWriter;
 import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.util.AbstractSolrTestCase;
-import org.apache.solr.client.solrj.ResponseParser;
-import org.apache.solr.client.solrj.impl.BinaryResponseParser;
-import org.apache.solr.client.solrj.impl.XMLResponseParser;
-
+import org.junit.BeforeClass;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.io.*;
-
 
 public class TestWriterPerf extends AbstractSolrTestCase {
 
   public static final Logger log 
     = LoggerFactory.getLogger(TestWriterPerf.class);
 
-  @Override
-  public String getSchemaFile() { return "schema11.xml"; }
-  @Override
-  public String getSolrConfigFile() { return "solrconfig-functionquery.xml"; }
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig-functionquery.xml", "schema11.xml");
+  }
+  
   public String getCoreName() { return "basic"; }
 
   @Override

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestExtendedDismaxParser.java Mon Oct 29 14:55:01 2012
@@ -19,13 +19,16 @@ package org.apache.solr.search;
 
 import org.apache.solr.common.SolrException;
 import org.apache.solr.util.AbstractSolrTestCase;
+import org.junit.BeforeClass;
 import org.junit.Test;
 
 public class TestExtendedDismaxParser extends AbstractSolrTestCase {
-  @Override
-  public String getSchemaFile() { return "schema12.xml"; }
-  @Override
-  public String getSolrConfigFile() { return "solrconfig.xml"; }
+
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema12.xml");
+  }
+  
   // public String getCoreName() { return "collection1"; }
 
   @Override

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestQueryTypes.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestQueryTypes.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestQueryTypes.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestQueryTypes.java Mon Oct 29 14:55:01 2012
@@ -18,13 +18,15 @@ package org.apache.solr.search;
 
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.util.AbstractSolrTestCase;
+import org.junit.BeforeClass;
 
 public class TestQueryTypes extends AbstractSolrTestCase {
 
-  @Override
-  public String getSchemaFile() { return "schema11.xml"; }
-  @Override
-  public String getSolrConfigFile() { return "solrconfig.xml"; }
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema11.xml");
+  }
+  
   public String getCoreName() { return "basic"; }
 
 

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestQueryUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestQueryUtils.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestQueryUtils.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestQueryUtils.java Mon Oct 29 14:55:01 2012
@@ -22,7 +22,9 @@ import org.apache.lucene.search.BooleanQ
 import org.apache.lucene.search.BooleanClause;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.index.Term;
+import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.util.AbstractSolrTestCase;
+import org.junit.BeforeClass;
 
 import java.util.List;
 
@@ -31,10 +33,11 @@ import java.util.List;
  */
 public class TestQueryUtils extends AbstractSolrTestCase {
 
-  @Override
-  public String getSchemaFile() { return "schema.xml"; }
-  @Override
-  public String getSolrConfigFile() { return "solrconfig.xml"; }
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema.xml");
+  }
+
 
   @Override
   public void setUp() throws Exception {

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestSearchPerf.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestSearchPerf.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestSearchPerf.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestSearchPerf.java Mon Oct 29 14:55:01 2012
@@ -19,6 +19,7 @@ package org.apache.solr.search;
 
 import org.apache.lucene.index.Term;
 import org.apache.lucene.search.*;
+import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.util.AbstractSolrTestCase;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.response.SolrQueryResponse;
@@ -26,6 +27,7 @@ import org.apache.solr.update.processor.
 import org.apache.solr.update.processor.UpdateRequestProcessor;
 import org.apache.solr.update.AddUpdateCommand;
 import org.apache.solr.common.SolrInputDocument;
+import org.junit.BeforeClass;
 
 import java.util.*;
 import java.io.IOException;
@@ -35,10 +37,12 @@ import java.io.IOException;
  */
 public class TestSearchPerf extends AbstractSolrTestCase {
 
-  @Override
-  public String getSchemaFile() { return "schema11.xml"; }
-  @Override
-  public String getSolrConfigFile() { return "solrconfig.xml"; }
+  
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema11.xml");
+  }
+
 
   @Override
   public void setUp() throws Exception {

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestSurroundQueryParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestSurroundQueryParser.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestSurroundQueryParser.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/TestSurroundQueryParser.java Mon Oct 29 14:55:01 2012
@@ -19,13 +19,14 @@ package org.apache.solr.search;
  */
 
 import org.apache.solr.util.AbstractSolrTestCase;
+import org.junit.BeforeClass;
 
 public class TestSurroundQueryParser extends AbstractSolrTestCase {
 
-  @Override
-  public String getSchemaFile() { return "schemasurround.xml"; }
-  @Override
-  public String getSolrConfigFile() { return "solrconfig.xml"; }
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schemasurround.xml");
+  }
   // public String getCoreName() { return "collection1"; }
 
   @Override

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/function/SortByFunctionTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/function/SortByFunctionTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/function/SortByFunctionTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/search/function/SortByFunctionTest.java Mon Oct 29 14:55:01 2012
@@ -17,6 +17,7 @@ package org.apache.solr.search.function;
  */
 
 import org.apache.solr.util.AbstractSolrTestCase;
+import org.junit.BeforeClass;
 
 
 /**
@@ -24,14 +25,18 @@ import org.apache.solr.util.AbstractSolr
  *
  **/
 public class SortByFunctionTest extends AbstractSolrTestCase {
-  @Override
-  public String getSchemaFile() {
-    return "schema.xml";
+
+  
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema.xml");
   }
 
+  
   @Override
-  public String getSolrConfigFile() {
-    return "solrconfig.xml";
+  public void setUp() throws Exception {
+    super.setUp();
+  
   }
 
   public void test() throws Exception {

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/servlet/DirectSolrConnectionTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/servlet/DirectSolrConnectionTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/servlet/DirectSolrConnectionTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/servlet/DirectSolrConnectionTest.java Mon Oct 29 14:55:01 2012
@@ -19,15 +19,19 @@ package org.apache.solr.servlet;
 
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.util.AbstractSolrTestCase;
+import org.junit.BeforeClass;
 
 
 
 public class DirectSolrConnectionTest extends AbstractSolrTestCase 
 {
-  @Override
-  public String getSchemaFile() { return "solr/crazy-path-to-schema.xml"; }
-  @Override
-  public String getSolrConfigFile() { return "solr/crazy-path-to-config.xml"; }
+
+  
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solr/crazy-path-to-config.xml", "solr/crazy-path-to-schema.xml");
+  }
+
   
   DirectSolrConnection direct;
   

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java Mon Oct 29 14:55:01 2012
@@ -34,6 +34,7 @@ import org.apache.solr.response.SolrQuer
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.util.AbstractSolrTestCase;
 import org.apache.solr.util.RefCounted;
+import org.junit.BeforeClass;
 
 class NewSearcherListener implements SolrEventListener {
 
@@ -108,10 +109,10 @@ class NewSearcherListener implements Sol
 @Slow
 public class AutoCommitTest extends AbstractSolrTestCase {
 
-  @Override
-  public String getSchemaFile() { return "schema.xml"; }
-  @Override
-  public String getSolrConfigFile() { return "solrconfig.xml"; }
+   @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema.xml");
+  }
 
   public static void verbose(Object... args) {
     if (!VERBOSE) return;
@@ -125,6 +126,14 @@ public class AutoCommitTest extends Abst
     log.info(sb.toString());
     // System.out.println(sb.toString());
   }
+  
+  @Override
+  public void setUp() throws Exception {
+    super.setUp();
+    clearIndex();
+    // reload the core to clear stats
+    h.getCoreContainer().reload(h.getCore().getName());
+  }
 
   /**
    * Take a string and make it an iterable ContentStream
@@ -141,8 +150,8 @@ public class AutoCommitTest extends Abst
   }
 
   public void testMaxDocs() throws Exception {
-
     SolrCore core = h.getCore();
+    
     NewSearcherListener trigger = new NewSearcherListener();
 
     DirectUpdateHandler2 updateHandler = (DirectUpdateHandler2)core.getUpdateHandler();
@@ -190,6 +199,7 @@ public class AutoCommitTest extends Abst
 
   public void testMaxTime() throws Exception {
     SolrCore core = h.getCore();
+    
     NewSearcherListener trigger = new NewSearcherListener();    
     core.registerNewSearcherListener(trigger);
     DirectUpdateHandler2 updater = (DirectUpdateHandler2) core.getUpdateHandler();
@@ -263,6 +273,7 @@ public class AutoCommitTest extends Abst
   
   public void testCommitWithin() throws Exception {
     SolrCore core = h.getCore();
+    
     NewSearcherListener trigger = new NewSearcherListener();    
     core.registerNewSearcherListener(trigger);
     DirectUpdateHandler2 updater = (DirectUpdateHandler2) core.getUpdateHandler();

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerOptimizeTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerOptimizeTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerOptimizeTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerOptimizeTest.java Mon Oct 29 14:55:01 2012
@@ -16,15 +16,15 @@ package org.apache.solr.update;
  * limitations under the License.
  */
 
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
+import java.io.File;
+import java.io.FileFilter;
+
+import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.util.AbstractSolrTestCase;
-
-import java.io.File;
-import java.io.FileFilter;
+import org.junit.BeforeClass;
 
 
 /**
@@ -33,15 +33,9 @@ import java.io.FileFilter;
  **/
 public class DirectUpdateHandlerOptimizeTest extends AbstractSolrTestCase {
 
-  @Override
-  public String getSchemaFile() {
-    return "schema12.xml";
-  }
-
-  @Override
-  public String getSolrConfigFile() {
-    // return "solrconfig-duh-optimize.xml";
-    return "solrconfig.xml";
+  @BeforeClass
+  public static void beforeClass() throws Exception {
+    initCore("solrconfig.xml", "schema12.xml");
   }
 
 

Modified: lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java?rev=1403336&r1=1403335&r2=1403336&view=diff
==============================================================================
--- lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java (original)
+++ lucene/dev/branches/lucene3846/solr/core/src/test/org/apache/solr/update/DirectUpdateHandlerTest.java Mon Oct 29 14:55:01 2012
@@ -40,7 +40,6 @@ import org.junit.Test;
  */
 public class DirectUpdateHandlerTest extends SolrTestCaseJ4 {
 
-  // TODO: fix this test to not require FSDirectory
   static String savedFactory;
   @BeforeClass
   public static void beforeClass() throws Exception {