diff --git a/search-services/alfresco-search/src/test/java/org/alfresco/solr/AbstractAlfrescoDistributedTest.java b/search-services/alfresco-search/src/test/java/org/alfresco/solr/AbstractAlfrescoDistributedTest.java index f922be7ae..c812ed435 100644 --- a/search-services/alfresco-search/src/test/java/org/alfresco/solr/AbstractAlfrescoDistributedTest.java +++ b/search-services/alfresco-search/src/test/java/org/alfresco/solr/AbstractAlfrescoDistributedTest.java @@ -48,7 +48,9 @@ import org.junit.rules.ExternalResource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.servlet.Filter; +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.io.*; import java.lang.invoke.MethodHandles; import java.nio.file.Files; @@ -524,7 +526,7 @@ public abstract class AbstractAlfrescoDistributedTest extends SolrTestCaseJ4 * @return * @throws Exception */ - private JettySolrRunner createJetty(String jettyKey) throws Exception + private JettySolrRunner createJetty(String jettyKey, boolean basicAuth) throws Exception { if (jettyContainers.containsKey(jettyKey)) { @@ -534,7 +536,7 @@ public abstract class AbstractAlfrescoDistributedTest extends SolrTestCaseJ4 { Path jettySolrHome = testDir.toPath().resolve(jettyKey); seedSolrHome(jettySolrHome); - JettySolrRunner jetty = createJetty(jettySolrHome.toFile(), null, null, false, getSchemaFile()); + JettySolrRunner jetty = createJetty(jettySolrHome.toFile(), null, null, false, getSchemaFile(), basicAuth); return jetty; } } @@ -599,7 +601,9 @@ public abstract class AbstractAlfrescoDistributedTest extends SolrTestCaseJ4 protected void createServers(String jettyKey, String[] coreNames, int numShards, Properties additionalProperties) throws Exception { - JettySolrRunner jsr = createJetty(jettyKey); + boolean basicAuth = additionalProperties != null ? Boolean.parseBoolean(additionalProperties.getProperty("BasicAuth", "false")) : false; + + JettySolrRunner jsr = createJetty(jettyKey, basicAuth); jettyContainers.put(jettyKey, jsr); Properties properties = new Properties(); @@ -649,7 +653,7 @@ public abstract class AbstractAlfrescoDistributedTest extends SolrTestCaseJ4 } String shardKey = jettyKey+"_shard_"+i; - JettySolrRunner j = createJetty(shardKey); + JettySolrRunner j = createJetty(shardKey, basicAuth); //use the first corename specified as the Share template addCoreToJetty(shardKey, coreNames[0], shardname, props); jettyShards.add(j); @@ -775,9 +779,9 @@ public abstract class AbstractAlfrescoDistributedTest extends SolrTestCaseJ4 jettyClients.clear(); } - public JettySolrRunner createJetty(File solrHome, String dataDir, String shardList, boolean sslEnabled, String schemaOverride) throws Exception + public JettySolrRunner createJetty(File solrHome, String dataDir, String shardList, boolean sslEnabled, String schemaOverride, boolean basicAuth) throws Exception { - return createJetty(solrHome, dataDir, shardList, sslEnabled, schemaOverride, useExplicitNodeNames); + return createJetty(solrHome, dataDir, shardList, sslEnabled, schemaOverride, useExplicitNodeNames, basicAuth); } /** @@ -792,7 +796,7 @@ public abstract class AbstractAlfrescoDistributedTest extends SolrTestCaseJ4 * @throws Exception */ public JettySolrRunner createJetty(File solrHome, String dataDir, String shardList, boolean sslEnabled, - String schemaOverride, boolean explicitCoreNodeName) throws Exception + String schemaOverride, boolean explicitCoreNodeName, boolean basicAuth) throws Exception { Properties props = new Properties(); if (schemaOverride != null) @@ -809,8 +813,17 @@ public abstract class AbstractAlfrescoDistributedTest extends SolrTestCaseJ4 props.setProperty("coreNodeName", Integer.toString(nodeCnt.incrementAndGet())); } SSLConfig sslConfig = new SSLConfig(sslEnabled, false, null, null, null, null); - JettyConfig config = JettyConfig.builder().setContext("/solr").stopAtShutdown(true).withSSLConfig(sslConfig) - .build(); + + JettyConfig config = null; + + if(basicAuth) { + System.out.println("###### adding basic auth ######"); + config = JettyConfig.builder().setContext("/solr").withFilter(BasicAuthFilter.class, "/sql/*").stopAtShutdown(true).withSSLConfig(sslConfig).build(); + } else { + System.out.println("###### no basic auth ######"); + config = JettyConfig.builder().setContext("/solr").stopAtShutdown(true).withSSLConfig(sslConfig).build(); + } + JettySolrRunner jetty = new JettySolrRunner(solrHome.getAbsolutePath(), props, config); // .stopAtShutdown(true) // .withFilters(getExtraRequestFilters()) @@ -1809,4 +1822,41 @@ public abstract class AbstractAlfrescoDistributedTest extends SolrTestCaseJ4 return defaultClient; } } + + public static class BasicAuthFilter implements Filter { + + public BasicAuthFilter() { + + } + + public void init(FilterConfig config) { + + } + + public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) + throws IOException, ServletException { + //Parse the basic auth filter + String auth = ((HttpServletRequest)request).getHeader("Authorization"); + if(auth != null) { + auth = auth.replace("Basic ", ""); + byte[] bytes = Base64.getDecoder().decode(auth); + String decodedBytes = new String(bytes); + String[] pair = decodedBytes.split(":"); + String user = pair[0]; + String password = pair[1]; + //Just look for the hard coded user and password. + if (user.equals("test") && password.equals("pass")) { + filterChain.doFilter(request, response); + } else { + ((HttpServletResponse) response).sendError(HttpServletResponse.SC_FORBIDDEN); + } + } else { + ((HttpServletResponse) response).sendError(HttpServletResponse.SC_FORBIDDEN); + } + } + + public void destroy() { + + } + } } diff --git a/search-services/packaging/buildAndTest.sh b/search-services/packaging/buildAndTest.sh index 46faff7c0..889fb798e 100755 --- a/search-services/packaging/buildAndTest.sh +++ b/search-services/packaging/buildAndTest.sh @@ -3,32 +3,33 @@ set -e [ "$DEBUG" ] && set -x -# set current working directory to the directory of the script -cd "$bamboo_working_directory" - nicebranch=`echo "$bamboo_planRepository_1_branch" | sed 's/\//_/'` -dockerImage="quay.io/alfresco/search-services:$bamboo_maven_version" -echo "Building $dockerImage from $nicebranch using version $bamboo_maven_version" -docker build -t $dockerImage target/docker-resources - -echo "Running tests" -docker run --rm "$dockerImage" [ -d /opt/alfresco-search-services/solr ] || (echo "solr dir does not exist" && exit 1) -docker run --rm "$dockerImage" [ -d /opt/alfresco-search-services/data/alfrescoModels ] || (echo "alfrescoModels dir does not exist" && exit 1) -docker run --rm "$dockerImage" [ -e /opt/alfresco-search-services/solr.in.sh ] || (echo "solr.in.sh does not exist" && exit 1) -docker run --rm "$dockerImage" grep -q Alfresco /opt/alfresco-search-services/solr.in.sh || (echo "solr.in.sh does not contain Alfresco config" && exit 1) -docker run --rm "$dockerImage" grep -q Alfresco /opt/alfresco-search-services/solr.in.cmd || (echo "solr.in.cmd does not containAlfresco config" && exit 1) -docker run --rm "$dockerImage" grep -q LOG4J_PROPS /opt/alfresco-search-services/solr.in.sh || (echo "solr.in.sh does not contain LOG4J_PROPS" && exit 1) -docker run --rm "$dockerImage" grep -q LOG4J_CONFIG /opt/alfresco-search-services/solr.in.cmd || (echo "solr.in.cmd does not contain LOG4J_CONFIG" && exit 1) -docker run --rm "$dockerImage" [ -e /opt/alfresco-search-services/solrhome/conf/shared.properties ] || (echo "shared.properties does not exist" && exit 1) -docker run --rm "$dockerImage" /opt/alfresco-search-services/solr/bin/solr start - -if [ "${nicebranch}" = "local" ] +if [ "${nicebranch}" = "master" ] then - echo "Skipping docker publish for local build" -else - echo "Publishing $dockerImage..." - docker push "$dockerImage" -fi + # set current working directory to the directory of the script + cd "$bamboo_working_directory" -echo "Docker SUCCESS" + dockerImage="quay.io/alfresco/search-services:$bamboo_maven_version" + echo "Building $dockerImage from $nicebranch using version $bamboo_maven_version" + + docker build -t $dockerImage packaging/target/docker-resources + + echo "Running tests" + docker run --rm "$dockerImage" [ -d /opt/alfresco-search-services/solr ] || (echo "solr dir does not exist" && exit 1) + docker run --rm "$dockerImage" [ -d /opt/alfresco-search-services/data/alfrescoModels ] || (echo "alfrescoModels dir does not exist" && exit 1) + docker run --rm "$dockerImage" [ -e /opt/alfresco-search-services/solr.in.sh ] || (echo "solr.in.sh does not exist" && exit 1) + docker run --rm "$dockerImage" grep -q Alfresco /opt/alfresco-search-services/solr.in.sh || (echo "solr.in.sh does not contain Alfresco config" && exit 1) + docker run --rm "$dockerImage" grep -q Alfresco /opt/alfresco-search-services/solr.in.cmd || (echo "solr.in.cmd does not containAlfresco config" && exit 1) + docker run --rm "$dockerImage" grep -q LOG4J_PROPS /opt/alfresco-search-services/solr.in.sh || (echo "solr.in.sh does not contain LOG4J_PROPS" && exit 1) + docker run --rm "$dockerImage" grep -q LOG4J_CONFIG /opt/alfresco-search-services/solr.in.cmd || (echo "solr.in.cmd does not contain LOG4J_CONFIG" && exit 1) + docker run --rm "$dockerImage" [ -e /opt/alfresco-search-services/solrhome/conf/shared.properties ] || (echo "shared.properties does not exist" && exit 1) + docker run --rm "$dockerImage" /opt/alfresco-search-services/solr/bin/solr start + + echo "Publishing $dockerImage..." + docker push "$dockerImage" + + echo "Docker SUCCESS" +else + echo "Only building and publishing docker images from master. Skipping for ${nicebranch}" +fi diff --git a/search-services/pom.xml b/search-services/pom.xml index c97fde913..fe4c989d1 100644 --- a/search-services/pom.xml +++ b/search-services/pom.xml @@ -11,7 +11,7 @@ pom Alfresco Solr Search parent - 6.7.0-patched + 6.6.0 6.5