Hello, I'd like to be able to use a random port when using embedded Tomcat in unit tests to test servlets. Currently it's "locked" by a test in Connector#startInternal. Is it intentional ?
I'd like to be able to do simply something like : Tomcat tomcat = new Tomcat(); tomcat.setBaseDir(System.getProperty("java.io.tmpdir")); tomcat.getConnector().setPort( 0 ); Context context = tomcat.addContext("", System.getProperty("java.io.tmpdir")); Tomcat.addServlet(context, "cxf", new MyServlet()); context.addServletMapping("/" + getRestServicesPath() + "/*", "cxf"); tomcat.start(); int port = tomcat.getConnector().getPort( ); here my tests with the port tomcat.stop() At least I'd like to have: tomcat.getConnector().getLocalPort( ) which returns the port on which the socket is listening (most of the time will be same as getPort() except when using port 0 ) Currently I do something which I find a little "hackhish" :-) : Http11Protocol http11Protocol = ( (Http11Protocol) tomcat.getConnector().getProtocolHandler() ); // ReflectionUtils is a Spring framework class to help Field fieldEndpoint = ReflectionUtils.findField(Http11Protocol.class, "endpoint"); fieldEndpoint.setAccessible(true); JIoEndpoint jIoEndpoint = (JIoEndpoint) fieldEndpoint.get(http11Protocol); Field serverSocketField = ReflectionUtils.findField(JIoEndpoint.class, "serverSocket"); serverSocketField.setAccessible(true); ServerSocket serverSocket = (ServerSocket) serverSocketField.get(jIoEndpoint); this.port = serverSocket.getLocalPort(); Makes sense for to add getLocalPort on Connector class and remove the test if (getPort() < 1) ? If yes I can start on providing a patch for review. Thanks -- Olivier Lamy Talend : http://talend.com http://twitter.com/olamy | http://linkedin.com/in/olamy --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org