You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2012/08/25 12:06:16 UTC

svn commit: r1377246 [7/7] - in /lucene/dev/branches/lucene3312: ./ dev-tools/ dev-tools/idea/lucene/analysis/morfologik/ dev-tools/idea/lucene/analysis/phonetic/ dev-tools/maven/ dev-tools/scripts/ lucene/ lucene/analysis/ lucene/analysis/common/ luce...

Modified: lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java?rev=1377246&r1=1377245&r2=1377246&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java (original)
+++ lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/cloud/OverseerTest.java Sat Aug 25 10:06:07 2012
@@ -22,7 +22,6 @@ import java.io.IOException;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Random;
 import java.util.Set;
@@ -41,7 +40,6 @@ import org.apache.solr.common.cloud.Slic
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
-import org.apache.solr.core.CoreDescriptor;
 import org.apache.solr.handler.component.HttpShardHandlerFactory;
 import org.apache.solr.util.DefaultSolrThreadFactory;
 import org.apache.zookeeper.CreateMode;
@@ -100,7 +98,7 @@ public class OverseerTest extends SolrTe
       zkClient.close();
     }
     
-    public void publishState(String coreName, String stateName, int numShards)
+    public String publishState(String coreName, String stateName, int numShards)
         throws KeeperException, InterruptedException, IOException {
       if (stateName == null) {
         ElectionContext ec = electionContext.remove(coreName);
@@ -143,10 +141,11 @@ public class OverseerTest extends SolrTe
               elector, shardId, collection, nodeName + "_" + coreName, props,
               zkStateReader);
           elector.joinElection(ctx);
-          break;
+          return shardId;
         }
         Thread.sleep(200);
       }
+      return null;
     }
     
     private String getShardId(final String coreName) {
@@ -165,14 +164,13 @@ public class OverseerTest extends SolrTe
   
   @BeforeClass
   public static void beforeClass() throws Exception {
-    System.setProperty("solrcloud.skip.autorecovery", "true");
     initCore();
   }
   
   @AfterClass
   public static void afterClass() throws Exception {
-    System.clearProperty("solrcloud.skip.autorecovery");
     initCore();
+    Thread.sleep(3000); //XXX wait for threads to die...
   }
 
   @Test
@@ -182,53 +180,34 @@ public class OverseerTest extends SolrTe
 
     ZkTestServer server = new ZkTestServer(zkDir);
 
-    ZkController zkController = null;
+    MockZKController zkController = null;
     SolrZkClient zkClient = null;
+    SolrZkClient overseerClient = null;
+
     try {
       server.run();
       AbstractZkTestCase.tryCleanSolrZkNode(server.getZkHost());
       AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
-
+      
       zkClient = new SolrZkClient(server.getZkAddress(), TIMEOUT);
       zkClient.makePath(ZkStateReader.LIVE_NODES_ZKNODE, true);
 
+      overseerClient = electNewOverseer(server.getZkAddress());
+
       ZkStateReader reader = new ZkStateReader(zkClient);
       reader.createClusterStateWatchersAndUpdate();
-
-      zkController = new ZkController(null, server.getZkAddress(), TIMEOUT, 10000,
-          "localhost", "8983", "solr", new CurrentCoreDescriptorProvider() {
-
-            @Override
-            public List<CoreDescriptor> getCurrentDescriptors() {
-              // do nothing
-              return null;
-            }
-          });
-
-      System.setProperty("bootstrap_confdir", getFile("solr/collection1/conf")
-          .getAbsolutePath());
+      
+      zkController = new MockZKController(server.getZkAddress(), "localhost", "collection1");
 
       final int numShards=6;
-      final String[] ids = new String[numShards];
       
       for (int i = 0; i < numShards; i++) {
-        CloudDescriptor collection1Desc = new CloudDescriptor();
-        collection1Desc.setNumShards(3);
-        collection1Desc.setCollectionName("collection1");
-        CoreDescriptor desc1 = new CoreDescriptor(null, "core" + (i + 1), "");
-        desc1.setCloudDescriptor(collection1Desc);
-        zkController.preRegister(desc1);
-        ids[i] = zkController.register("core" + (i + 1), desc1);
+        assertNotNull("shard got no id?", zkController.publishState("core" + (i+1), ZkStateReader.ACTIVE, 3));
       }
-      
-      assertEquals("shard1", ids[0]);
-      assertEquals("shard2", ids[1]);
-      assertEquals("shard3", ids[2]);
-      assertEquals("shard1", ids[3]);
-      assertEquals("shard2", ids[4]);
-      assertEquals("shard3", ids[5]);
 
-      waitForCollections(reader, "collection1");
+      assertEquals(2, reader.getClusterState().getSlice("collection1", "shard1").getShards().size());
+      assertEquals(2, reader.getClusterState().getSlice("collection1", "shard2").getShards().size());
+      assertEquals(2, reader.getClusterState().getSlice("collection1", "shard3").getShards().size());
       
       //make sure leaders are in cloud state
       assertNotNull(reader.getLeaderUrl("collection1", "shard1", 15000));
@@ -236,7 +215,6 @@ public class OverseerTest extends SolrTe
       assertNotNull(reader.getLeaderUrl("collection1", "shard3", 15000));
       
     } finally {
-      System.clearProperty("bootstrap_confdir");
       if (DEBUG) {
         if (zkController != null) {
           zkClient.printLayoutToStdOut();
@@ -246,6 +224,7 @@ public class OverseerTest extends SolrTe
       if (zkController != null) {
         zkController.close();
       }
+      close(overseerClient);
       server.shutdown();
     }
   }
@@ -261,10 +240,11 @@ public class OverseerTest extends SolrTe
     
     ZkTestServer server = new ZkTestServer(zkDir);
 
-    System.setProperty(ZkStateReader.NUM_SHARDS_PROP, Integer.toString(sliceCount));
     SolrZkClient zkClient = null;
     ZkStateReader reader = null;
-    final ZkController[] controllers = new ZkController[nodeCount];
+    SolrZkClient overseerClient = null;
+
+    final MockZKController[] controllers = new MockZKController[nodeCount];
     final ExecutorService[] nodeExecutors = new ExecutorService[nodeCount];
     try {
       server.run();
@@ -273,27 +253,15 @@ public class OverseerTest extends SolrTe
 
       zkClient = new SolrZkClient(server.getZkAddress(), TIMEOUT);
       zkClient.makePath(ZkStateReader.LIVE_NODES_ZKNODE, true);
+      
+      overseerClient = electNewOverseer(server.getZkAddress());
 
       reader = new ZkStateReader(zkClient);
       reader.createClusterStateWatchersAndUpdate();
 
       for (int i = 0; i < nodeCount; i++) {
-      
-      controllers[i] = new ZkController(null, server.getZkAddress(), TIMEOUT, 10000,
-          "localhost", "898" + i, "solr", new CurrentCoreDescriptorProvider() {
-
-            @Override
-            public List<CoreDescriptor> getCurrentDescriptors() {
-              // do nothing
-              return null;
-            }
-          });
-      }
-
-      System.setProperty("bootstrap_confdir", getFile("solr/collection1/conf")
-          .getAbsolutePath());
-
-      
+        controllers[i] = new MockZKController(server.getZkAddress(), "node" + i, "collection1");
+      }      
       for (int i = 0; i < nodeCount; i++) {
         nodeExecutors[i] = Executors.newFixedThreadPool(1, new DefaultSolrThreadFactory("testShardAssignment"));
       }
@@ -305,18 +273,11 @@ public class OverseerTest extends SolrTe
         Runnable coreStarter = new Runnable() {
           @Override
           public void run() {
-            final CloudDescriptor collection1Desc = new CloudDescriptor();
-            collection1Desc.setCollectionName("collection1");
-            collection1Desc.setNumShards(sliceCount);
 
             final String coreName = "core" + slot;
             
-            final CoreDescriptor desc = new CoreDescriptor(null, coreName, "");
-            desc.setCloudDescriptor(collection1Desc);
             try {
-              controllers[slot % nodeCount].preRegister(desc);
-              ids[slot] = controllers[slot % nodeCount]
-                  .register(coreName, desc);
+              ids[slot]=controllers[slot % nodeCount].publishState(coreName, ZkStateReader.ACTIVE, sliceCount);
             } catch (Throwable e) {
               e.printStackTrace();
               fail("register threw exception:" + e.getClass());
@@ -390,14 +351,13 @@ public class OverseerTest extends SolrTe
       }
 
     } finally {
-      System.clearProperty(ZkStateReader.NUM_SHARDS_PROP);
-      System.clearProperty("bootstrap_confdir");
       if (DEBUG) {
         if (controllers[0] != null) {
           zkClient.printLayoutToStdOut();
         }
       }
       close(zkClient);
+      close(overseerClient);
       close(reader);
       for (int i = 0; i < controllers.length; i++)
         if (controllers[i] != null) {
@@ -889,9 +849,9 @@ public class OverseerTest extends SolrTe
     }
   }
 
-  private void close(SolrZkClient overseerClient) throws InterruptedException {
-    if (overseerClient != null) {
-      overseerClient.close();
+  private void close(SolrZkClient client) throws InterruptedException {
+    if (client != null) {
+      client.close();
     }
   }
   

Modified: lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java?rev=1377246&r1=1377245&r2=1377246&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java (original)
+++ lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java Sat Aug 25 10:06:07 2012
@@ -22,13 +22,12 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import junit.framework.Assert;
-
 import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
+import org.apache.solr.core.CoreContainer;
 import org.apache.solr.core.CoreDescriptor;
 import org.apache.solr.util.ExternalPaths;
 import org.apache.zookeeper.CreateMode;
@@ -54,6 +53,7 @@ public class ZkControllerTest extends So
   public void testReadConfigName() throws Exception {
     String zkDir = dataDir.getAbsolutePath() + File.separator
         + "zookeeper/server1/data";
+    CoreContainer cc = null;
 
     ZkTestServer server = new ZkTestServer(zkDir);
     try {
@@ -78,7 +78,10 @@ public class ZkControllerTest extends So
         zkClient.printLayoutToStdOut();
       }
       zkClient.close();
-      ZkController zkController = new ZkController(null, server.getZkAddress(), TIMEOUT, 10000,
+      
+      cc = getCoreContainer();
+      
+      ZkController zkController = new ZkController(cc, server.getZkAddress(), TIMEOUT, 10000,
           "localhost", "8983", "solr", new CurrentCoreDescriptorProvider() {
             
             @Override
@@ -94,7 +97,9 @@ public class ZkControllerTest extends So
         zkController.close();
       }
     } finally {
-
+      if (cc != null) {
+        cc.shutdown();
+      }
       server.shutdown();
     }
 
@@ -108,12 +113,15 @@ public class ZkControllerTest extends So
     ZkTestServer server = new ZkTestServer(zkDir);
     ZkController zkController = null;
     boolean testFinished = false;
+    CoreContainer cc = null;
     try {
       server.run();
 
       AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
 
-      zkController = new ZkController(null, server.getZkAddress(),
+      cc = getCoreContainer();
+      
+      zkController = new ZkController(cc, server.getZkAddress(),
           TIMEOUT, 10000, "localhost", "8983", "solr", new CurrentCoreDescriptorProvider() {
             
             @Override
@@ -142,109 +150,16 @@ public class ZkControllerTest extends So
       if (zkController != null) {
         zkController.close();
       }
+      if (cc != null) {
+        cc.shutdown();
+      }
       server.shutdown();
     }
 
   }
-  
-  @Test
-  public void testCoreUnload() throws Exception {
-    
-    String zkDir = dataDir.getAbsolutePath() + File.separator
-        + "zookeeper/server1/data";
-    
-    ZkTestServer server = new ZkTestServer(zkDir);
-    
-    ZkController zkController = null;
-    SolrZkClient zkClient = null;
-    try {
-      server.run();
-      AbstractZkTestCase.tryCleanSolrZkNode(server.getZkHost());
-      AbstractZkTestCase.makeSolrZkNode(server.getZkHost());
-      
-      zkClient = new SolrZkClient(server.getZkAddress(), TIMEOUT);
-      zkClient.makePath(ZkStateReader.LIVE_NODES_ZKNODE, true);
-      
-      ZkStateReader reader = new ZkStateReader(zkClient);
-      reader.createClusterStateWatchersAndUpdate();
-      
-      System.setProperty(ZkStateReader.NUM_SHARDS_PROP, "1");
-      System.setProperty("solrcloud.skip.autorecovery", "true");
-      
-      zkController = new ZkController(null, server.getZkAddress(), TIMEOUT,
-          10000, "localhost", "8983", "solr",
-          new CurrentCoreDescriptorProvider() {
-            
-            @Override
-            public List<CoreDescriptor> getCurrentDescriptors() {
-              // do nothing
-              return null;
-            }
-          });
-      
-      System.setProperty("bootstrap_confdir", getFile("solr/collection1/conf")
-          .getAbsolutePath());
-      
-      final int numShards = 2;
-      final String[] ids = new String[numShards];
-      
-      for (int i = 0; i < numShards; i++) {
-        CloudDescriptor collection1Desc = new CloudDescriptor();
-        collection1Desc.setCollectionName("collection1");
-        CoreDescriptor desc1 = new CoreDescriptor(null, "core" + (i + 1), "");
-        desc1.setCloudDescriptor(collection1Desc);
-        zkController.preRegister(desc1);
-        ids[i] = zkController.register("core" + (i + 1), desc1);
-      }
-      
-      assertEquals("shard1", ids[0]);
-      assertEquals("shard1", ids[1]);
-      
-      assertNotNull(reader.getLeaderUrl("collection1", "shard1", 15000));
-      
-      assertEquals("Shard(s) missing from cloudstate", 2, zkController.getZkStateReader().getClusterState().getSlice("collection1", "shard1").getShards().size());
-      
-      // unregister current leader
-      final ZkNodeProps shard1LeaderProps = reader.getLeaderProps(
-          "collection1", "shard1");
-      final String leaderUrl = reader.getLeaderUrl("collection1", "shard1",
-          15000);
-      
-      final CloudDescriptor collection1Desc = new CloudDescriptor();
-      collection1Desc.setCollectionName("collection1");
-      final CoreDescriptor desc1 = new CoreDescriptor(null,
-          shard1LeaderProps.get(ZkStateReader.CORE_NAME_PROP), "");
-      desc1.setCloudDescriptor(collection1Desc);
-      zkController.unregister(
-          shard1LeaderProps.get(ZkStateReader.CORE_NAME_PROP), collection1Desc);
-      assertNotSame(
-          "New leader was not promoted after unregistering the current leader.",
-          leaderUrl, reader.getLeaderUrl("collection1", "shard1", 15000));
-      assertNotNull("New leader was null.",
-          reader.getLeaderUrl("collection1", "shard1", 15000));
-
-      for(int i=0;i<30;i++) {
-        if(zkController.getZkStateReader().getClusterState().getSlice("collection1", "shard1").getShards().size()==1) break; 
-        Thread.sleep(500);
-      }
-      assertEquals("shard was not unregistered", 1, zkController.getZkStateReader().getClusterState().getSlice("collection1", "shard1").getShards().size());
-    } finally {
-      System.clearProperty("solrcloud.skip.autorecovery");
-      System.clearProperty(ZkStateReader.NUM_SHARDS_PROP);
-      System.clearProperty("bootstrap_confdir");
-      if (DEBUG) {
-        if (zkController != null) {
-          zkClient.printLayoutToStdOut();
-        }
-      }
-      if (zkClient != null) {
-        zkClient.close();
-      }
-      if (zkController != null) {
-        zkController.close();
-      }
-      server.shutdown();
-    }
+
+  private CoreContainer getCoreContainer() {
+    return new CoreContainer(TEMP_DIR.getAbsolutePath());
   }
 
   @Override

Modified: lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/core/TestBadConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/core/TestBadConfig.java?rev=1377246&r1=1377245&r2=1377246&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/core/TestBadConfig.java (original)
+++ lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/core/TestBadConfig.java Sat Aug 25 10:06:07 2012
@@ -27,6 +27,21 @@ public class TestBadConfig extends Abstr
     assertConfigs("bad_solrconfig.xml","schema.xml","unset.sys.property");
   }
 
+  public void testUpdateLogButNoVersionField() throws Exception {
+    
+    // :TODO: neccessary until SOLR-3699 is fixed
+    System.setProperty("solr.directoryFactory", 
+                       "org.apache.solr.core.SimpleFSDirectoryFactory");
+
+
+    System.setProperty("enable.update.log", "true");
+    try {
+      assertConfigs("solrconfig.xml", "schema12.xml", "_version_");
+    } finally {
+      System.clearProperty("enable.update.log");
+    }
+  }
+
   public void testBogusScriptEngine() throws Exception {
     // sanity check
     Assume.assumeTrue(null == (new ScriptEngineManager()).getEngineByName("giberish"));

Modified: lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/update/TestUpdate.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/update/TestUpdate.java?rev=1377246&r1=1377245&r2=1377246&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/update/TestUpdate.java (original)
+++ lucene/dev/branches/lucene3312/solr/core/src/test/org/apache/solr/update/TestUpdate.java Sat Aug 25 10:06:07 2012
@@ -68,7 +68,7 @@ public class TestUpdate extends SolrTest
     doUpdateTest(new Callable() {
       @Override
       public Object call() throws Exception {
-        commit("softCommit","false");
+        assertU(commit("softCommit","false"));
         return null;
       }
     });
@@ -82,15 +82,15 @@ public class TestUpdate extends SolrTest
 
     long version;
 
-    version = addAndGetVersion(sdoc("id","1", "val_i",5), null);
+    version = addAndGetVersion(sdoc("id","1", "val_i",5, "copyfield_source","a"), null);
     afterUpdate.call();
-    version = addAndGetVersion(sdoc("id","1", "val_is",map("add",10)), null);
+    version = addAndGetVersion(sdoc("id","1", "val_is",map("add",10), "copyfield_source",map("add","b")), null);
     afterUpdate.call();
     version = addAndGetVersion(sdoc("id","1", "val_is",map("add",5)), null);
     afterUpdate.call();
 
-    assertJQ(req("qt","/get", "id","1", "fl","id,*_i,*_is")
-        ,"=={'doc':{'id':'1', 'val_i':5, 'val_is':[10,5]}}"
+    assertJQ(req("qt","/get", "id","1", "fl","id,*_i,*_is,copyfield_*")
+        ,"=={'doc':{'id':'1', 'val_i':5, 'val_is':[10,5], 'copyfield_source':['a','b']}}"     // real-time get should not return stored copyfield targets
     );
 
     version = addAndGetVersion(sdoc("id","1", "val_is",map("add",-1), "val_i",map("set",100)), null);
@@ -101,6 +101,14 @@ public class TestUpdate extends SolrTest
     );
 
 
+    // Do a search to get all stored fields back and make sure that the stored copyfield target only
+    // has one copy of the source.  This may not be supported forever!
+    assertU(commit("softCommit","true"));
+    assertJQ(req("q","*:*", "fl","id,*_i,*_is,copyfield_*")
+        ,"/response/docs/[0]=={'id':'1', 'val_i':100, 'val_is':[10,5,-1], 'copyfield_source':['a','b'], 'copyfield_dest_ss':['a','b']}"
+    );
+
+
     long version2;
     try {
       // try bad version added as a field in the doc

Modified: lucene/dev/branches/lucene3312/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpClientUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpClientUtil.java?rev=1377246&r1=1377245&r2=1377246&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpClientUtil.java (original)
+++ lucene/dev/branches/lucene3312/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpClientUtil.java Sat Aug 25 10:06:07 2012
@@ -78,9 +78,18 @@ public class HttpClientUtil {
   static final DefaultHttpRequestRetryHandler NO_RETRY = new DefaultHttpRequestRetryHandler(
       0, false);
 
+  private static HttpClientConfigurer configurer = new HttpClientConfigurer();
+  
   private HttpClientUtil(){}
   
   /**
+   * Replace the {@link HttpClientConfigurer} class used in configuring the http
+   * clients with a custom implementation.
+   */
+  public static void setConfigurer(HttpClientConfigurer newConfigurer) {
+    configurer = newConfigurer;
+  }
+  /**
    * Creates new http client by using the provided configuration.
    * 
    * @param params
@@ -103,38 +112,7 @@ public class HttpClientUtil {
    */
   public static void configureClient(final DefaultHttpClient httpClient,
       SolrParams config) {
-
-    if (config.get(PROP_MAX_CONNECTIONS) != null) {
-      setMaxConnections(httpClient, config.getInt(PROP_MAX_CONNECTIONS));
-    }
-
-    if (config.get(PROP_MAX_CONNECTIONS_PER_HOST) != null) {
-      setMaxConnectionsPerHost(httpClient, config.getInt(PROP_MAX_CONNECTIONS_PER_HOST));
-    }
-
-    if (config.get(PROP_CONNECTION_TIMEOUT) != null) {
-      setConnectionTimeout(httpClient, config.getInt(PROP_CONNECTION_TIMEOUT));
-    }
-    
-    if (config.get(PROP_SO_TIMEOUT) != null) {
-      setSoTimeout(httpClient, config.getInt(PROP_SO_TIMEOUT));
-    }
-    
-    if (config.get(PROP_USE_RETRY) != null) {
-      setUseRetry(httpClient, config.getBool(PROP_USE_RETRY));
-    }
-
-    if (config.get(PROP_FOLLOW_REDIRECTS) != null) {
-      setFollowRedirects(httpClient, config.getBool(PROP_FOLLOW_REDIRECTS));
-    }
-
-    final String basicAuthUser = config.get(PROP_BASIC_AUTH_USER);
-    final String basicAuthPass = config.get(PROP_BASIC_AUTH_PASS);
-    setBasicAuth(httpClient, basicAuthUser, basicAuthPass);
-    
-    if (config.get(PROP_ALLOW_COMPRESSION) != null) {
-      setAllowCompression(httpClient, config.getBool(PROP_ALLOW_COMPRESSION));
-    }
+    configurer.configure(httpClient,  config);
   }
 
   /**

Modified: lucene/dev/branches/lucene3312/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpClientUtilTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3312/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpClientUtilTest.java?rev=1377246&r1=1377245&r2=1377246&view=diff
==============================================================================
--- lucene/dev/branches/lucene3312/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpClientUtilTest.java (original)
+++ lucene/dev/branches/lucene3312/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpClientUtilTest.java Sat Aug 25 10:06:07 2012
@@ -18,6 +18,8 @@ package org.apache.solr.client.solrj.imp
 
 import static org.junit.Assert.assertEquals;
 
+import java.util.concurrent.atomic.AtomicInteger;
+
 import org.apache.http.auth.AuthScope;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.params.ClientPNames;
@@ -25,6 +27,7 @@ import org.apache.http.impl.client.Defau
 import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
 import org.apache.http.params.HttpConnectionParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.params.SolrParams;
 import org.junit.Test;
 
 public class HttpClientUtilTest {
@@ -60,4 +63,31 @@ public class HttpClientUtilTest {
     client.getConnectionManager().shutdown();
   }
   
+  @Test
+  public void testReplaceConfigurer(){
+    
+    try {
+    final AtomicInteger counter = new AtomicInteger();
+    HttpClientConfigurer custom = new HttpClientConfigurer(){
+      @Override
+      protected void configure(DefaultHttpClient httpClient, SolrParams config) {
+        super.configure(httpClient, config);
+        counter.set(config.getInt("custom-param", -1));
+      }
+      
+    };
+    
+    HttpClientUtil.setConfigurer(custom);
+    
+    ModifiableSolrParams params = new ModifiableSolrParams();
+    params.set("custom-param", 5);
+    HttpClientUtil.createClient(params).getConnectionManager().shutdown();
+    assertEquals(5, counter.get());
+    } finally {
+      //restore default configurer
+      HttpClientUtil.setConfigurer(new HttpClientConfigurer());
+    }
+
+  }
+  
 }