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: [email protected]
For additional commands, e-mail: [email protected]