SOLR-13793: Additional tests
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestQueryingOnDownCollection.java b/solr/core/src/test/org/apache/solr/cloud/TestQueryingOnDownCollection.java
index 040d1ca..763cdd4 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestQueryingOnDownCollection.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestQueryingOnDownCollection.java
@@ -18,11 +18,16 @@
import java.lang.invoke.MethodHandles;
import java.util.List;
+import java.util.Locale;
import java.util.Map;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
+import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
+import org.apache.solr.client.solrj.impl.PreemptiveBasicAuthClientBuilderFactory;
import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.cloud.Replica;
@@ -37,10 +42,18 @@
private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
private static final String COLLECTION_NAME = "infected";
+ private static final String USERNAME = "solr";
+ private static final String PASSWORD = "solr";
+
+ static {
+ System.setProperty("basicauth", String.format(Locale.ROOT,"{}:{}", USERNAME, PASSWORD));
+ }
+
@BeforeClass
public static void setupCluster() throws Exception {
configureCluster(3)
.addConfig("conf", configset("cloud-minimal"))
+ .withSecurityJson(STD_CONF)
.configure();
}
@@ -52,10 +65,11 @@
public void testQueryToDownCollectionShouldFailFast() throws Exception {
CollectionAdminRequest.createCollection(COLLECTION_NAME, "conf", 2, 1)
+ .setBasicAuthCredentials(USERNAME, PASSWORD)
.process(cluster.getSolrClient());
// Add some dummy documents
- UpdateRequest update = new UpdateRequest();
+ UpdateRequest update = (UpdateRequest) new UpdateRequest().setBasicAuthCredentials(USERNAME, PASSWORD);
for (int i = 0; i < 100; i++) {
update.add("id", Integer.toString(i));
}
@@ -76,17 +90,35 @@
SolrClient client = cluster.getJettySolrRunner(0).newClient();
+ SolrRequest req = new QueryRequest(new SolrQuery("*:*").setRows(0)).setBasicAuthCredentials(USERNAME, PASSWORD);
+
// Without the SOLR-13793 fix, this causes requests to "down collection" to pile up (until the nodes run out
// of serviceable threads and they crash, even for other collections hosted on the nodes).
SolrException error = expectThrows(SolrException.class,
"Request should fail after trying all replica nodes once",
- () -> client.query(COLLECTION_NAME, new SolrQuery("*:*").setRows(0))
+ () -> client.request(req, COLLECTION_NAME)
);
client.close();
assertEquals(error.code(), SolrException.ErrorCode.INVALID_STATE.code);
assertTrue(error.getMessage().contains("No active replicas found for collection: " + COLLECTION_NAME));
+
+ // run same set of tests on v2 client which uses V2HttpCall
+ Http2SolrClient v2Client = new Http2SolrClient.Builder(cluster.getJettySolrRunner(0).getBaseUrl().toString())
+ .build();
+ PreemptiveBasicAuthClientBuilderFactory factory = new PreemptiveBasicAuthClientBuilderFactory();
+ factory.setup(v2Client);
+
+ error = expectThrows(SolrException.class,
+ "Request should fail after trying all replica nodes once",
+ () -> v2Client.request(req, COLLECTION_NAME)
+ );
+
+ v2Client.close();
+
+ assertEquals(error.code(), SolrException.ErrorCode.INVALID_STATE.code);
+ assertTrue(error.getMessage().contains("No active replicas found for collection: " + COLLECTION_NAME));
}
private void downAllReplicas() throws Exception {
@@ -106,4 +138,22 @@
, true);
}
+ protected static final String STD_CONF = "{\n" +
+ " \"authentication\":{\n" +
+ " \"blockUnknown\": true,\n" +
+ " \"class\":\"solr.BasicAuthPlugin\",\n" +
+ " \"credentials\":{\"solr\":\"EEKn7ywYk5jY8vG9TyqlG2jvYuvh1Q7kCCor6Hqm320= 6zkmjMjkMKyJX6/f0VarEWQujju5BzxZXub6WOrEKCw=\"}\n" +
+ " },\n" +
+ " \"authorization\":{\n" +
+ " \"class\":\"solr.RuleBasedAuthorizationPlugin\",\n" +
+ " \"permissions\":[\n" +
+ " {\"name\":\"security-edit\", \"role\":\"admin\"},\n" +
+ " {\"name\":\"collection-admin-edit\", \"role\":\"admin\"},\n" +
+ " {\"name\":\"core-admin-edit\", \"role\":\"admin\"}\n" +
+ " ],\n" +
+ " \"user-role\":{\"solr\":\"admin\"}\n" +
+ " }\n" +
+ "}";
+
+
}