You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2016/06/30 14:20:08 UTC
lucene-solr:master: SOLR-8787: TestAuthenticationFramework should not
extend TestMiniSolrCloudCluster
Repository: lucene-solr
Updated Branches:
refs/heads/master 74c86063c -> 6528dacb0
SOLR-8787: TestAuthenticationFramework should not extend TestMiniSolrCloudCluster
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/6528dacb
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/6528dacb
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/6528dacb
Branch: refs/heads/master
Commit: 6528dacb0e5c71f9e412655d8abee0857f4bda8f
Parents: 74c8606
Author: Shalin Shekhar Mangar <sh...@apache.org>
Authored: Thu Jun 30 19:50:17 2016 +0530
Committer: Shalin Shekhar Mangar <sh...@apache.org>
Committed: Thu Jun 30 19:50:17 2016 +0530
----------------------------------------------------------------------
solr/CHANGES.txt | 2 +
.../solr/cloud/TestAuthenticationFramework.java | 136 +++++++++++++++++--
2 files changed, 125 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6528dacb/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 59f411f..0011c76 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -121,6 +121,8 @@ Other Changes
* SOLR-9076: Update to Hadoop 2.7.2
(Mark Miller, Gregory Chanan)
+* SOLR-8787: TestAuthenticationFramework should not extend TestMiniSolrCloudCluster. (Trey Cahill via shalin)
+
================== 6.1.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/6528dacb/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java b/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
index 4ee983b..6e3c28a 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestAuthenticationFramework.java
@@ -16,8 +16,11 @@
*/
package org.apache.solr.cloud;
+import java.io.File;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
+import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import javax.servlet.FilterChain;
@@ -30,13 +33,27 @@ import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.protocol.HttpContext;
+import org.apache.lucene.index.TieredMergePolicy;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util.LuceneTestCase.SuppressSysoutChecks;
+import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.client.solrj.SolrQuery;
+import org.apache.solr.client.solrj.embedded.JettyConfig;
+import org.apache.solr.client.solrj.embedded.JettySolrRunner;
+import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.client.solrj.impl.HttpClientUtil;
import org.apache.solr.client.solrj.impl.SolrHttpClientBuilder;
+import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.response.RequestStatusState;
+import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.cloud.ZkStateReader;
+import org.apache.solr.core.CoreDescriptor;
+import org.apache.solr.index.TieredMergePolicyFactory;
import org.apache.solr.security.AuthenticationPlugin;
import org.apache.solr.security.HttpClientBuilderPlugin;
import org.apache.solr.util.RevertDefaultThreadHandlerRule;
+import org.junit.After;
+import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
@@ -52,15 +69,12 @@ import com.carrotsearch.randomizedtesting.rules.SystemPropertiesRestoreRule;
*/
@LuceneTestCase.Slow
@SuppressSysoutChecks(bugUrl = "Solr logs to JUL")
-public class TestAuthenticationFramework extends TestMiniSolrCloudCluster {
+public class TestAuthenticationFramework extends LuceneTestCase {
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
-
- public TestAuthenticationFramework () {
- NUM_SERVERS = 5;
- NUM_SHARDS = 2;
- REPLICATION_FACTOR = 2;
- }
+ private int NUM_SERVERS = 5;
+ private int NUM_SHARDS = 2;
+ private int REPLICATION_FACTOR = 2;
static String requestUsername = MockAuthenticationPlugin.expectedUsername;
static String requestPassword = MockAuthenticationPlugin.expectedPassword;
@@ -74,7 +88,7 @@ public class TestAuthenticationFramework extends TestMiniSolrCloudCluster {
new SystemPropertiesRestoreRule()).around(
new RevertDefaultThreadHandlerRule());
- @Override
+ @Before
public void setUp() throws Exception {
setupAuthenticationPlugin();
super.setUp();
@@ -84,21 +98,22 @@ public class TestAuthenticationFramework extends TestMiniSolrCloudCluster {
System.setProperty("authenticationPlugin", "org.apache.solr.cloud.TestAuthenticationFramework$MockAuthenticationPlugin");
MockAuthenticationPlugin.expectedUsername = null;
MockAuthenticationPlugin.expectedPassword = null;
-
}
@Test
public void testBasics() throws Exception {
+ MiniSolrCloudCluster miniCluster = createMiniSolrCloudCluster();
+
// Should pass
- testCollectionCreateSearchDelete();
+ collectionCreateSearchDelete(miniCluster);
MockAuthenticationPlugin.expectedUsername = "solr";
MockAuthenticationPlugin.expectedPassword = "s0lrRocks";
// Should fail with 401
try {
- testCollectionCreateSearchDelete();
+ collectionCreateSearchDelete(miniCluster);
fail("Should've returned a 401 error");
} catch (Exception ex) {
if (!ex.getMessage().contains("Error 401")) {
@@ -108,14 +123,109 @@ public class TestAuthenticationFramework extends TestMiniSolrCloudCluster {
MockAuthenticationPlugin.expectedUsername = null;
MockAuthenticationPlugin.expectedPassword = null;
}
+
+ miniCluster.shutdown();
}
- @Override
+ @After
public void tearDown() throws Exception {
System.clearProperty("authenticationPlugin");
super.tearDown();
}
-
+
+ private MiniSolrCloudCluster createMiniSolrCloudCluster() throws Exception {
+ JettyConfig.Builder jettyConfig = JettyConfig.builder();
+ jettyConfig.waitForLoadingCoresToFinish(null);
+ return new MiniSolrCloudCluster(NUM_SERVERS, createTempDir(), jettyConfig.build());
+ }
+
+ private void createCollection(MiniSolrCloudCluster miniCluster, String collectionName, String asyncId)
+ throws Exception {
+ String configName = "solrCloudCollectionConfig";
+ File configDir = new File(SolrTestCaseJ4.TEST_HOME() + File.separator + "collection1" + File.separator + "conf");
+ miniCluster.uploadConfigDir(configDir, configName);
+
+ final boolean persistIndex = random().nextBoolean();
+ Map<String, String> collectionProperties = new HashMap<>();
+
+ collectionProperties.putIfAbsent(CoreDescriptor.CORE_CONFIG, "solrconfig-tlog.xml");
+ collectionProperties.putIfAbsent("solr.tests.maxBufferedDocs", "100000");
+ collectionProperties.putIfAbsent("solr.tests.ramBufferSizeMB", "100");
+ // use non-test classes so RandomizedRunner isn't necessary
+ if (random().nextBoolean()) {
+ collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICY, TieredMergePolicy.class.getName());
+ collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY, "true");
+ collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY, "false");
+ } else {
+ collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_MERGEPOLICYFACTORY, TieredMergePolicyFactory.class.getName());
+ collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICYFACTORY, "true");
+ collectionProperties.putIfAbsent(SolrTestCaseJ4.SYSTEM_PROPERTY_SOLR_TESTS_USEMERGEPOLICY, "false");
+ }
+ collectionProperties.putIfAbsent("solr.tests.mergeScheduler", "org.apache.lucene.index.ConcurrentMergeScheduler");
+ collectionProperties.putIfAbsent("solr.directoryFactory", (persistIndex ? "solr.StandardDirectoryFactory" : "solr.RAMDirectoryFactory"));
+
+ miniCluster.createCollection(collectionName, NUM_SHARDS, REPLICATION_FACTOR, configName, null, asyncId, collectionProperties);
+ }
+
+ public void collectionCreateSearchDelete(MiniSolrCloudCluster miniCluster) throws Exception {
+
+ final String collectionName = "testcollection";
+
+ final CloudSolrClient cloudSolrClient = miniCluster.getSolrClient();
+
+ assertNotNull(miniCluster.getZkServer());
+ List<JettySolrRunner> jettys = miniCluster.getJettySolrRunners();
+ assertEquals(NUM_SERVERS, jettys.size());
+ for (JettySolrRunner jetty : jettys) {
+ assertTrue(jetty.isRunning());
+ }
+
+ // create collection
+ log.info("#### Creating a collection");
+ final String asyncId = (random().nextBoolean() ? null : "asyncId("+collectionName+".create)="+random().nextInt());
+ createCollection(miniCluster, collectionName, asyncId);
+ if (asyncId != null) {
+ final RequestStatusState state = AbstractFullDistribZkTestBase.getRequestStateAfterCompletion(asyncId, 330,
+ cloudSolrClient);
+ assertSame("did not see async createCollection completion", RequestStatusState.COMPLETED, state);
+ }
+
+ ZkStateReader zkStateReader = miniCluster.getSolrClient().getZkStateReader();
+ AbstractDistribZkTestBase.waitForRecoveriesToFinish(collectionName, zkStateReader, true, true, 330);
+
+ // modify/query collection
+ log.info("#### updating a querying collection");
+ cloudSolrClient.setDefaultCollection(collectionName);
+ SolrInputDocument doc = new SolrInputDocument();
+ doc.setField("id", "1");
+ cloudSolrClient.add(doc);
+ cloudSolrClient.commit();
+ SolrQuery query = new SolrQuery();
+ query.setQuery("*:*");
+ QueryResponse rsp = cloudSolrClient.query(query);
+ assertEquals(1, rsp.getResults().getNumFound());
+
+ // delete the collection we created earlier
+ miniCluster.deleteCollection(collectionName);
+ AbstractDistribZkTestBase.waitForCollectionToDisappear(collectionName, zkStateReader, true, true, 330);
+
+ // create it again
+ String asyncId2 = (random().nextBoolean() ? null : "asyncId("+collectionName+".create)="+random().nextInt());
+ createCollection(miniCluster, collectionName, asyncId2);
+ if (asyncId2 != null) {
+ final RequestStatusState state = AbstractFullDistribZkTestBase.getRequestStateAfterCompletion(asyncId2, 330,
+ cloudSolrClient);
+ assertSame("did not see async createCollection completion", RequestStatusState.COMPLETED, state);
+ }
+ AbstractDistribZkTestBase.waitForRecoveriesToFinish(collectionName, zkStateReader, true, true, 330);
+
+ // check that there's no left-over state
+ assertEquals(0, cloudSolrClient.query(new SolrQuery("*:*")).getResults().getNumFound());
+ cloudSolrClient.add(doc);
+ cloudSolrClient.commit();
+ assertEquals(1, cloudSolrClient.query(new SolrQuery("*:*")).getResults().getNumFound());
+ }
+
public static class MockAuthenticationPlugin extends AuthenticationPlugin implements HttpClientBuilderPlugin {
public static String expectedUsername;
public static String expectedPassword;