title: JUnit test with Embedded tomcat server , how to specify automatic ports for both http and https connectors?
body: <p><strong>Description</strong></p>
  
  <p>I have made a JUnit test that focus on trying to test a call to a SOAP web service.</p>
  
  <p>I am using an embedded tomcat server for my test in order to run my test with a mock server.</p>
  
  <p>I am also using both http and https connectors.</p>
  
  <p>I need to use automatic ports for both these connectors because the test is running on a Jenkins server and i can't just use port 443 or 8443 as they are already taken.</p>
  
  <p>I understand that using the port 0 as standard port will result in tomcat using automatic port allocation but I can't manage to use it with both connectors.</p>
  
  <p><strong>Expected behavior</strong></p>
  
  <p>I'd like to use automatic port allocation also for my custom ssl connector.</p>
  
  <p>Is it possible to do so in some way ?</p>
  
  <p><strong>Sample code</strong></p>
  
  <p>Here is the code for my tomcat instance :</p>
  
  <pre><code>@Before
  public void setup() throws Throwable {
  
      File tomcatWorkingDir = new File(mWorkingDir);
  
      //Empty the target/tomcat-working-dir directory if it exist
      //Create the directory otherwise
      if(tomcatWorkingDir.exists() &amp;&amp; tomcatWorkingDir.isDirectory()){
          LOGGER.info("cleaning tomcat-working-dir directory");
          FileUtils.cleanDirectory(new File(mWorkingDir)); 
      } else {
          LOGGER.info("create tomcat-working-dir directory");
          tomcatWorkingDir.mkdir();
      }
  
      LOGGER.info("disabling ssl certification validation");
      //Disable JVM ssl sockets connection
      disableJVMCertificate();
  
      //Add server certificate
      createServerCertificate();
  
      //Custom SSL Connector
      Connector SSLConnector = getSSLConnector();
  
      mTomcat = new Tomcat();
  
      //Standard http startup port
      mTomcat.setPort(0);
  
      //Set up base directory 
      //Otherwise, tomcat would use the current directory
      mTomcat.setBaseDir(mWorkingDir);
  
      LOGGER.info("setting the ssl connector in TOMCAT");
      Service service = mTomcat.getService();
      service.addConnector(SSLConnector);
  
      //Redirect current port
      Connector defaultConnector = mTomcat.getConnector();
      defaultConnector.setRedirectPort(SERVER_HTTPS_PORT);
  
      //Configure the way WAR are managed by the engine
      mTomcat.getHost().setAutoDeploy(true);
      mTomcat.getHost().setDeployOnStartup(true);
  
      //Add mock server into our webApp
      String servletName = "/server";
      File webApp = new File(mWorkingDir,"../../../ws-mock-server/src/main/webapp");
  
      mTomcat.addWebapp(mTomcat.getHost(), servletName, webApp.getAbsolutePath());
  
      //start tomcat
      LOGGER.info("starting TOMCAT");
  
      mTomcat.start();
    }
  </code></pre>
  
  <p>and here for my custom ssl connector.</p>
  
  <pre><code>    private static Connector getSSLConnector(){
      Connector connector = new Connector();
      connector.setPort(SERVER_HTTPS_PORT);
      connector.setSecure(true);
  
      //Http protocol Http11AprProtocol
      connector.setAttribute("protocol", "org.apache.coyote.http11.Http11AprProtocol");
  
      //Maximum threads allowedd on this instance of tomcat
      connector.setAttribute("maxThreads","200");
      connector.setAttribute("SSLEnabled", true);
  
      //No client Authentification is required in order to connect
      connector.setAttribute("clientAuth", false);
  
      //SSL TLSv1 protocol
      connector.setAttribute("sslProtocol","TLS");
  
      //Ciphers configuration describing how server will encrypt his messages
      //A common cipher suite need to exist between server and client in an ssl
      //communication in order for the handshake to succeed
      connector.setAttribute("ciphers","TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA");
  
      LOGGER.info("setting keystore file");
      //Here an absolute file path is needed in order to properly set up the keystore attribute
      connector.setAttribute("keystoreFile",new File(".").getAbsolutePath().replace("\\", "/")+"/"+mWorkingDir+"/server.jks");
  
      LOGGER.info("setting keystore pass");
      connector.setAttribute("keystorePass","changeit");
  
      return connector;
  }
  </code></pre>