You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2015/02/26 16:01:40 UTC

svn commit: r1662471 - in /lucene/dev/branches/branch_5x: ./ solr/ solr/contrib/ solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/ solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/ solr/contrib/morphlines-core/src/test/...

Author: romseygeek
Date: Thu Feb 26 15:01:39 2015
New Revision: 1662471

URL: http://svn.apache.org/r1662471
Log:
SOLR-7166: Encapsulate JettySolrRunner config

Added:
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettyConfig.java
      - copied unchanged from r1662449, lucene/dev/trunk/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettyConfig.java
Modified:
    lucene/dev/branches/branch_5x/   (props changed)
    lucene/dev/branches/branch_5x/solr/   (props changed)
    lucene/dev/branches/branch_5x/solr/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_5x/solr/contrib/   (props changed)
    lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContentStreamDataSource.java
    lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSolrEntityProcessorEndToEnd.java
    lucene/dev/branches/branch_5x/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MorphlineGoLiveMiniMRTest.java
    lucene/dev/branches/branch_5x/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java
    lucene/dev/branches/branch_5x/solr/core/   (props changed)
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/client/solrj/embedded/SSLConfig.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/TestSolrCoreProperties.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/OpenCloseCoreStressTest.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminHandlerTest.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/rest/schema/TestFieldCollectionResource.java
    lucene/dev/branches/branch_5x/solr/solrj/   (props changed)
    lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttpSolrClient.java
    lucene/dev/branches/branch_5x/solr/test-framework/   (props changed)
    lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
    lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/SolrJettyTestBase.java
    lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
    lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
    lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java

Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Thu Feb 26 15:01:39 2015
@@ -163,6 +163,8 @@ Other Changes
 * SOLR-7160: Rename ConfigSolr to NodeConfig, and decouple it from xml
   representation (Alan Woodward)
 
+* SOLR-7166: Encapsulate JettySolrRunner configuration (Alan Woodward)
+
 * SOLR-7130: Make stale state notification work without failing the requests
   (Noble Paul, shalin)
 

Modified: lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContentStreamDataSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContentStreamDataSource.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContentStreamDataSource.java (original)
+++ lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestContentStreamDataSource.java Thu Feb 26 15:01:39 2015
@@ -174,7 +174,7 @@ public class TestContentStreamDataSource
 
   private JettySolrRunner createJetty(SolrInstance instance) throws Exception {
     System.setProperty("solr.data.dir", instance.getDataDir());
-    JettySolrRunner jetty = new JettySolrRunner(instance.getHomeDir(), "/solr", 0, null, null, true, null, sslConfig);
+    JettySolrRunner jetty = new JettySolrRunner(instance.getHomeDir(), buildJettyConfig("/solr"));
     jetty.start();
     return jetty;
   }

Modified: lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSolrEntityProcessorEndToEnd.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSolrEntityProcessorEndToEnd.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSolrEntityProcessorEndToEnd.java (original)
+++ lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSolrEntityProcessorEndToEnd.java Thu Feb 26 15:01:39 2015
@@ -340,7 +340,7 @@ public class TestSolrEntityProcessorEndT
   }
   
   private JettySolrRunner createJetty(SolrInstance instance) throws Exception {
-    JettySolrRunner jetty = new JettySolrRunner(instance.getHomeDir(), "/solr", 0, null, null, true, null, sslConfig);
+    JettySolrRunner jetty = new JettySolrRunner(instance.getHomeDir(), buildJettyConfig("/solr"));
     jetty.setDataDir(instance.getDataDir());
     jetty.start();
     return jetty;

Modified: lucene/dev/branches/branch_5x/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MorphlineGoLiveMiniMRTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MorphlineGoLiveMiniMRTest.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MorphlineGoLiveMiniMRTest.java (original)
+++ lucene/dev/branches/branch_5x/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MorphlineGoLiveMiniMRTest.java Thu Feb 26 15:01:39 2015
@@ -743,9 +743,9 @@ public class MorphlineGoLiveMiniMRTest e
   public JettySolrRunner createJetty(File solrHome, String dataDir,
       String shardList, String solrConfigOverride, String schemaOverride)
       throws Exception {
-    
-    JettySolrRunner jetty = new JettySolrRunner(solrHome.getAbsolutePath(),
-        context, 0, solrConfigOverride, schemaOverride, true, null, sslConfig);
+
+    JettySolrRunner jetty
+        = new JettySolrRunner(solrHome.getAbsolutePath(), solrConfigOverride, schemaOverride, buildJettyConfig(context));
 
     jetty.setShards(shardList);
     

Modified: lucene/dev/branches/branch_5x/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java (original)
+++ lucene/dev/branches/branch_5x/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java Thu Feb 26 15:01:39 2015
@@ -144,8 +144,8 @@ public abstract class AbstractSolrMorphl
       throws Exception {
 
     writeCoreProperties(solrHome.toPath(), DEFAULT_TEST_CORENAME);
-    JettySolrRunner jetty = new JettySolrRunner(solrHome.getAbsolutePath(),
-        context, 0, solrConfigOverride, schemaOverride, true, null, sslConfig);
+    JettySolrRunner jetty
+        = new JettySolrRunner(solrHome.getAbsolutePath(), solrConfigOverride, schemaOverride, buildJettyConfig(context));
 
     jetty.setShards(shardList);
     

Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java Thu Feb 26 15:01:39 2015
@@ -52,7 +52,6 @@ import java.util.EnumSet;
 import java.util.LinkedList;
 import java.util.Random;
 import java.util.SortedMap;
-import java.util.TreeMap;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 
@@ -70,8 +69,6 @@ public class JettySolrRunner {
   FilterHolder dispatchFilter;
   FilterHolder debugFilter;
 
-  String context;
-
   private String solrConfigFilename;
   private String schemaFilename;
   private final String coreRootDirectory;
@@ -79,6 +76,7 @@ public class JettySolrRunner {
   private boolean waitOnSolr = false;
 
   private int lastPort = -1;
+  private final JettyConfig config;
 
   private String shards;
 
@@ -87,20 +85,13 @@ public class JettySolrRunner {
   
   private volatile boolean startedBefore = false;
 
-  private String solrHome;
-
-  private boolean stopAtShutdown;
+  private final String solrHome;
 
   private String coreNodeName;
 
   private final String name;
 
-  /** Maps servlet holders (i.e. factories: class + init params) to path specs */
-  private SortedMap<ServletHolder,String> extraServlets = new TreeMap<>();
-  private SortedMap<Class,String> extraRequestFilters;
   private LinkedList<FilterHolder> extraFilters;
-
-  private SSLConfig sslConfig;
   
   private int proxyPort = -1;
 
@@ -124,21 +115,6 @@ public class JettySolrRunner {
     @Override
     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       nRequests.incrementAndGet();
-
-      /***
-      HttpServletRequest req = (HttpServletRequest)servletRequest;
-      HttpServletResponse resp = (HttpServletResponse)servletResponse;
-
-      String path = req.getServletPath();
-      if( req.getPathInfo() != null ) {
-        // this lets you handle /update/commit when /update is a servlet
-        path += req.getPathInfo();
-      }
-      System.out.println("###################### FILTER request " + servletRequest);
-      System.out.println("\t\tgetServletPath="+req.getServletPath());
-      System.out.println("\t\tgetPathInfo="+req.getPathInfo());
-      ***/
-
       filterChain.doFilter(servletRequest, servletResponse);
     }
 
@@ -152,81 +128,111 @@ public class JettySolrRunner {
 
 
   public JettySolrRunner(String solrHome, String context, int port) {
-    this.init(solrHome, context, port, true);
-    this.name = "jetty-" + JETTY_ID_COUNTER.incrementAndGet();
-    this.coreRootDirectory = System.getProperty("coreRootDirectory", null);
+    this(solrHome, JettyConfig.builder().setContext(context).setPort(port).build());
   }
 
   public JettySolrRunner(String solrHome, String context, int port, String solrConfigFilename, String schemaFileName) {
-    this.init(solrHome, context, port, true);
-    this.solrConfigFilename = solrConfigFilename;
-    this.schemaFilename = schemaFileName;
-    this.name = "jetty-" + JETTY_ID_COUNTER.incrementAndGet();
-    this.coreRootDirectory = System.getProperty("coreRootDirectory", null);
+    this(solrHome, solrConfigFilename, schemaFileName, JettyConfig.builder()
+        .setContext(context)
+        .setPort(port)
+        .build());
   }
-  
+
+  @Deprecated
   public JettySolrRunner(String solrHome, String context, int port,
       String solrConfigFilename, String schemaFileName, boolean stopAtShutdown) {
-    this.init(solrHome, context, port, stopAtShutdown);
-    this.solrConfigFilename = solrConfigFilename;
-    this.schemaFilename = schemaFileName;
-    this.name = "jetty-" + JETTY_ID_COUNTER.incrementAndGet();
-    this.coreRootDirectory = System.getProperty("coreRootDirectory", null);
+    this(solrHome, solrConfigFilename, schemaFileName, JettyConfig.builder()
+        .setContext(context)
+        .setPort(port)
+        .stopAtShutdown(stopAtShutdown)
+        .build());
   }
 
   /**
    * Constructor taking an ordered list of additional (servlet holder -&gt; path spec) mappings
    * to add to the servlet context
+   * @deprecated use {@link #JettySolrRunner(String,String,String,JettyConfig)}
    */
+  @Deprecated
   public JettySolrRunner(String solrHome, String context, int port,
       String solrConfigFilename, String schemaFileName, boolean stopAtShutdown,
       SortedMap<ServletHolder,String> extraServlets) {
-    this (solrHome, context, port, solrConfigFilename, schemaFileName,
-      stopAtShutdown, extraServlets, null, null);
+    this(solrHome, solrConfigFilename, schemaFileName, JettyConfig.builder()
+        .setContext(context)
+        .setPort(port)
+        .stopAtShutdown(stopAtShutdown)
+        .withServlets(extraServlets)
+        .build());
+  }
+
+  @Deprecated
+  public JettySolrRunner(String solrHome, String context, int port, String solrConfigFilename, String schemaFileName,
+                         boolean stopAtShutdown, SortedMap<ServletHolder, String> extraServlets, SSLConfig sslConfig) {
+    this(solrHome, solrConfigFilename, schemaFileName, JettyConfig.builder()
+        .setContext(context)
+        .setPort(port)
+        .stopAtShutdown(stopAtShutdown)
+        .withServlets(extraServlets)
+        .withSSLConfig(sslConfig)
+        .build());
+  }
+
+  @Deprecated
+  public JettySolrRunner(String solrHome, String context, int port, String solrConfigFilename, String schemaFileName,
+                         boolean stopAtShutdown, SortedMap<ServletHolder, String> extraServlets, SSLConfig sslConfig,
+                         SortedMap<Class<? extends Filter>, String> extraRequestFilters) {
+    this(solrHome, solrConfigFilename, schemaFileName, JettyConfig.builder()
+        .setContext(context)
+        .setPort(port)
+        .stopAtShutdown(stopAtShutdown)
+        .withServlets(extraServlets)
+        .withFilters(extraRequestFilters)
+        .withSSLConfig(sslConfig)
+        .build());
   }
-  
-  public JettySolrRunner(String solrHome, String context, int port,
-      String solrConfigFilename, String schemaFileName, boolean stopAtShutdown,
-      SortedMap<ServletHolder,String> extraServlets, SSLConfig sslConfig) {
-    this (solrHome, context, port, solrConfigFilename, schemaFileName,
-      stopAtShutdown, extraServlets, sslConfig, null);
+
+  /**
+   * Construct a JettySolrRunner
+   *
+   * @param solrHome    the base path to run from
+   * @param jettyConfig the configuration
+   */
+  public JettySolrRunner(String solrHome, JettyConfig jettyConfig) {
+    this(solrHome, null, null, jettyConfig);
   }
 
   /**
-   * Constructor taking an ordered list of additional (filter holder -&gt; path spec) mappings.
-   * Filters are placed after the DebugFilter but before the SolrDispatchFilter.
+   * Construct a JettySolrRunner
+   *
+   * @param solrHome            the base path to run from
+   * @param solrConfigFilename  the name of the solrconfig file to use
+   * @param schemaFileName      the name of the schema file to use
+   * @param jettyConfig         the configuration
    */
-  public JettySolrRunner(String solrHome, String context, int port,
-      String solrConfigFilename, String schemaFileName, boolean stopAtShutdown,
-      SortedMap<ServletHolder,String> extraServlets, SSLConfig sslConfig,
-      SortedMap<Class,String> extraRequestFilters) {
-    if (null != extraServlets) { this.extraServlets.putAll(extraServlets); }
-    if (null != extraRequestFilters) {
-      this.extraRequestFilters = new TreeMap<>(extraRequestFilters.comparator());
-      this.extraRequestFilters.putAll(extraRequestFilters);
-    }
+  public JettySolrRunner(String solrHome, String solrConfigFilename, String schemaFileName, JettyConfig jettyConfig) {
+
     this.solrConfigFilename = solrConfigFilename;
     this.schemaFilename = schemaFileName;
-    this.sslConfig = sslConfig;
 
     this.name = "jetty-" + JETTY_ID_COUNTER.incrementAndGet();
     this.coreRootDirectory = System.getProperty("coreRootDirectory", null);
 
-    this.init(solrHome, context, port, stopAtShutdown);
+    this.config = jettyConfig;
+    this.solrHome = solrHome;
+
+    this.init(this.config.port);
   }
-  
-  private void init(String solrHome, String context, int port, boolean stopAtShutdown) {
-    this.context = context;
-    server = new Server(port);
 
-    this.solrHome = solrHome;
-    this.stopAtShutdown = stopAtShutdown;
-    server.setStopAtShutdown(stopAtShutdown);
-    if (!stopAtShutdown) {
+  private void init(int port) {
+
+    server = new Server(port);
+    server.setStopAtShutdown(config.stopAtShutdown);
+    if (!config.stopAtShutdown) {
       server.setGracefulShutdown(0);
     }
 
     System.setProperty("solr.solr.home", solrHome);
+
     if (System.getProperty("jetty.testMode") != null) {
       final String connectorName = System.getProperty("tests.jettyConnector", "SelectChannel");
 
@@ -239,13 +245,11 @@ public class JettySolrRunner {
       // the server as well as any client actions taken by this JVM in
       // talking to that server, but for the purposes of testing that should 
       // be good enough
-      final boolean useSsl = sslConfig == null ? false : sslConfig.isSSLMode();
-      final SslContextFactory sslcontext = new SslContextFactory(false);
-      sslInit(useSsl, sslcontext);
+      final SslContextFactory sslcontext = SSLConfig.createContextFactory(config.sslConfig);
 
       final Connector connector;
       if ("SelectChannel".equals(connectorName)) {
-        final SelectChannelConnector c = useSsl
+        final SelectChannelConnector c = sslcontext != null
           ? new SslSelectChannelConnector(sslcontext)
           : new SelectChannelConnector();
         c.setReuseAddress(true);
@@ -253,7 +257,7 @@ public class JettySolrRunner {
         c.setSoLingerTime(0);
         connector = c;
       } else if ("Socket".equals(connectorName)) {
-        final SocketConnector c = useSsl
+        final SocketConnector c = sslcontext != null
           ? new SslSocketConnector(sslcontext)
           : new SocketConnector();
         c.setReuseAddress(true);
@@ -287,7 +291,7 @@ public class JettySolrRunner {
     }
 
     // Initialize the servlets
-    final ServletContextHandler root = new ServletContextHandler(server,context,ServletContextHandler.SESSIONS);
+    final ServletContextHandler root = new ServletContextHandler(server, config.context, ServletContextHandler.SESSIONS);
     root.setHandler(new GzipHandler());
     server.addLifeCycleListener(new LifeCycle.Listener() {
 
@@ -309,7 +313,9 @@ public class JettySolrRunner {
 
       @Override
       public void lifeCycleStarted(LifeCycle arg0) {
+
         lastPort = getFirstConnectorPort();
+
         System.setProperty("hostPort", Integer.toString(lastPort));
         if (solrConfigFilename != null) System.setProperty("solrconfig",
             solrConfigFilename);
@@ -317,21 +323,20 @@ public class JettySolrRunner {
             schemaFilename);
         if (coreRootDirectory != null)
           System.setProperty("coreRootDirectory", coreRootDirectory);
-//        SolrDispatchFilter filter = new SolrDispatchFilter();
-//        FilterHolder fh = new FilterHolder(filter);
+
         debugFilter = root.addFilter(DebugFilter.class, "*", EnumSet.of(DispatcherType.REQUEST) );
-        if (extraRequestFilters != null) {
-          extraFilters = new LinkedList<>();
-          for (Class filterClass : extraRequestFilters.keySet()) {
-            extraFilters.add(root.addFilter(filterClass, extraRequestFilters.get(filterClass),
+        extraFilters = new LinkedList<>();
+        for (Class<? extends Filter> filterClass : config.extraFilters.keySet()) {
+          extraFilters.add(root.addFilter(filterClass, config.extraFilters.get(filterClass),
               EnumSet.of(DispatcherType.REQUEST)));
-          }
         }
+
         dispatchFilter = root.addFilter(SolrDispatchFilter.class, "*", EnumSet.of(DispatcherType.REQUEST) );
-        for (ServletHolder servletHolder : extraServlets.keySet()) {
-          String pathSpec = extraServlets.get(servletHolder);
+        for (ServletHolder servletHolder : config.extraServlets.keySet()) {
+          String pathSpec = config.extraServlets.get(servletHolder);
           root.addServlet(servletHolder, pathSpec);
         }
+
         if (solrConfigFilename != null) System.clearProperty("solrconfig");
         if (schemaFilename != null) System.clearProperty("schema");
         System.clearProperty("solr.solr.home");
@@ -348,47 +353,6 @@ public class JettySolrRunner {
 
   }
 
-  private void sslInit(final boolean useSsl, final SslContextFactory sslcontext) {
-    if (useSsl && sslConfig != null) {
-      if (null != sslConfig.getKeyStore()) {
-        sslcontext.setKeyStorePath(sslConfig.getKeyStore());
-      }
-      if (null != sslConfig.getKeyStorePassword()) {
-        sslcontext.setKeyStorePassword(sslConfig.getKeyStorePassword());
-      }
-      if (null != sslConfig.getTrustStore()) {
-        sslcontext.setTrustStore(System
-            .getProperty(sslConfig.getTrustStore()));
-      }
-      if (null != sslConfig.getTrustStorePassword()) {
-        sslcontext.setTrustStorePassword(sslConfig.getTrustStorePassword());
-      }
-      sslcontext.setNeedClientAuth(sslConfig.isClientAuthMode());
-    } else {
-      boolean jettySsl = Boolean.getBoolean(System.getProperty("tests.jettySsl"));
-
-      if (jettySsl) {
-        if (null != System.getProperty("javax.net.ssl.keyStore")) {
-          sslcontext.setKeyStorePath
-            (System.getProperty("javax.net.ssl.keyStore"));
-        }
-        if (null != System.getProperty("javax.net.ssl.keyStorePassword")) {
-          sslcontext.setKeyStorePassword
-            (System.getProperty("javax.net.ssl.keyStorePassword"));
-        }
-        if (null != System.getProperty("javax.net.ssl.trustStore")) {
-          sslcontext.setTrustStore
-            (System.getProperty("javax.net.ssl.trustStore"));
-        }
-        if (null != System.getProperty("javax.net.ssl.trustStorePassword")) {
-          sslcontext.setTrustStorePassword
-            (System.getProperty("javax.net.ssl.trustStorePassword"));
-        }
-        sslcontext.setNeedClientAuth(Boolean.getBoolean("tests.jettySsl.clientAuth"));
-      }
-    }
-  }
-
   public FilterHolder getDispatchFilter() {
     return dispatchFilter;
   }
@@ -412,7 +376,7 @@ public class JettySolrRunner {
     // if started before, make a new server
     if (startedBefore) {
       waitOnSolr = false;
-      init(solrHome, context, lastPort, stopAtShutdown);
+      init(lastPort);
     } else {
       startedBefore = true;
     }
@@ -523,7 +487,7 @@ public class JettySolrRunner {
                                         c.getLocalPort());
       }
       protocol = (c instanceof SslConnector) ? "https" : "http";
-      return new URL(protocol, c.getHost(), c.getLocalPort(), context);
+      return new URL(protocol, c.getHost(), c.getLocalPort(), config.context);
 
     } catch (MalformedURLException e) {
       throw new  IllegalStateException

Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/client/solrj/embedded/SSLConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/client/solrj/embedded/SSLConfig.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/client/solrj/embedded/SSLConfig.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/client/solrj/embedded/SSLConfig.java Thu Feb 26 15:01:39 2015
@@ -17,6 +17,8 @@ package org.apache.solr.client.solrj.emb
  * limitations under the License.
  */
 
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+
 public class SSLConfig {
   
   private boolean useSsl;
@@ -66,4 +68,55 @@ public class SSLConfig {
   public String getTrustStorePassword() {
     return trustStorePassword;
   }
+
+  public static SslContextFactory createContextFactory(SSLConfig sslConfig) {
+
+    if (sslConfig == null) {
+      if (Boolean.getBoolean(System.getProperty("tests.jettySsl"))) {
+        return configureSslFromSysProps();
+      }
+      return null;
+    }
+
+    if (!sslConfig.useSsl)
+      return null;
+
+    SslContextFactory factory = new SslContextFactory(false);
+    if (sslConfig.getKeyStore() != null)
+      factory.setKeyStorePath(sslConfig.getKeyStore());
+    if (sslConfig.getKeyStorePassword() != null)
+      factory.setKeyStorePassword(sslConfig.getKeyStorePassword());
+    if (sslConfig.getTrustStore() != null)
+      factory.setTrustStore(System.getProperty(sslConfig.getTrustStore()));
+    if (sslConfig.getTrustStorePassword() != null)
+      factory.setTrustStorePassword(sslConfig.getTrustStorePassword());
+
+    return factory;
+
+  }
+
+  private static SslContextFactory configureSslFromSysProps() {
+
+    SslContextFactory sslcontext = new SslContextFactory(false);
+
+    if (null != System.getProperty("javax.net.ssl.keyStore")) {
+      sslcontext.setKeyStorePath
+          (System.getProperty("javax.net.ssl.keyStore"));
+    }
+    if (null != System.getProperty("javax.net.ssl.keyStorePassword")) {
+      sslcontext.setKeyStorePassword
+          (System.getProperty("javax.net.ssl.keyStorePassword"));
+    }
+    if (null != System.getProperty("javax.net.ssl.trustStore")) {
+      sslcontext.setTrustStore
+          (System.getProperty("javax.net.ssl.trustStore"));
+    }
+    if (null != System.getProperty("javax.net.ssl.trustStorePassword")) {
+      sslcontext.setTrustStorePassword
+          (System.getProperty("javax.net.ssl.trustStorePassword"));
+    }
+    sslcontext.setNeedClientAuth(Boolean.getBoolean("tests.jettySsl.clientAuth"));
+
+    return sslcontext;
+  }
 }

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/TestSolrCoreProperties.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/TestSolrCoreProperties.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/TestSolrCoreProperties.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/TestSolrCoreProperties.java Thu Feb 26 15:01:39 2015
@@ -73,7 +73,7 @@ public class TestSolrCoreProperties exte
 
     Files.createFile(collDir.toPath().resolve("core.properties"));
 
-    jetty = new JettySolrRunner(homeDir.getAbsolutePath(), "/solr", 0, null, null, true, null, sslConfig);
+    jetty = new JettySolrRunner(homeDir.getAbsolutePath(), buildJettyConfig("/solr"));
 
     // this sets the property for jetty starting SolrDispatchFilter
     if (System.getProperty("solr.data.dir") == null && System.getProperty("solr.hdfs.home") == null) {

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/SSLMigrationTest.java Thu Feb 26 15:01:39 2015
@@ -17,16 +17,12 @@ package org.apache.solr.cloud;
  * limitations under the License.
  */
 
-import static org.apache.solr.common.cloud.ZkNodeProps.makeMap;
-import org.apache.lucene.util.LuceneTestCase.BadApple;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
 import org.apache.commons.lang.StringUtils;
+import org.apache.lucene.util.LuceneTestCase.BadApple;
+import org.apache.lucene.util.LuceneTestCase.Slow;
+import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
 import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.embedded.JettyConfig;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.client.solrj.impl.HttpClientUtil;
 import org.apache.solr.client.solrj.impl.LBHttpSolrClient;
@@ -39,10 +35,15 @@ import org.apache.solr.common.params.Col
 import org.apache.solr.common.params.MapSolrParams;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.util.SSLTestConfig;
-import org.apache.solr.SolrTestCaseJ4.SuppressSSL;
-import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.junit.Test;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import static org.apache.solr.common.cloud.ZkNodeProps.makeMap;
+
 /**
  * We want to make sure that when migrating between http and https modes the
  * replicas will not be rejoined as new nodes, but rather take off where it left
@@ -72,9 +73,15 @@ public class SSLMigrationTest extends Ab
     HttpClientUtil.setConfigurer(sslConfig.getHttpClientConfigurer());
     for(int i = 0; i < this.jettys.size(); i++) {
       JettySolrRunner runner = jettys.get(i);
-      JettySolrRunner newRunner = new JettySolrRunner(runner.getSolrHome(), 
-          context, runner.getLocalPort(), getSolrConfigFile(), getSchemaFile(), 
-          false, getExtraServlets(), sslConfig, getExtraRequestFilters());
+      JettyConfig config = JettyConfig.builder()
+          .setContext(context)
+          .setPort(runner.getLocalPort())
+          .stopAtShutdown(false)
+          .withServlets(getExtraServlets())
+          .withFilters(getExtraRequestFilters())
+          .withSSLConfig(sslConfig)
+          .build();
+      JettySolrRunner newRunner = new JettySolrRunner(runner.getSolrHome(), getSolrConfigFile(), getSchemaFile(), config);
       newRunner.setDataDir(getDataDir(testDir + "/shard" + i + "/data"));
       newRunner.start(true);
       jettys.set(i, newRunner);

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/OpenCloseCoreStressTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/OpenCloseCoreStressTest.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/OpenCloseCoreStressTest.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/OpenCloseCoreStressTest.java Thu Feb 26 15:01:39 2015
@@ -87,7 +87,7 @@ public class OpenCloseCoreStressTest ext
 
     solrHomeDirectory = createTempDir().toFile();
 
-    jetty = new JettySolrRunner(solrHomeDirectory.getAbsolutePath(), "/solr", 0, null, null, true, null, sslConfig);
+    jetty = new JettySolrRunner(solrHomeDirectory.getAbsolutePath(), buildJettyConfig("/solr"));
   }
 
   @After

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminHandlerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminHandlerTest.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminHandlerTest.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminHandlerTest.java Thu Feb 26 15:01:39 2015
@@ -200,7 +200,7 @@ public class CoreAdminHandlerTest extend
     copySolrHomeToTemp(solrHomeDirectory, "corex", true);
     File corex = new File(solrHomeDirectory, "corex");
     FileUtils.write(new File(corex, "core.properties"), "", Charsets.UTF_8.toString());
-    JettySolrRunner runner = new JettySolrRunner(solrHomeDirectory.getAbsolutePath(), "/solr", 0, null, null, true, null, sslConfig);
+    JettySolrRunner runner = new JettySolrRunner(solrHomeDirectory.getAbsolutePath(), buildJettyConfig("/solr"));
     runner.start();
 
     try (HttpSolrClient client = new HttpSolrClient(runner.getBaseUrl() + "/corex")) {

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/rest/schema/TestFieldCollectionResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/rest/schema/TestFieldCollectionResource.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/rest/schema/TestFieldCollectionResource.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/rest/schema/TestFieldCollectionResource.java Thu Feb 26 15:01:39 2015
@@ -16,6 +16,7 @@ package org.apache.solr.rest.schema;
  * limitations under the License.
  */
 
+import com.carrotsearch.randomizedtesting.annotations.Seed;
 import org.apache.solr.rest.SolrRestletTestBase;
 import org.junit.Test;
 

Modified: lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttpSolrClient.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttpSolrClient.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttpSolrClient.java (original)
+++ lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/TestLBHttpSolrClient.java Thu Feb 26 15:01:39 2015
@@ -26,6 +26,7 @@ import org.apache.lucene.util.LuceneTest
 import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.solr.SolrIgnoredThreadsFilter;
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.client.solrj.embedded.JettyConfig;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.client.solrj.impl.HttpClientUtil;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
@@ -308,7 +309,12 @@ public class TestLBHttpSolrClient extend
     }
 
     public void startJetty() throws Exception {
-      jetty = new JettySolrRunner(getHomeDir(), "/solr", port, "bad_solrconfig.xml", null, true, null, sslConfig);
+      jetty = new JettySolrRunner(getHomeDir(), "bad_solrconfig.xml", null, JettyConfig.builder()
+          .setContext("/solr")
+          .stopAtShutdown(true)
+          .setPort(port)
+          .withSSLConfig(sslConfig)
+          .build());
       jetty.setDataDir(getDataDir());
       jetty.start();
       int newPort = jetty.getLocalPort();

Modified: lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java (original)
+++ lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java Thu Feb 26 15:01:39 2015
@@ -24,6 +24,7 @@ import org.apache.lucene.util.TestUtil;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrResponse;
 import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.embedded.JettyConfig;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.request.UpdateRequest;
@@ -46,6 +47,7 @@ import org.junit.runners.model.Statement
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.servlet.Filter;
 import java.io.File;
 import java.io.IOException;
 import java.lang.annotation.ElementType;
@@ -389,10 +391,13 @@ public abstract class BaseDistributedSea
   
   public JettySolrRunner createJetty(File solrHome, String dataDir, String shardList, String solrConfigOverride, String schemaOverride, boolean explicitCoreNodeName) throws Exception {
 
-    boolean stopAtShutdown = true;
-    JettySolrRunner jetty = new JettySolrRunner
-        (solrHome.getAbsolutePath(), context, 0, solrConfigOverride, schemaOverride, stopAtShutdown,
-          getExtraServlets(), sslConfig, getExtraRequestFilters());
+    JettySolrRunner jetty = new JettySolrRunner(solrHome.getAbsolutePath(), solrConfigOverride, schemaOverride, JettyConfig.builder()
+        .stopAtShutdown(true)
+        .setContext(context)
+        .withFilters(getExtraRequestFilters())
+        .withServlets(getExtraServlets())
+        .withSSLConfig(sslConfig)
+        .build());
     jetty.setShards(shardList);
     jetty.setDataDir(dataDir);
     if (explicitCoreNodeName) {
@@ -409,7 +414,7 @@ public abstract class BaseDistributedSea
   }
 
   /** Override this method to insert extra filters into the JettySolrRunners that are created using createJetty() */
-  public SortedMap<Class,String> getExtraRequestFilters() {
+  public SortedMap<Class<? extends Filter>,String> getExtraRequestFilters() {
     return null;
   }
 

Modified: lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/SolrJettyTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/SolrJettyTestBase.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/SolrJettyTestBase.java (original)
+++ lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/SolrJettyTestBase.java Thu Feb 26 15:01:39 2015
@@ -21,6 +21,7 @@ import org.apache.commons.io.FileUtils;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
+import org.apache.solr.client.solrj.embedded.JettyConfig;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.util.ExternalPaths;
@@ -75,7 +76,15 @@ abstract public class SolrJettyTestBase
 
     context = context==null ? "/solr" : context;
     SolrJettyTestBase.context = context;
-    jetty = new JettySolrRunner(solrHome, context, 0, configFile, schemaFile, stopAtShutdown, extraServlets, sslConfig);
+
+    JettyConfig jettyConfig = JettyConfig.builder()
+        .setContext(context)
+        .stopAtShutdown(stopAtShutdown)
+        .withServlets(extraServlets)
+        .withSSLConfig(sslConfig)
+        .build();
+
+    jetty = new JettySolrRunner(solrHome, configFile, schemaFile, jettyConfig);
 
     // this sets the property for jetty starting SolrDispatchFilter
     if (System.getProperty("solr.data.dir") == null && System.getProperty("solr.hdfs.home") == null) {

Modified: lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java (original)
+++ lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java Thu Feb 26 15:01:39 2015
@@ -32,6 +32,7 @@ import org.apache.lucene.util.LuceneTest
 import org.apache.lucene.util.LuceneTestCase.SuppressSysoutChecks;
 import org.apache.lucene.util.QuickPatchThreadsFilter;
 import org.apache.lucene.util.TestUtil;
+import org.apache.solr.client.solrj.embedded.JettyConfig;
 import org.apache.solr.client.solrj.impl.HttpClientConfigurer;
 import org.apache.solr.client.solrj.impl.HttpClientUtil;
 import org.apache.solr.client.solrj.util.ClientUtils;
@@ -46,14 +47,14 @@ import org.apache.solr.common.params.Mod
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.ObjectReleaseTracker;
 import org.apache.solr.common.util.XML;
-import org.apache.solr.core.CoresLocator;
-import org.apache.solr.core.NodeConfig;
 import org.apache.solr.core.CoreContainer;
 import org.apache.solr.core.CoreDescriptor;
-import org.apache.solr.core.SolrXmlConfig;
+import org.apache.solr.core.CoresLocator;
+import org.apache.solr.core.NodeConfig;
 import org.apache.solr.core.SolrConfig;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.core.SolrResourceLoader;
+import org.apache.solr.core.SolrXmlConfig;
 import org.apache.solr.handler.UpdateRequestHandler;
 import org.apache.solr.request.LocalSolrQueryRequest;
 import org.apache.solr.request.SolrQueryRequest;
@@ -303,6 +304,10 @@ public abstract class SolrTestCaseJ4 ext
     
     return new SSLTestConfig(trySsl, trySslClientAuth);
   }
+
+  protected static JettyConfig buildJettyConfig(String context) {
+    return JettyConfig.builder().setContext(context).withSSLConfig(sslConfig).build();
+  }
   
   protected static String buildUrl(final int port, final String context) {
     return (isSSLMode() ? "https" : "http") + "://127.0.0.1:" + port + context;

Modified: lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java (original)
+++ lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java Thu Feb 26 15:01:39 2015
@@ -24,6 +24,7 @@ import org.apache.solr.client.solrj.Solr
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServerException;
+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.HttpSolrClient;
@@ -494,8 +495,16 @@ public abstract class AbstractFullDistri
   public JettySolrRunner createJetty(String dataDir, String ulogDir, String shardList,
       String solrConfigOverride) throws Exception {
 
-    JettySolrRunner jetty = new JettySolrRunner(getSolrHome(), context, 0,
-        solrConfigOverride, null, false, getExtraServlets(), sslConfig, getExtraRequestFilters());
+    JettyConfig jettyconfig = JettyConfig.builder()
+        .setContext(context)
+        .stopAtShutdown(false)
+        .withServlets(getExtraServlets())
+        .withFilters(getExtraRequestFilters())
+        .withSSLConfig(sslConfig)
+        .build();
+    
+    JettySolrRunner jetty = new JettySolrRunner(getSolrHome(), solrConfigOverride, null, jettyconfig);
+
     jetty.setShards(shardList);
     jetty.setDataDir(getDataDir(dataDir));
     jetty.start();
@@ -509,7 +518,16 @@ public abstract class AbstractFullDistri
       solrHome = getRelativeSolrHomePath(solrHome);
     }
 
-    JettySolrRunner jetty = new JettySolrRunner(solrHome.getPath(), context, 0, solrConfigOverride, schemaOverride, false, getExtraServlets(), sslConfig, getExtraRequestFilters());
+    JettyConfig jettyconfig = JettyConfig.builder()
+        .setContext(context)
+        .stopAtShutdown(false)
+        .withServlets(getExtraServlets())
+        .withFilters(getExtraRequestFilters())
+        .withSSLConfig(sslConfig)
+        .build();
+    
+    JettySolrRunner jetty = new JettySolrRunner(solrHome.getPath(), solrConfigOverride, schemaOverride, jettyconfig);
+
     jetty.setShards(shardList);
     jetty.setDataDir(getDataDir(dataDir));
     jetty.start();
@@ -526,13 +544,19 @@ public abstract class AbstractFullDistri
                                      String shardList, String solrConfigOverride, String schemaOverride)
       throws Exception {
 
-    JettySolrRunner jetty = new JettySolrRunner(solrHome.getPath(), context,
-        0, solrConfigOverride, schemaOverride, false,
-        getExtraServlets(), sslConfig, getExtraRequestFilters());
+    JettyConfig jettyconfig = JettyConfig.builder()
+        .setContext(context)
+        .stopAtShutdown(false)
+        .withServlets(getExtraServlets())
+        .withFilters(getExtraRequestFilters())
+        .withSSLConfig(sslConfig)
+        .build();
+
+    JettySolrRunner jetty = new JettySolrRunner(solrHome.getPath(), solrConfigOverride, schemaOverride, jettyconfig);
     jetty.setShards(shardList);
     jetty.setDataDir(getDataDir(dataDir));
 
-    SocketProxy proxy = new SocketProxy(0, sslConfig == null ? false : sslConfig.isSSLMode());
+    SocketProxy proxy = new SocketProxy(0, sslConfig != null && sslConfig.isSSLMode());
     jetty.setProxyPort(proxy.getListenPort());
     jetty.start();
     proxy.open(jetty.getBaseUrl().toURI());

Modified: lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java?rev=1662471&r1=1662470&r2=1662471&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java (original)
+++ lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/cloud/MiniSolrCloudCluster.java Thu Feb 26 15:01:39 2015
@@ -18,6 +18,7 @@ package org.apache.solr.cloud;
  */
 
 import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.embedded.JettyConfig;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.client.solrj.embedded.SSLConfig;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
@@ -33,6 +34,7 @@ import org.eclipse.jetty.servlet.Servlet
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.servlet.Filter;
 import java.io.File;
 import java.io.IOException;
 import java.util.Collections;
@@ -45,10 +47,11 @@ public class MiniSolrCloudCluster {
   
   private static Logger log = LoggerFactory.getLogger(MiniSolrCloudCluster.class);
 
-  private ZkTestServer zkServer;
-  private List<JettySolrRunner> jettys;
-  private File testDir;
-  private CloudSolrClient solrClient;
+  private final ZkTestServer zkServer;
+  private final List<JettySolrRunner> jettys;
+  private final File testDir;
+  private final CloudSolrClient solrClient;
+  private final JettyConfig jettyConfig;
 
   /**
    * "Mini" SolrCloud cluster to be used for testing
@@ -61,7 +64,7 @@ public class MiniSolrCloudCluster {
    */
   public MiniSolrCloudCluster(int numServers, String hostContext, File baseDir, File solrXml,
       SortedMap<ServletHolder, String> extraServlets,
-      SortedMap<Class, String> extraRequestFilters) throws Exception {
+      SortedMap<Class<? extends Filter>, String> extraRequestFilters) throws Exception {
     this(numServers, hostContext, baseDir, solrXml, extraServlets, extraRequestFilters, null);
   }
 
@@ -77,9 +80,20 @@ public class MiniSolrCloudCluster {
    */
   public MiniSolrCloudCluster(int numServers, String hostContext, File baseDir, File solrXml,
       SortedMap<ServletHolder, String> extraServlets,
-      SortedMap<Class, String> extraRequestFilters,
+      SortedMap<Class<? extends Filter>, String> extraRequestFilters,
       SSLConfig sslConfig) throws Exception {
-    testDir = baseDir;
+    this(numServers, baseDir, solrXml, JettyConfig.builder()
+        .setContext(hostContext)
+        .withSSLConfig(sslConfig)
+        .withFilters(extraRequestFilters)
+        .withServlets(extraServlets)
+        .build());
+  }
+
+  public MiniSolrCloudCluster(int numServers, File baseDir, File solrXml, JettyConfig jettyConfig) throws Exception {
+
+    this.testDir = baseDir;
+    this.jettyConfig = jettyConfig;
 
     String zkDir = testDir.getAbsolutePath() + File.separator
       + "zookeeper/server1/data";
@@ -95,13 +109,9 @@ public class MiniSolrCloudCluster {
     System.setProperty("solr.solrxml.location","zookeeper");
     System.setProperty("zkHost", zkServer.getZkAddress());
 
-    jettys = new LinkedList<JettySolrRunner>();
+    jettys = new LinkedList<>();
     for (int i = 0; i < numServers; ++i) {
-      if (sslConfig == null) {
-        startJettySolrRunner(hostContext, extraServlets, extraRequestFilters);
-      } else {
-        startJettySolrRunner(hostContext, extraServlets, extraRequestFilters, sslConfig);
-      }
+      startJettySolrRunner(jettyConfig);
     }
     
     solrClient = buildSolrClient();
@@ -123,37 +133,78 @@ public class MiniSolrCloudCluster {
 
   /**
    * Start a new Solr instance
+   *
    * @param hostContext context path of Solr servers used by Jetty
    * @param extraServlets Extra servlets to be started by Jetty
    * @param extraRequestFilters extra filters to be started by Jetty
+   *
    * @return new Solr instance
+   *
    */
   public JettySolrRunner startJettySolrRunner(String hostContext,
       SortedMap<ServletHolder, String> extraServlets,
-      SortedMap<Class, String> extraRequestFilters) throws Exception {
+      SortedMap<Class<? extends Filter>, String> extraRequestFilters) throws Exception {
     return startJettySolrRunner(hostContext, extraServlets, extraRequestFilters, null);
   }
 
   /**
    * Start a new Solr instance
+   *
    * @param hostContext context path of Solr servers used by Jetty
    * @param extraServlets Extra servlets to be started by Jetty
    * @param extraRequestFilters extra filters to be started by Jetty
    * @param sslConfig SSL configuration
+   *
    * @return new Solr instance
    */
   public JettySolrRunner startJettySolrRunner(String hostContext,
       SortedMap<ServletHolder, String> extraServlets,
-      SortedMap<Class, String> extraRequestFilters, SSLConfig sslConfig) throws Exception {
+      SortedMap<Class<? extends Filter>, String> extraRequestFilters, SSLConfig sslConfig) throws Exception {
+    return startJettySolrRunner(hostContext, JettyConfig.builder()
+        .withServlets(extraServlets)
+        .withFilters(extraRequestFilters)
+        .withSSLConfig(sslConfig)
+        .build());
+  }
+
+  /**
+   * Start a new Solr instance
+   *
+   * @param config a JettyConfig for the instance's {@link org.apache.solr.client.solrj.embedded.JettySolrRunner}
+   *
+   * @return a JettySolrRunner
+   */
+  public JettySolrRunner startJettySolrRunner(JettyConfig config) throws Exception {
+    return startJettySolrRunner(config.context, config);
+  }
+
+  /**
+   * Start a new Solr instance on a particular servlet context
+   *
+   * @param hostContext the context to run on
+   * @param config a JettyConfig for the instance's {@link org.apache.solr.client.solrj.embedded.JettySolrRunner}
+   *
+   * @return a JettySolrRunner
+   */
+  public JettySolrRunner startJettySolrRunner(String hostContext, JettyConfig config) throws Exception {
     String context = getHostContextSuitableForServletContext(hostContext);
-    JettySolrRunner jetty = new JettySolrRunner(testDir.getAbsolutePath(), context,
-      0, null, null, true, extraServlets, sslConfig, extraRequestFilters);
+    JettyConfig newConfig = JettyConfig.builder(config).setContext(context).build();
+    JettySolrRunner jetty = new JettySolrRunner(testDir.getAbsolutePath(), newConfig);
     jetty.start();
     jettys.add(jetty);
     return jetty;
   }
 
   /**
+   * Start a new Solr instance, using the default config
+   *
+   * @return a JettySolrRunner
+   */
+  public JettySolrRunner startJettySolrRunner() throws Exception {
+    return startJettySolrRunner(jettyConfig);
+  }
+
+  /**
    * Stop a Solr instance
    * @param index the index of node in collection returned by {@link #getJettySolrRunners()}
    * @return the shut down node
@@ -222,7 +273,7 @@ public class MiniSolrCloudCluster {
 
   private static String getHostContextSuitableForServletContext(String ctx) {
     if (ctx == null || "".equals(ctx)) ctx = "/solr";
-    if (ctx.endsWith("/")) ctx = ctx.substring(0,ctx.length()-1);;
+    if (ctx.endsWith("/")) ctx = ctx.substring(0,ctx.length()-1);
     if (!ctx.startsWith("/")) ctx = "/" + ctx;
     return ctx;
   }