mirror of
https://github.com/Alfresco/SearchServices.git
synced 2025-09-17 14:21:20 +00:00
Merge branch 'master' of git.alfresco.com:search_discovery/insightengine into fix/SEARCH-1994_multiple_versions
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
<name>Search Analytics E2E Tests</name>
|
||||
<description>Test Project to test Search Service and Analytics Features on a complete setup of Alfresco, Share</description>
|
||||
<properties>
|
||||
<tas.rest.api.version>1.20</tas.rest.api.version>
|
||||
<tas.rest.api.version>1.21</tas.rest.api.version>
|
||||
<tas.cmis.api.version>1.11</tas.cmis.api.version>
|
||||
<tas.utility.version>3.0.16</tas.utility.version>
|
||||
<rm.version>3.2.0</rm.version>
|
||||
|
@@ -33,7 +33,6 @@ import org.apache.solr.core.SolrCore;
|
||||
import org.apache.solr.request.LocalSolrQueryRequest;
|
||||
import org.apache.solr.request.SolrQueryRequest;
|
||||
import org.apache.solr.response.SolrQueryResponse;
|
||||
import org.junit.Before;
|
||||
import org.junit.BeforeClass;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -83,8 +82,9 @@ import static org.alfresco.repo.search.adaptor.lucene.QueryConstants.FIELD_VERSI
|
||||
* class hierarchy. Ideally this function should be retired in favour of better
|
||||
* annotations..
|
||||
*
|
||||
* @since solr 1.5
|
||||
* @author Michael Suzuki
|
||||
* @since solr 1.4.1
|
||||
* @author Michael Suzuki
|
||||
* @author Andrea Gazzarini
|
||||
*/
|
||||
@ThreadLeakLingering(linger = 5000)
|
||||
public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
@@ -92,8 +92,8 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
protected static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
|
||||
|
||||
protected String[] deadServers;
|
||||
protected static SolrResponsesComparator solrComparator = new SolrResponsesComparator();
|
||||
protected static RandomSupplier solrRandomSupplier;
|
||||
protected static SolrResponsesComparator SOLR_RESPONSE_COMPARATOR = new SolrResponsesComparator();
|
||||
protected static RandomSupplier SOLR_RANDOM_SUPPLIER;
|
||||
|
||||
// to stress with higher thread counts and requests, make sure the junit
|
||||
// xml formatter is not being used (all output will be buffered before
|
||||
@@ -112,34 +112,26 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
* Test configs may use the <code>${hostContext}</code> variable to access
|
||||
* this system property.
|
||||
* </p>
|
||||
*
|
||||
*/
|
||||
@BeforeClass
|
||||
public static void setUpSolrTestProperties()
|
||||
{
|
||||
SOLR_RANDOM_SUPPLIER = new RandomSupplier();
|
||||
System.setProperty("alfresco.test", "true");
|
||||
System.setProperty("solr.tests.maxIndexingThreads", "10");
|
||||
System.setProperty("solr.tests.ramBufferSizeMB", "1024");
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setupPerTest()
|
||||
{
|
||||
this.solrRandomSupplier = new RandomSupplier();
|
||||
}
|
||||
|
||||
|
||||
public static String[] fieldNames = new String[]
|
||||
{ "n_ti1", "n_f1", "n_tf1", "n_d1", "n_td1", "n_l1", "n_tl1", "n_dt1", "n_tdt1" };
|
||||
|
||||
public static final String[] FIELD_NAMES = new String[] { "n_ti1", "n_f1", "n_tf1", "n_d1", "n_td1", "n_l1", "n_tl1", "n_dt1", "n_tdt1" };
|
||||
|
||||
protected static String[] getFieldNames()
|
||||
{
|
||||
return fieldNames;
|
||||
return FIELD_NAMES;
|
||||
}
|
||||
|
||||
protected void putHandleDefaults() {
|
||||
solrComparator.putHandleDefaults();
|
||||
protected static void putHandleDefaults()
|
||||
{
|
||||
SOLR_RESPONSE_COMPARATOR.putHandleDefaults();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -147,8 +139,6 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
* @param query - query to execute
|
||||
* @param count - min number of results each shard must satisfy
|
||||
* @param waitMillis - total ms to wait
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public static boolean checkMinCountPerShard(Query query, int count, long waitMillis) throws SolrServerException,IOException
|
||||
{
|
||||
@@ -160,7 +150,7 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
for (SolrClient singleShard : shardedClients)
|
||||
{
|
||||
allShardCompliant = false;
|
||||
int totalHits = 0;
|
||||
int totalHits;
|
||||
int cycles = 1;
|
||||
while ((new Date()).getTime() < timeout && (!allShardCompliant))
|
||||
{
|
||||
@@ -172,11 +162,11 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
}
|
||||
try
|
||||
{
|
||||
Thread.sleep((long) (500 * cycles++));
|
||||
Thread.sleep(500 * cycles++);
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
continue;
|
||||
// Ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -205,11 +195,6 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
|
||||
/**
|
||||
* Waits until all cores (including shards) reach a count.
|
||||
*
|
||||
* @param query
|
||||
* @param count
|
||||
* @param waitMillis
|
||||
* @throws Exception
|
||||
*/
|
||||
public static void waitForDocCountAllCores(Query query, int count, long waitMillis) throws Exception
|
||||
{
|
||||
@@ -230,12 +215,9 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
|
||||
/**
|
||||
* Delele by query on all Clients
|
||||
*
|
||||
* @param q
|
||||
* @throws Exception
|
||||
*/
|
||||
public static void deleteByQueryAllClients(String q) throws Exception {
|
||||
|
||||
public static void deleteByQueryAllClients(String q) throws Exception
|
||||
{
|
||||
List<SolrClient> clients = getStandaloneAndShardedClients();
|
||||
|
||||
for (SolrClient client : clients) {
|
||||
@@ -245,14 +227,11 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
|
||||
/**
|
||||
* Gets the Default test client.
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
protected static SolrClient getDefaultTestClient()
|
||||
{
|
||||
return solrCollectionNameToStandaloneClient.get(DEFAULT_TEST_CORENAME);
|
||||
}
|
||||
|
||||
|
||||
protected static List<SolrClient> getShardedClients()
|
||||
{
|
||||
@@ -266,7 +245,7 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
*/
|
||||
public static List<SolrClient> getStandaloneAndShardedClients()
|
||||
{
|
||||
List<SolrClient> clients = new ArrayList();
|
||||
List<SolrClient> clients = new ArrayList<>();
|
||||
clients.addAll(solrCollectionNameToStandaloneClient.values());
|
||||
clients.addAll(clientShards);
|
||||
return clients;
|
||||
@@ -275,17 +254,11 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
|
||||
public static List<SolrClient> getStandaloneClients()
|
||||
{
|
||||
List<SolrClient> clients = new ArrayList();
|
||||
clients.addAll(solrCollectionNameToStandaloneClient.values());
|
||||
return clients;
|
||||
return new ArrayList<>(solrCollectionNameToStandaloneClient.values());
|
||||
}
|
||||
|
||||
/**
|
||||
* Waits for the doc count on the first core available, then checks all the Shards match.
|
||||
* @param query
|
||||
* @param count
|
||||
* @param waitMillis
|
||||
* @throws Exception
|
||||
*/
|
||||
public static void waitForDocCount(Query query, int count, long waitMillis) throws Exception
|
||||
{
|
||||
@@ -332,7 +305,8 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
return escapedField + ":" + value + " ";
|
||||
}
|
||||
|
||||
protected static String escapeQueryChars(String query) {
|
||||
protected static String escapeQueryChars(String query)
|
||||
{
|
||||
return query.replaceAll("\\:", "\\\\:")
|
||||
.replaceAll("\\{", "\\\\{")
|
||||
.replaceAll("\\}", "\\\\}");
|
||||
@@ -341,7 +315,7 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
public static SolrQuery luceneToSolrQuery(Query query)
|
||||
{
|
||||
String[] terms = query.toString().split(" ");
|
||||
String escapedQuery = new String();
|
||||
String escapedQuery = "";
|
||||
for (String t : terms)
|
||||
{
|
||||
escapedQuery += escapeQueryClause(t);
|
||||
@@ -366,8 +340,10 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
waitForShardsCount(solrQuery, count, waitMillis, start);
|
||||
}
|
||||
|
||||
protected static void injectDocToShards(long txnId, long aclId, long dbId, String owner) throws Exception {
|
||||
for(SolrClient clientShard : clientShards) {
|
||||
protected static void injectDocToShards(long txnId, long aclId, long dbId, String owner) throws Exception
|
||||
{
|
||||
for(SolrClient clientShard : clientShards)
|
||||
{
|
||||
SolrInputDocument doc = new SolrInputDocument();
|
||||
String id = AlfrescoSolrDataModel.getNodeDocumentId(AlfrescoSolrDataModel.DEFAULT_TENANT, aclId, dbId);
|
||||
doc.addField(FIELD_SOLR4_ID, id);
|
||||
@@ -383,21 +359,20 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
|
||||
/**
|
||||
* Gets the cores for the jetty instances
|
||||
* @return
|
||||
*/
|
||||
protected static List<SolrCore> getJettyCores(Collection<JettySolrRunner> runners)
|
||||
{
|
||||
List<SolrCore> cores = new ArrayList();
|
||||
List<SolrCore> cores = new ArrayList<>();
|
||||
for (JettySolrRunner jettySolrRunner : runners)
|
||||
{
|
||||
jettySolrRunner.getCoreContainer().getCores().forEach(aCore -> cores.add(aCore));
|
||||
cores.addAll(jettySolrRunner.getCoreContainer().getCores());
|
||||
}
|
||||
return cores;
|
||||
}
|
||||
|
||||
protected static List<AlfrescoCoreAdminHandler> getAdminHandlers(Collection<JettySolrRunner> runners)
|
||||
{
|
||||
List<AlfrescoCoreAdminHandler> coreAdminHandlers = new ArrayList();
|
||||
List<AlfrescoCoreAdminHandler> coreAdminHandlers = new ArrayList<>();
|
||||
for (JettySolrRunner jettySolrRunner : runners)
|
||||
{
|
||||
CoreContainer coreContainer = jettySolrRunner.getCoreContainer();
|
||||
@@ -418,32 +393,27 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
List<SolrClient> clients = getShardedClients();
|
||||
SolrQuery query = luceneToSolrQuery(new TermQuery(new Term(FIELD_DOC_TYPE, SolrInformationServer.DOC_TYPE_NODE)));
|
||||
StringBuilder error = new StringBuilder();
|
||||
for (int i = 0; i < clients.size(); ++i)
|
||||
for (SolrClient client : clients)
|
||||
{
|
||||
SolrClient client = clients.get(i);
|
||||
|
||||
|
||||
QueryResponse response = client.query(query);
|
||||
int totalHits = (int) response.getResults().getNumFound();
|
||||
|
||||
|
||||
if(totalHits > 0)
|
||||
if (totalHits > 0)
|
||||
{
|
||||
shardHit++;
|
||||
}
|
||||
if(totalHits < count)
|
||||
|
||||
if (totalHits < count)
|
||||
{
|
||||
if (ignoreZero && totalHits == 0)
|
||||
{
|
||||
log.info(client+": have zero hits ");
|
||||
}
|
||||
else
|
||||
{
|
||||
error.append(" "+client+": ");
|
||||
error.append("Expected nodes per shard greater than "+count+" found "+totalHits+" : "+query.toString());
|
||||
if (ignoreZero && totalHits == 0) {
|
||||
log.info(client + ": have zero hits ");
|
||||
} else {
|
||||
error.append(" " + client + ": ");
|
||||
error.append("Expected nodes per shard greater than " + count + " found " + totalHits + " : " + query.toString());
|
||||
}
|
||||
}
|
||||
log.info(client+": Hits "+totalHits);
|
||||
log.info(client + ": Hits " + totalHits);
|
||||
|
||||
}
|
||||
|
||||
@@ -560,7 +530,7 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
|
||||
protected String getShardsString()
|
||||
{
|
||||
Random r = solrRandomSupplier.getRandomGenerator();
|
||||
Random r = SOLR_RANDOM_SUPPLIER.getRandomGenerator();
|
||||
if (deadServers == null)
|
||||
return shards;
|
||||
|
||||
@@ -610,7 +580,7 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
|
||||
protected static SolrInputDocument addRandFields(SolrInputDocument sdoc)
|
||||
{
|
||||
addFields(sdoc, solrRandomSupplier.getRandFields(getFieldNames(), solrRandomSupplier.getRandValues()));
|
||||
addFields(sdoc, SOLR_RANDOM_SUPPLIER.getRandFields(getFieldNames(), SOLR_RANDOM_SUPPLIER.getRandValues()));
|
||||
return sdoc;
|
||||
}
|
||||
|
||||
@@ -662,7 +632,7 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
{
|
||||
UpdateResponse controlRsp = add(client1, params, sdocs);
|
||||
UpdateResponse specificRsp = add(client2, params, sdocs);
|
||||
solrComparator.compareSolrResponses(specificRsp, controlRsp);
|
||||
SOLR_RESPONSE_COMPARATOR.compareSolrResponses(specificRsp, controlRsp);
|
||||
return specificRsp;
|
||||
}
|
||||
|
||||
@@ -724,9 +694,6 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
|
||||
/**
|
||||
* * Commits to the specified client, and optionally all shards
|
||||
* @param client
|
||||
* @param andShards
|
||||
* @throws Exception
|
||||
*/
|
||||
protected static void commit(SolrClient client, boolean andShards) throws Exception
|
||||
{
|
||||
@@ -743,7 +710,7 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
|
||||
protected static QueryResponse queryRandomShard(ModifiableSolrParams params) throws SolrServerException, IOException
|
||||
{
|
||||
Random r = solrRandomSupplier.getRandomGenerator();
|
||||
Random r = SOLR_RANDOM_SUPPLIER.getRandomGenerator();
|
||||
int which = r.nextInt(clientShards.size());
|
||||
SolrClient client = clientShards.get(which);
|
||||
QueryResponse rsp = client.query(params);
|
||||
@@ -755,13 +722,13 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
params.set("distrib", "false");
|
||||
QueryRequest request = getAlfrescoRequest(json, params);
|
||||
QueryResponse controlRsp = request.process(solrClient);
|
||||
solrComparator.validateResponse(controlRsp);
|
||||
SOLR_RESPONSE_COMPARATOR.validateResponse(controlRsp);
|
||||
if (andShards)
|
||||
{
|
||||
params.remove("distrib");
|
||||
setDistributedParams(params);
|
||||
QueryResponse rsp = queryRandomShard(json, params);
|
||||
solrComparator.compareResponses(rsp, controlRsp);
|
||||
SOLR_RESPONSE_COMPARATOR.compareResponses(rsp, controlRsp);
|
||||
return rsp;
|
||||
}
|
||||
else
|
||||
@@ -772,7 +739,7 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
|
||||
protected static QueryResponse queryRandomShard(String json, SolrParams params) throws SolrServerException, IOException
|
||||
{
|
||||
Random r = solrRandomSupplier.getRandomGenerator();
|
||||
Random r = SOLR_RANDOM_SUPPLIER.getRandomGenerator();
|
||||
int which = r.nextInt(clientShards.size());
|
||||
SolrClient client = clientShards.get(which);
|
||||
QueryRequest request = getAlfrescoRequest(json, params);
|
||||
@@ -791,13 +758,13 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
*/
|
||||
protected QueryResponse query(SolrClient solrClient, boolean setDistribParams, SolrParams p) throws Exception
|
||||
{
|
||||
Random r = solrRandomSupplier.getRandomGenerator();
|
||||
Random r = SOLR_RANDOM_SUPPLIER.getRandomGenerator();
|
||||
final ModifiableSolrParams params = new ModifiableSolrParams(p);
|
||||
|
||||
// TODO: look into why passing true causes fails
|
||||
params.set("distrib", "false");
|
||||
final QueryResponse controlRsp = solrClient.query(params);
|
||||
solrComparator.validateResponse(controlRsp);
|
||||
SOLR_RESPONSE_COMPARATOR.validateResponse(controlRsp);
|
||||
|
||||
params.remove("distrib");
|
||||
if (setDistribParams)
|
||||
@@ -805,7 +772,7 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
|
||||
QueryResponse rsp = queryRandomShard(params);
|
||||
|
||||
solrComparator.compareResponses(rsp, controlRsp);
|
||||
SOLR_RESPONSE_COMPARATOR.compareResponses(rsp, controlRsp);
|
||||
|
||||
if (stress > 0)
|
||||
{
|
||||
@@ -827,7 +794,7 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
QueryResponse rsp = client.query(new ModifiableSolrParams(params));
|
||||
if (verifyStress)
|
||||
{
|
||||
solrComparator.compareResponses(rsp, controlRsp);
|
||||
SOLR_RESPONSE_COMPARATOR.compareResponses(rsp, controlRsp);
|
||||
}
|
||||
} catch (SolrServerException | IOException e)
|
||||
{
|
||||
@@ -865,7 +832,7 @@ public abstract class AbstractAlfrescoDistributedIT extends SolrITInitializer
|
||||
first = rsp;
|
||||
} else
|
||||
{
|
||||
solrComparator.compareResponses(first, rsp);
|
||||
SOLR_RESPONSE_COMPARATOR.compareResponses(first, rsp);
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -91,8 +91,8 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
//Standalone Tests
|
||||
protected static SolrCore defaultCore;
|
||||
|
||||
protected static final int clientConnectionTimeout = DEFAULT_CONNECTION_TIMEOUT;;
|
||||
protected static final int clientSoTimeout = 90000;;
|
||||
protected static final int clientConnectionTimeout = DEFAULT_CONNECTION_TIMEOUT;
|
||||
protected static final int clientSoTimeout = 90000;
|
||||
|
||||
protected static final String id = "id";
|
||||
|
||||
@@ -129,21 +129,22 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
jettyContainers = new HashMap<>();
|
||||
|
||||
nodeCnt = new AtomicInteger(0);
|
||||
String serverName = testClassName;
|
||||
currentTestName = serverName;
|
||||
currentTestName = testClassName;
|
||||
String[] coreNames = new String[]{DEFAULT_TEST_CORENAME};
|
||||
|
||||
distribSetUp(serverName);
|
||||
RandomSupplier.RandVal.uniqueValues = new HashSet(); // reset random values
|
||||
createServers(serverName, coreNames, numShards,solrcoreProperties);
|
||||
System.setProperty("solr.solr.home", testDir.toPath().resolve(serverName).toString());
|
||||
distribSetUp(testClassName);
|
||||
RandomSupplier.RandVal.uniqueValues = new HashSet<>(); // reset random values
|
||||
createServers(testClassName, coreNames, numShards,solrcoreProperties);
|
||||
System.setProperty("solr.solr.home", testDir.toPath().resolve(testClassName).toString());
|
||||
}
|
||||
|
||||
private static Properties addExplicitShardingProperty(Properties solrcoreProperties)
|
||||
{
|
||||
if(solrcoreProperties == null){
|
||||
if(solrcoreProperties == null)
|
||||
{
|
||||
solrcoreProperties = new Properties();
|
||||
}
|
||||
|
||||
if(solrcoreProperties.getProperty("shard.method")==null)
|
||||
{
|
||||
solrcoreProperties.put("shard.method", "EXPLICIT_ID");
|
||||
@@ -151,7 +152,8 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
return solrcoreProperties;
|
||||
}
|
||||
|
||||
public static void initSingleSolrServer(String testClassName, Properties solrcoreProperties) throws Throwable {
|
||||
public static void initSingleSolrServer(String testClassName, Properties solrcoreProperties) throws Throwable
|
||||
{
|
||||
initSolrServers(0,testClassName,solrcoreProperties);
|
||||
|
||||
JettySolrRunner jsr = jettyContainers.get(testClassName);
|
||||
@@ -163,7 +165,8 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
{
|
||||
int i = 0;
|
||||
extras = new String[solrcoreProperties.size()*2];
|
||||
for (Map.Entry<Object, Object> prop:solrcoreProperties.entrySet()) {
|
||||
for (Map.Entry<Object, Object> prop:solrcoreProperties.entrySet())
|
||||
{
|
||||
extras[i++] = "property."+prop.getKey();
|
||||
extras[i++] = (String) prop.getValue();
|
||||
}
|
||||
@@ -185,7 +188,7 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
destroyServers();
|
||||
distribTearDown();
|
||||
|
||||
boolean keepTests = Boolean.valueOf(System.getProperty("keep.tests"));
|
||||
boolean keepTests = Boolean.parseBoolean(System.getProperty("keep.tests"));
|
||||
if (!keepTests) FileUtils.deleteDirectory(testDir);
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -203,7 +206,7 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
return System.getProperty("user.dir") + "/target/test-classes/test-files";
|
||||
}
|
||||
|
||||
public static void distribSetUp(String serverName) throws Exception
|
||||
public static void distribSetUp(String serverName)
|
||||
{
|
||||
SolrTestCaseJ4.resetExceptionIgnores(); // ignore anything with
|
||||
// ignore_exception in it
|
||||
@@ -213,7 +216,7 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
System.setProperty("solr.log.dir", testDir.toPath().resolve(serverName).toString());
|
||||
}
|
||||
|
||||
public static void distribTearDown() throws Exception
|
||||
public static void distribTearDown()
|
||||
{
|
||||
System.clearProperty("solr.directoryFactory");
|
||||
System.clearProperty("solr.log.dir");
|
||||
@@ -230,8 +233,6 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
|
||||
/**
|
||||
* Creates a JettySolrRunner (if one didn't exist already). DOES NOT START IT.
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
protected static JettySolrRunner createJetty(String jettyKey, boolean basicAuth) throws Exception
|
||||
{
|
||||
@@ -243,19 +244,13 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
{
|
||||
Path jettySolrHome = testDir.toPath().resolve(jettyKey);
|
||||
seedSolrHome(jettySolrHome);
|
||||
JettySolrRunner jetty = createJetty(jettySolrHome.toFile(), null, null, false, 0, getSchemaFile(), basicAuth);
|
||||
return jetty;
|
||||
return createJetty(jettySolrHome.toFile(), null, null, false, 0, getSchemaFile(), basicAuth);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the core config information to the jetty file system.
|
||||
* Its best to call this before calling start() on Jetty
|
||||
* @param jettyKey
|
||||
* @param sourceConfigName
|
||||
* @param coreName
|
||||
* @param additionalProperties
|
||||
* @throws Exception
|
||||
*/
|
||||
protected static void addCoreToJetty(String jettyKey, String sourceConfigName, String coreName, Properties additionalProperties) throws Exception
|
||||
{
|
||||
@@ -289,17 +284,14 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
out.close();
|
||||
in.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts jetty if its not already running
|
||||
* @param jsr
|
||||
* @throws Exception
|
||||
*/
|
||||
protected static void startJetty(JettySolrRunner jsr) throws Exception {
|
||||
protected static void startJetty(JettySolrRunner jsr) throws Exception
|
||||
{
|
||||
if (!jsr.isRunning())
|
||||
{
|
||||
jsr.start();
|
||||
@@ -310,37 +302,40 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
{
|
||||
boolean basicAuth = additionalProperties != null ? Boolean.parseBoolean(additionalProperties.getProperty("BasicAuth", "false")) : false;
|
||||
|
||||
|
||||
JettySolrRunner jsr = createJetty(jettyKey, basicAuth);
|
||||
jettyContainers.put(jettyKey, jsr);
|
||||
|
||||
Properties properties = new Properties();
|
||||
|
||||
if(additionalProperties != null && additionalProperties.size() > 0) {
|
||||
if(additionalProperties != null && additionalProperties.size() > 0)
|
||||
{
|
||||
properties.putAll(additionalProperties);
|
||||
properties.remove("shard.method");
|
||||
}
|
||||
|
||||
for (int i = 0; i < coreNames.length; i++)
|
||||
for (String coreName : coreNames)
|
||||
{
|
||||
addCoreToJetty(jettyKey, coreNames[i], coreNames[i], properties);
|
||||
addCoreToJetty(jettyKey, coreName, coreName, properties);
|
||||
}
|
||||
|
||||
//Now start jetty
|
||||
startJetty(jsr);
|
||||
|
||||
int jettyPort = jsr.getLocalPort();
|
||||
for (int i = 0; i < coreNames.length; i++)
|
||||
for (String coreName : coreNames)
|
||||
{
|
||||
String url = buildUrl(jettyPort) + "/" + coreNames[i];
|
||||
String url = buildUrl(jettyPort) + "/" + coreName;
|
||||
|
||||
log.info(url);
|
||||
solrCollectionNameToStandaloneClient.put(coreNames[i], createNewSolrClient(url));
|
||||
|
||||
solrCollectionNameToStandaloneClient.put(coreName, createNewSolrClient(url));
|
||||
}
|
||||
|
||||
shardsArr = new String[numShards];
|
||||
StringBuilder sb = new StringBuilder();
|
||||
|
||||
if (additionalProperties == null) {
|
||||
if (additionalProperties == null)
|
||||
{
|
||||
additionalProperties = new Properties();
|
||||
}
|
||||
String[] ranges = {"0-100", "100-200", "200-300", "300-400"};
|
||||
@@ -382,6 +377,7 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
solrHomes.add(jetty.getSolrHome());
|
||||
jetty.stop();
|
||||
}
|
||||
|
||||
for (SolrClient jClients : solrCollectionNameToStandaloneClient.values())
|
||||
{
|
||||
jClients.close();
|
||||
@@ -409,25 +405,16 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
solrCollectionNameToStandaloneClient.clear();
|
||||
}
|
||||
|
||||
public static JettySolrRunner createJetty(File solrHome, String dataDir, String shardList, boolean sslEnabled, int port, String schemaOverride, boolean basicAuth) throws Exception
|
||||
public static JettySolrRunner createJetty(File solrHome, String dataDir, String shardList, boolean sslEnabled, int port, String schemaOverride, boolean basicAuth)
|
||||
{
|
||||
return createJetty(solrHome, dataDir, shardList, sslEnabled, port, schemaOverride, useExplicitNodeNames, basicAuth);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a solr jetty server.
|
||||
*
|
||||
* @param solrHome
|
||||
* @param dataDir
|
||||
* @param shardList
|
||||
* @param port
|
||||
* @param schemaOverride
|
||||
* @param explicitCoreNodeName
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
public static JettySolrRunner createJetty(File solrHome, String dataDir, String shardList, boolean sslEnabled, int port,
|
||||
String schemaOverride, boolean explicitCoreNodeName, boolean basicAuth) throws Exception
|
||||
String schemaOverride, boolean explicitCoreNodeName, boolean basicAuth)
|
||||
{
|
||||
Properties props = new Properties();
|
||||
if (schemaOverride != null)
|
||||
@@ -443,20 +430,21 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
{
|
||||
props.setProperty("coreNodeName", Integer.toString(nodeCnt.incrementAndGet()));
|
||||
}
|
||||
|
||||
SSLConfig sslConfig = new SSLConfig(sslEnabled, false, null, null, null, null);
|
||||
|
||||
JettyConfig config = null;
|
||||
JettyConfig config;
|
||||
|
||||
if(basicAuth) {
|
||||
System.out.println("###### adding basic auth ######");
|
||||
if(basicAuth)
|
||||
{
|
||||
log.info("###### adding basic auth ######");
|
||||
config = JettyConfig.builder().setContext("/solr").setPort(port).withFilter(BasicAuthFilter.class, "/sql/*").stopAtShutdown(true).withSSLConfig(sslConfig).build();
|
||||
} else {
|
||||
System.out.println("###### no basic auth ######");
|
||||
log.info("###### no basic auth ######");
|
||||
config = JettyConfig.builder().setContext("/solr").setPort(port).stopAtShutdown(true).withSSLConfig(sslConfig).build();
|
||||
}
|
||||
|
||||
JettySolrRunner jetty = new JettySolrRunner(solrHome.getAbsolutePath(), props, config);
|
||||
return jetty;
|
||||
return new JettySolrRunner(solrHome.getAbsolutePath(), props, config);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -510,11 +498,8 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
*/
|
||||
protected static void seedSolrHome(Path jettyHome) throws IOException
|
||||
{
|
||||
String solrxml = getSolrXml();
|
||||
if (solrxml != null)
|
||||
{
|
||||
FileUtils.copyFile(new File(getTestFilesHome(), solrxml), jettyHome.resolve(getSolrXml()).toFile());
|
||||
}
|
||||
FileUtils.copyFile(new File(getTestFilesHome(), getSolrXml()), jettyHome.resolve(getSolrXml()).toFile());
|
||||
|
||||
//Add solr home conf folder with alfresco based configuration.
|
||||
FileUtils.copyDirectory(new File(getTestFilesHome() + "/conf"), jettyHome.resolve("conf").toFile());
|
||||
// Add alfresco data model def
|
||||
@@ -547,36 +532,26 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
FileUtils.copyDirectory(coreSourceConfig.resolve("conf").toFile(), confDir.toFile());
|
||||
}
|
||||
|
||||
protected void setupJettySolrHome(String coreName, Path jettyHome) throws IOException
|
||||
public static class BasicAuthFilter implements Filter
|
||||
{
|
||||
seedSolrHome(jettyHome);
|
||||
|
||||
Properties coreProperties = new Properties();
|
||||
coreProperties.setProperty("name", coreName);
|
||||
coreProperties.setProperty("shard", "${shard:}");
|
||||
coreProperties.setProperty("collection", "${collection:" + coreName + "}");
|
||||
coreProperties.setProperty("config", "${solrconfig:solrconfig.xml}");
|
||||
coreProperties.setProperty("schema", "${schema:schema.xml}");
|
||||
coreProperties.setProperty("coreNodeName", "${coreNodeName:}");
|
||||
|
||||
writeCoreProperties(jettyHome.resolve("cores").resolve(coreName), coreProperties, coreName);
|
||||
}
|
||||
|
||||
public static class BasicAuthFilter implements Filter {
|
||||
|
||||
public BasicAuthFilter() {
|
||||
public BasicAuthFilter()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void init(FilterConfig config) {
|
||||
public void init(FilterConfig config)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
|
||||
throws IOException, ServletException {
|
||||
throws IOException, ServletException
|
||||
{
|
||||
//Parse the basic auth filter
|
||||
String auth = ((HttpServletRequest)request).getHeader("Authorization");
|
||||
if(auth != null) {
|
||||
if(auth != null)
|
||||
{
|
||||
auth = auth.replace("Basic ", "");
|
||||
byte[] bytes = Base64.getDecoder().decode(auth);
|
||||
String decodedBytes = new String(bytes);
|
||||
@@ -584,18 +559,24 @@ public abstract class SolrITInitializer extends SolrTestCaseJ4
|
||||
String user = pair[0];
|
||||
String password = pair[1];
|
||||
//Just look for the hard coded user and password.
|
||||
if (user.equals("test") && password.equals("pass")) {
|
||||
if (user.equals("test") && password.equals("pass"))
|
||||
{
|
||||
filterChain.doFilter(request, response);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
((HttpServletResponse) response).sendError(HttpServletResponse.SC_FORBIDDEN);
|
||||
}
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
((HttpServletResponse) response).sendError(HttpServletResponse.SC_FORBIDDEN);
|
||||
}
|
||||
}
|
||||
|
||||
public void destroy() {
|
||||
public void destroy()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user