You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2011/11/29 00:16:48 UTC
svn commit: r1207692 - in /tomcat/trunk: java/org/apache/catalina/connector/
java/org/apache/coyote/ java/org/apache/tomcat/util/net/
test/org/apache/catalina/authenticator/ test/org/apache/catalina/connector/
test/org/apache/catalina/core/ test/org/ap...
Author: markt
Date: Mon Nov 28 23:16:42 2011
New Revision: 1207692
URL: http://svn.apache.org/viewvc?rev=1207692&view=rev
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=52028
Add support for automatic selection of a free port for a connector when the special value of zero is used
Modified:
tomcat/trunk/java/org/apache/catalina/connector/Connector.java
tomcat/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml
tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
tomcat/trunk/test/org/apache/catalina/authenticator/TestFormAuthenticator.java
tomcat/trunk/test/org/apache/catalina/connector/TestConnector.java
tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java
tomcat/trunk/test/org/apache/catalina/core/TestStandardContext.java
tomcat/trunk/test/org/apache/catalina/core/TestSwallowAbortedUploads.java
tomcat/trunk/test/org/apache/catalina/filters/TestExpiresFilter.java
tomcat/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java
tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java
tomcat/trunk/test/org/apache/catalina/servlets/TestDefaultServlet.java
tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
tomcat/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java
tomcat/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java
tomcat/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java
tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowEquals.java
tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowHttpSeps.java
tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowNameOnly.java
tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesDisallowEquals.java
tomcat/trunk/test/org/apache/tomcat/util/net/TestXxxEndpoint.java
tomcat/trunk/webapps/docs/config/ajp.xml
tomcat/trunk/webapps/docs/config/http.xml
Modified: tomcat/trunk/java/org/apache/catalina/connector/Connector.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Connector.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Connector.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Connector.java Mon Nov 28 23:16:42 2011
@@ -60,7 +60,6 @@ public class Connector extends Lifecycle
// ------------------------------------------------------------ Constructor
-
public Connector() {
this(null);
}
@@ -114,7 +113,7 @@ public class Connector extends Lifecycle
/**
* The port number on which we listen for requests.
*/
- protected int port = 0;
+ protected int port = -1;
/**
@@ -257,7 +256,6 @@ public class Connector extends Lifecycle
// ------------------------------------------------------------- Properties
-
/**
* Return a configured property.
*/
@@ -497,7 +495,9 @@ public class Connector extends Lifecycle
}
/**
- * Return the port number on which we listen for requests.
+ * Return the port number on which this connector is configured to listen
+ * for requests. The special value of 0 means select a random free port
+ * when the socket is bound.
*/
public int getPort() {
@@ -520,6 +520,16 @@ public class Connector extends Lifecycle
/**
+ * Return the port number on which this connector is listening to requests.
+ * If the special value for {@link #port} of zero is used then this method
+ * will report the actual port bound.
+ */
+ public int getLocalPort() {
+ return ((Integer) getProperty("localPort")).intValue();
+ }
+
+
+ /**
* Return the Coyote protocol handler in use.
*/
public String getProtocol() {
@@ -864,7 +874,13 @@ public class Connector extends Lifecycle
StringBuilder sb = new StringBuilder("type=");
sb.append(type);
sb.append(",port=");
- sb.append(getPort());
+ int port = getPort();
+ if (port > 0) {
+ sb.append(getPort());
+ } else {
+ sb.append("auto-");
+ sb.append(getProperty("nameIndex"));
+ }
if (addressObj != null) {
String address = addressObj.toString();
if (address.length() > 0) {
@@ -938,7 +954,7 @@ public class Connector extends Lifecycle
protected void startInternal() throws LifecycleException {
// Validate settings before starting
- if (getPort() < 1) {
+ if (getPort() < 0) {
throw new LifecycleException(sm.getString(
"coyoteConnector.invalidPort", Integer.valueOf(getPort())));
}
@@ -1014,11 +1030,18 @@ public class Connector extends Lifecycle
StringBuilder sb = new StringBuilder("Connector[");
sb.append(getProtocol());
sb.append('-');
- sb.append(getPort());
+ int port = getPort();
+ if (port > 0) {
+ sb.append(getPort());
+ } else {
+ sb.append("auto-");
+ sb.append(getProperty("nameIndex"));
+ }
sb.append(']');
return sb.toString();
}
+
// -------------------- JMX registration --------------------
@Override
Modified: tomcat/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml Mon Nov 28 23:16:42 2011
@@ -77,6 +77,10 @@
description="The number of seconds Tomcat will wait for a subsequent request before closing the connection"
type="int"/>
+ <attribute name="localPort"
+ description="The port number on which this connector is listening to requests. If the special value for port of zero is used then this method will report the actual port bound."
+ type="int"/>
+
<attribute name="maxKeepAliveRequests"
description="Maximum number of Keep-Alive requests to honor per connection"
type="int"/>
@@ -108,7 +112,7 @@
type="int"/>
<attribute name="port"
- description="The port number on which we listen for requests"
+ description="The port number on which this connector is configured to listen for requests. The special value of 0 means select a random free port when the socket is bound."
type="int"/>
<!-- Common -->
Modified: tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java Mon Nov 28 23:16:42 2011
@@ -48,6 +48,13 @@ public abstract class AbstractProtocol i
/**
+ * Counter used to generate unique JMX names for connectors using automatic
+ * port binding.
+ */
+ private static final AtomicInteger nameCounter = new AtomicInteger(0);
+
+
+ /**
* Name of MBean for the Global Request Processor.
*/
protected ObjectName rgOname = null;
@@ -60,6 +67,14 @@ public abstract class AbstractProtocol i
/**
+ * Unique ID for this connector. Only used if the connector is configured
+ * to use a random port as the port will change if stop(), start() is
+ * called.
+ */
+ private int nameIndex = 0;
+
+
+ /**
* Endpoint that provides low-level network I/O - must be matched to the
* ProtocolHandler implementation (ProtocolHandler using BIO, requires BIO
* Endpoint etc.).
@@ -194,6 +209,8 @@ public abstract class AbstractProtocol i
}
+ public int getLocalPort() { return endpoint.getLocalPort(); }
+
/*
* When Tomcat expects data from the client, this is the time Tomcat will
* wait for that data to arrive before closing the connection.
@@ -220,6 +237,15 @@ public abstract class AbstractProtocol i
// ---------------------------------------------------------- Public methods
+ public synchronized int getNameIndex() {
+ if (nameIndex == 0) {
+ nameIndex = nameCounter.incrementAndGet();
+ }
+
+ return nameIndex;
+ }
+
+
/**
* The name will be prefix-address-port if address is non-null and
* prefix-port if the address is null. The name will be appropriately quoted
@@ -232,7 +258,13 @@ public abstract class AbstractProtocol i
name.append(getAddress());
name.append('-');
}
- name.append(endpoint.getPort());
+ int port = getLocalPort();
+ if (port > 0) {
+ name.append(port);
+ } else {
+ name.append("auto-");
+ name.append(getNameIndex());
+ }
return ObjectName.quote(name.toString());
}
@@ -313,7 +345,13 @@ public abstract class AbstractProtocol i
StringBuilder name = new StringBuilder(getDomain());
name.append(":type=ProtocolHandler,port=");
- name.append(getPort());
+ int port = getPort();
+ if (port > 0) {
+ name.append(getPort());
+ } else {
+ name.append("auto-");
+ name.append(getNameIndex());
+ }
InetAddress address = getAddress();
if (address != null) {
name.append(",address=");
@@ -322,6 +360,7 @@ public abstract class AbstractProtocol i
return new ObjectName(name.toString());
}
+
// ------------------------------------------------------- Lifecycle methods
/*
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java Mon Nov 28 23:16:42 2011
@@ -186,6 +186,7 @@ public abstract class AbstractEndpoint {
public int getPort() { return port; }
public void setPort(int port ) { this.port=port; }
+ public abstract int getLocalPort();
/**
* Address for the server socket.
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Mon Nov 28 23:16:42 2011
@@ -37,6 +37,7 @@ import org.apache.tomcat.jni.Pool;
import org.apache.tomcat.jni.SSL;
import org.apache.tomcat.jni.SSLContext;
import org.apache.tomcat.jni.SSLSocket;
+import org.apache.tomcat.jni.Sockaddr;
import org.apache.tomcat.jni.Socket;
import org.apache.tomcat.jni.Status;
import org.apache.tomcat.util.ExceptionUtils;
@@ -316,8 +317,29 @@ public class AprEndpoint extends Abstrac
public void setSSLInsecureRenegotiation(boolean SSLInsecureRenegotiation) { this.SSLInsecureRenegotiation = SSLInsecureRenegotiation; }
public boolean getSSLInsecureRenegotiation() { return SSLInsecureRenegotiation; }
- // --------------------------------------------------------- Public Methods
+ /**
+ * Port in use.
+ */
+ @Override
+ public int getLocalPort() {
+ long s = serverSock;
+ if (s == 0) {
+ return -1;
+ } else {
+ long sa;
+ try {
+ sa = Address.get(Socket.APR_LOCAL, s);
+ Sockaddr addr = Address.getInfo(sa);
+ return addr.port;
+ } catch (Exception e) {
+ return -1;
+ }
+ }
+ }
+
+
+ // --------------------------------------------------------- Public Methods
/**
* Number of keepalive sockets.
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java Mon Nov 28 23:16:42 2011
@@ -89,6 +89,18 @@ public class JIoEndpoint extends Abstrac
public void setServerSocketFactory(ServerSocketFactory factory) { this.serverSocketFactory = factory; }
public ServerSocketFactory getServerSocketFactory() { return serverSocketFactory; }
+ /**
+ * Port in use.
+ */
+ @Override
+ public int getLocalPort() {
+ ServerSocket s = serverSocket;
+ if (s == null) {
+ return -1;
+ } else {
+ return s.getLocalPort();
+ }
+ }
/*
* Optional feature support.
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Mon Nov 28 23:16:42 2011
@@ -21,6 +21,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetSocketAddress;
+import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;
import java.nio.ByteBuffer;
@@ -387,6 +388,26 @@ public class NioEndpoint extends Abstrac
public SSLContext getSSLContext() { return sslContext;}
public void setSSLContext(SSLContext c) { sslContext = c;}
+
+ /**
+ * Port in use.
+ */
+ @Override
+ public int getLocalPort() {
+ ServerSocketChannel ssc = serverSock;
+ if (ssc == null) {
+ return -1;
+ } else {
+ ServerSocket s = ssc.socket();
+ if (s == null) {
+ return -1;
+ } else {
+ return s.getLocalPort();
+ }
+ }
+ }
+
+
// --------------------------------------------------------- OOM Parachute Methods
protected void checkParachute() {
Modified: tomcat/trunk/test/org/apache/catalina/authenticator/TestFormAuthenticator.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/authenticator/TestFormAuthenticator.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/authenticator/TestFormAuthenticator.java (original)
+++ tomcat/trunk/test/org/apache/catalina/authenticator/TestFormAuthenticator.java Mon Nov 28 23:16:42 2011
@@ -115,9 +115,10 @@ public class TestFormAuthenticator exten
realm.addUserRole("tomcat", "tomcat");
ctx.setRealm(realm);
- setPort(getPort());
-
tomcat.start();
+
+ // Port only known after Tomcat starts
+ setPort(getPort());
}
private void doResourceRequest(String method) throws Exception {
Modified: tomcat/trunk/test/org/apache/catalina/connector/TestConnector.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/connector/TestConnector.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/connector/TestConnector.java (original)
+++ tomcat/trunk/test/org/apache/catalina/connector/TestConnector.java Mon Nov 28 23:16:42 2011
@@ -19,6 +19,7 @@ package org.apache.catalina.connector;
import java.net.SocketTimeoutException;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
import org.junit.Test;
@@ -69,4 +70,26 @@ public class TestConnector extends Tomca
}
assertEquals(503, rc);
}
+
+
+ @Test
+ public void testPort() throws Exception {
+ Tomcat tomcat = getTomcatInstance();
+
+ Connector connector1 = tomcat.getConnector();
+ connector1.setPort(0);
+
+ Connector connector2 = new Connector();
+ connector2.setPort(0);
+
+ tomcat.getService().addConnector(connector2);
+
+ tomcat.start();
+
+ int localPort1 = connector1.getLocalPort();
+ int localPort2 = connector2.getLocalPort();
+
+ assertTrue(localPort1 > 0);
+ assertTrue(localPort2 > 0);
+ }
}
Modified: tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java (original)
+++ tomcat/trunk/test/org/apache/catalina/connector/TestRequest.java Mon Nov 28 23:16:42 2011
@@ -62,7 +62,6 @@ public class TestRequest extends TomcatB
@Test
public void testBug37794() {
Bug37794Client client = new Bug37794Client(true);
- client.setPort(getPort());
// Edge cases around zero
client.doRequest(-1, false); // Unlimited
@@ -111,7 +110,6 @@ public class TestRequest extends TomcatB
@Test
public void testBug37794withoutFilter() {
Bug37794Client client = new Bug37794Client(false);
- client.setPort(getPort());
// Edge cases around actual content length
client.reset();
@@ -180,6 +178,8 @@ public class TestRequest extends TomcatB
tomcat.start();
+ setPort(tomcat.getConnector().getLocalPort());
+
init = true;
}
@@ -391,7 +391,6 @@ public class TestRequest extends TomcatB
@Test
public void testBug48692() {
Bug48692Client client = new Bug48692Client();
- client.setPort(getPort());
// Make sure GET works properly
client.doRequest("GET", "foo=bar", null, null, false);
@@ -518,6 +517,8 @@ public class TestRequest extends TomcatB
root.addServletMapping("/echo", "EchoParameters");
tomcat.start();
+ setPort(tomcat.getConnector().getLocalPort());
+
init = true;
}
Modified: tomcat/trunk/test/org/apache/catalina/core/TestStandardContext.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/core/TestStandardContext.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/core/TestStandardContext.java (original)
+++ tomcat/trunk/test/org/apache/catalina/core/TestStandardContext.java Mon Nov 28 23:16:42 2011
@@ -97,11 +97,12 @@ public class TestStandardContext extends
Tomcat.addServlet(root, "Bug46243", new HelloWorldServlet());
root.addServletMapping("/", "Bug46243");
+
tomcat.start();
// Configure the client
- Bug46243Client client = new Bug46243Client();
- client.setPort(getPort());
+ Bug46243Client client =
+ new Bug46243Client(tomcat.getConnector().getLocalPort());
client.setRequest(new String[] { REQUEST });
client.connect();
@@ -110,6 +111,11 @@ public class TestStandardContext extends
}
private static final class Bug46243Client extends SimpleHttpClient {
+
+ public Bug46243Client(int port) {
+ setPort(port);
+ }
+
@Override
public boolean isResponseBodyOK() {
// Don't care about the body in this test
@@ -442,7 +448,6 @@ public class TestStandardContext extends
@Test
public void testBug49711() {
Bug49711Client client = new Bug49711Client();
- client.setPort(getPort());
// Make sure non-multipart works properly
client.doRequest("/regular", false, false);
@@ -531,6 +536,8 @@ public class TestStandardContext extends
context.addServletMapping("/multipart", "multipart");
tomcat.start();
+ setPort(tomcat.getConnector().getLocalPort());
+
init = true;
}
Modified: tomcat/trunk/test/org/apache/catalina/core/TestSwallowAbortedUploads.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/core/TestSwallowAbortedUploads.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/core/TestSwallowAbortedUploads.java (original)
+++ tomcat/trunk/test/org/apache/catalina/core/TestSwallowAbortedUploads.java Mon Nov 28 23:16:42 2011
@@ -51,7 +51,6 @@ public class TestSwallowAbortedUploads e
*/
public Exception doAbortedUploadTest(AbortedUploadClient client, boolean limited,
boolean swallow) {
- client.setPort(getPort());
Exception ex = client.doRequest(limited, swallow);
if (log.isDebugEnabled()) {
log.debug("Response line: " + client.getResponseLine());
@@ -70,7 +69,6 @@ public class TestSwallowAbortedUploads e
*/
public Exception doAbortedPOSTTest(AbortedPOSTClient client, int status,
boolean swallow) {
- client.setPort(getPort());
Exception ex = client.doRequest(status, swallow);
if (log.isDebugEnabled()) {
log.debug("Response line: " + client.getResponseLine());
@@ -254,6 +252,7 @@ public class TestSwallowAbortedUploads e
context.setSwallowAbortedUploads(swallow);
tomcat.start();
+ setPort(tomcat.getConnector().getLocalPort());
init = true;
}
@@ -367,6 +366,8 @@ public class TestSwallowAbortedUploads e
tomcat.start();
+ setPort(tomcat.getConnector().getLocalPort());
+
init = true;
}
Modified: tomcat/trunk/test/org/apache/catalina/filters/TestExpiresFilter.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/filters/TestExpiresFilter.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/filters/TestExpiresFilter.java (original)
+++ tomcat/trunk/test/org/apache/catalina/filters/TestExpiresFilter.java Mon Nov 28 23:16:42 2011
@@ -432,7 +432,7 @@ public class TestExpiresFilter extends T
// TEST
HttpURLConnection httpURLConnection = (HttpURLConnection) new URL(
- "http://localhost:" + tomcat.getConnector().getPort() +
+ "http://localhost:" + tomcat.getConnector().getLocalPort() +
"/test").openConnection();
// VALIDATE
Modified: tomcat/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java (original)
+++ tomcat/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java Mon Nov 28 23:16:42 2011
@@ -537,8 +537,9 @@ public class TestRemoteIpFilter extends
getTomcatInstance().start();
// TEST
- HttpURLConnection httpURLConnection = (HttpURLConnection) new URL("http://localhost:" + tomcat.getConnector().getPort() + "/test")
- .openConnection();
+ HttpURLConnection httpURLConnection = (HttpURLConnection) new URL(
+ "http://localhost:" + tomcat.getConnector().getLocalPort() +
+ "/test").openConnection();
String expectedRemoteAddr = "my-remote-addr";
httpURLConnection.addRequestProperty("x-forwarded-for", expectedRemoteAddr);
httpURLConnection.addRequestProperty("x-forwarded-proto", "https");
Modified: tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java (original)
+++ tomcat/trunk/test/org/apache/catalina/mbeans/TestRegistration.java Mon Nov 28 23:16:42 2011
@@ -147,7 +147,7 @@ public class TestRegistration extends To
ArrayList<String> expected = new ArrayList<String>(Arrays.asList(basicMBeanNames()));
expected.addAll(Arrays.asList(hostMBeanNames("localhost")));
expected.addAll(Arrays.asList(contextMBeanNames("localhost", contextName)));
- expected.addAll(Arrays.asList(connectorMBeanNames(Integer.toString(getPort()), protocol)));
+ expected.addAll(Arrays.asList(connectorMBeanNames("auto-1", protocol)));
expected.addAll(Arrays.asList(optionalMBeanNames("localhost")));
// Did we find all expected MBeans?
Modified: tomcat/trunk/test/org/apache/catalina/servlets/TestDefaultServlet.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/servlets/TestDefaultServlet.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/servlets/TestDefaultServlet.java (original)
+++ tomcat/trunk/test/org/apache/catalina/servlets/TestDefaultServlet.java Mon Nov 28 23:16:42 2011
@@ -198,8 +198,8 @@ public class TestDefaultServlet extends
tomcat.addWebapp(null, contextPath, appDir.getAbsolutePath());
tomcat.start();
- TestCustomErrorClient client = new TestCustomErrorClient();
- client.setPort(getPort());
+ TestCustomErrorClient client =
+ new TestCustomErrorClient(tomcat.getConnector().getLocalPort());
client.reset();
client.setRequest(new String[] {
@@ -276,8 +276,8 @@ public class TestDefaultServlet extends
tomcat.addWebapp(null, contextPath, appDir.getAbsolutePath());
tomcat.start();
- TestCustomErrorClient client = new TestCustomErrorClient();
- client.setPort(getPort());
+ TestCustomErrorClient client =
+ new TestCustomErrorClient(tomcat.getConnector().getLocalPort());
client.reset();
client.setRequest(new String[] {
@@ -294,6 +294,11 @@ public class TestDefaultServlet extends
}
private static class TestCustomErrorClient extends SimpleHttpClient {
+
+ public TestCustomErrorClient(int port) {
+ setPort(port);
+ }
+
@Override
public boolean isResponseBodyOK() {
return true;
Modified: tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java (original)
+++ tomcat/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java Mon Nov 28 23:16:42 2011
@@ -70,7 +70,7 @@ public abstract class SimpleHttpClient {
private String responseBody;
private boolean useContentLength;
- public void setPort(int thePort) {
+ protected void setPort(int thePort) {
port = thePort;
}
Modified: tomcat/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java (original)
+++ tomcat/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java Mon Nov 28 23:16:42 2011
@@ -56,7 +56,6 @@ import org.apache.tomcat.util.buf.ByteCh
public abstract class TomcatBaseTest extends LoggingBaseTest {
private Tomcat tomcat;
private boolean accessLogEnabled = false;
- private static int port = 8000;
public static final String TEMP_DIR = System.getProperty("java.io.tmpdir");
@@ -71,15 +70,7 @@ public abstract class TomcatBaseTest ext
* Sub-classes need to know port so they can connect
*/
public int getPort() {
- return port;
- }
-
- /**
- * Sub-classes may want to add connectors on a new port
- */
- public int getNextPort() {
- port++;
- return getPort();
+ return tomcat.getConnector().getLocalPort();
}
/**
@@ -106,9 +97,8 @@ public abstract class TomcatBaseTest ext
String protocol = getProtocol();
Connector connector = new Connector(protocol);
- // If each test is running on same port - they
- // may interfere with each other
- connector.setPort(getNextPort());
+ // Use random free port
+ connector.setPort(0);
// Mainly set to reduce timeouts during async tests
connector.setAttribute("connectionTimeout", "3000");
tomcat.getService().addConnector(connector);
Modified: tomcat/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java Mon Nov 28 23:16:42 2011
@@ -53,8 +53,7 @@ public class TestAbstractHttp11Processor
SimpleHttpClient.CRLF +
"test=data";
- Client client = new Client();
- client.setPort(getPort());
+ Client client = new Client(tomcat.getConnector().getLocalPort());
client.setRequest(new String[] {request});
client.connect();
@@ -82,8 +81,7 @@ public class TestAbstractHttp11Processor
SimpleHttpClient.CRLF +
"test=data";
- Client client = new Client();
- client.setPort(getPort());
+ Client client = new Client(tomcat.getConnector().getLocalPort());
client.setRequest(new String[] {request});
client.connect();
@@ -113,8 +111,7 @@ public class TestAbstractHttp11Processor
SimpleHttpClient.CRLF +
"test=data";
- Client client = new Client();
- client.setPort(getPort());
+ Client client = new Client(tomcat.getConnector().getLocalPort());
client.setRequest(new String[] {request});
client.connect();
@@ -144,8 +141,7 @@ public class TestAbstractHttp11Processor
SimpleHttpClient.CRLF +
"test=data";
- Client client = new Client();
- client.setPort(getPort());
+ Client client = new Client(tomcat.getConnector().getLocalPort());
client.setRequest(new String[] {request});
client.connect();
@@ -174,8 +170,7 @@ public class TestAbstractHttp11Processor
SimpleHttpClient.CRLF +
"test=data";
- Client client = new Client();
- client.setPort(getPort());
+ Client client = new Client(tomcat.getConnector().getLocalPort());
client.setRequest(new String[] {request});
client.connect();
@@ -204,8 +199,7 @@ public class TestAbstractHttp11Processor
"Host: any" + SimpleHttpClient.CRLF +
SimpleHttpClient.CRLF;
- final Client client = new Client();
- client.setPort(getPort());
+ final Client client = new Client(tomcat.getConnector().getLocalPort());
client.setRequest(new String[] {requestPart1, requestPart2});
client.setRequestPause(1000);
client.setUseContentLength(true);
@@ -246,6 +240,11 @@ public class TestAbstractHttp11Processor
}
private static final class Client extends SimpleHttpClient {
+
+ public Client(int port) {
+ setPort(port);
+ }
+
@Override
public boolean isResponseBodyOK() {
return getResponseBody().contains("test - data");
Modified: tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java Mon Nov 28 23:16:42 2011
@@ -45,7 +45,6 @@ public class TestInternalInputBuffer ext
public void testBug48839() {
Bug48839Client client = new Bug48839Client();
- client.setPort(getPort());
client.doRequest();
assertTrue(client.isResponse200());
@@ -68,6 +67,7 @@ public class TestInternalInputBuffer ext
try {
tomcat.start();
+ setPort(tomcat.getConnector().getLocalPort());
// Open connection
connect();
@@ -131,7 +131,6 @@ public class TestInternalInputBuffer ext
public void testBug51557NoColon() {
Bug51557Client client = new Bug51557Client("X-Bug51557NoColon");
- client.setPort(getPort());
client.doRequest();
assertTrue(client.isResponse200());
@@ -170,7 +169,6 @@ public class TestInternalInputBuffer ext
Bug51557Client client = new Bug51557Client("X-Bug=51557NoColon",
"foo" + SimpleHttpClient.CRLF + " bar");
- client.setPort(getPort());
client.doRequest();
assertTrue(client.isResponse200());
@@ -184,7 +182,6 @@ public class TestInternalInputBuffer ext
Bug51557Client client = new Bug51557Client("=X-Bug51557",
"invalid");
- client.setPort(getPort());
client.doRequest();
assertTrue(client.isResponse200());
@@ -198,7 +195,6 @@ public class TestInternalInputBuffer ext
Bug51557Client client = new Bug51557Client("X-Bug51557=",
"invalid");
- client.setPort(getPort());
client.doRequest();
assertTrue(client.isResponse200());
@@ -211,7 +207,6 @@ public class TestInternalInputBuffer ext
Bug51557Client client =
new Bug51557Client("X-Bug" + s + "51557", "invalid");
- client.setPort(getPort());
client.doRequest();
assertTrue(client.isResponse200());
assertEquals("abcd", client.getResponseBody());
@@ -247,6 +242,7 @@ public class TestInternalInputBuffer ext
try {
tomcat.start();
+ setPort(tomcat.getConnector().getLocalPort());
// Open connection
connect();
Modified: tomcat/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java Mon Nov 28 23:16:42 2011
@@ -68,8 +68,8 @@ public class TestChunkedInputFilter exte
"x-trailer: Test", "TestTest0123456789abcdefghijABCDEFGHIJopqrstuvwxyz" + SimpleHttpClient.CRLF +
SimpleHttpClient.CRLF };
- TrailerClient client = new TrailerClient();
- client.setPort(getPort());
+ TrailerClient client =
+ new TrailerClient(tomcat.getConnector().getLocalPort());
client.setRequest(request);
client.connect();
@@ -109,8 +109,8 @@ public class TestChunkedInputFilter exte
"x-trailer: Test" + SimpleHttpClient.CRLF +
SimpleHttpClient.CRLF };
- TrailerClient client = new TrailerClient();
- client.setPort(getPort());
+ TrailerClient client =
+ new TrailerClient(tomcat.getConnector().getLocalPort());
client.setRequest(request);
client.connect();
@@ -149,8 +149,8 @@ public class TestChunkedInputFilter exte
"0" + SimpleHttpClient.CRLF +
SimpleHttpClient.CRLF;
- TrailerClient client = new TrailerClient();
- client.setPort(getPort());
+ TrailerClient client =
+ new TrailerClient(tomcat.getConnector().getLocalPort());
client.setRequest(new String[] {request});
client.connect();
@@ -193,6 +193,10 @@ public class TestChunkedInputFilter exte
private static class TrailerClient extends SimpleHttpClient {
+ public TrailerClient(int port) {
+ setPort(port);
+ }
+
@Override
public boolean isResponseBodyOK() {
return getResponseBody().contains("TestTestTest");
Modified: tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowEquals.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowEquals.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowEquals.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowEquals.java Mon Nov 28 23:16:42 2011
@@ -60,7 +60,7 @@ public class TestCookiesAllowEquals exte
tomcat.start();
// Open connection
- setPort(tomcat.getConnector().getPort());
+ setPort(tomcat.getConnector().getLocalPort());
connect();
String[] request = new String[1];
Modified: tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowHttpSeps.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowHttpSeps.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowHttpSeps.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowHttpSeps.java Mon Nov 28 23:16:42 2011
@@ -58,7 +58,7 @@ public class TestCookiesAllowHttpSeps ex
tomcat.start();
// Open connection
- setPort(tomcat.getConnector().getPort());
+ setPort(tomcat.getConnector().getLocalPort());
connect();
String[] request = new String[1];
Modified: tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowNameOnly.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowNameOnly.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowNameOnly.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowNameOnly.java Mon Nov 28 23:16:42 2011
@@ -59,7 +59,7 @@ public class TestCookiesAllowNameOnly ex
tomcat.start();
// Open connection
- setPort(tomcat.getConnector().getPort());
+ setPort(tomcat.getConnector().getLocalPort());
connect();
String[] request = new String[1];
Modified: tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesDisallowEquals.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesDisallowEquals.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesDisallowEquals.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/util/http/TestCookiesDisallowEquals.java Mon Nov 28 23:16:42 2011
@@ -55,7 +55,7 @@ public class TestCookiesDisallowEquals e
tomcat.start();
// Open connection
- setPort(tomcat.getConnector().getPort());
+ setPort(tomcat.getConnector().getLocalPort());
connect();
String[] request = new String[1];
Modified: tomcat/trunk/test/org/apache/tomcat/util/net/TestXxxEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/net/TestXxxEndpoint.java?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/net/TestXxxEndpoint.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/util/net/TestXxxEndpoint.java Mon Nov 28 23:16:42 2011
@@ -165,9 +165,9 @@ public class TestXxxEndpoint extends Tom
File appDir = new File(getBuildDirectory(), "webapps/examples");
tomcat.addWebapp(null, "/examples", appDir.getAbsolutePath());
- int port = getPort();
tomcat.start();
+ int port = getPort();
tomcat.getConnector().stop();
Exception e = null;
Modified: tomcat/trunk/webapps/docs/config/ajp.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/ajp.xml?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/ajp.xml (original)
+++ tomcat/trunk/webapps/docs/config/ajp.xml Mon Nov 28 23:16:42 2011
@@ -143,7 +143,10 @@
<p>The TCP port number on which this <strong>Connector</strong>
will create a server socket and await incoming connections. Your
operating system will allow only one server application to listen
- to a particular port number on a particular IP address.</p>
+ to a particular port number on a particular IP address. If the special
+ value of 0 (zero) is used, then Tomcat will select a free port at random
+ to use for this connector. This is typically only useful in embedded and
+ testing applications.</p>
</attribute>
<attribute name="protocol" required="false">
Modified: tomcat/trunk/webapps/docs/config/http.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/http.xml?rev=1207692&r1=1207691&r2=1207692&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/config/http.xml (original)
+++ tomcat/trunk/webapps/docs/config/http.xml Mon Nov 28 23:16:42 2011
@@ -141,7 +141,10 @@
<p>The TCP port number on which this <strong>Connector</strong>
will create a server socket and await incoming connections. Your
operating system will allow only one server application to listen
- to a particular port number on a particular IP address.</p>
+ to a particular port number on a particular IP address. If the special
+ value of 0 (zero) is used, then Tomcat will select a free port at random
+ to use for this connector. This is typically only useful in embedded and
+ testing applications.</p>
</attribute>
<attribute name="protocol" required="false">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org