Author: markt
Date: Mon Nov 28 23:20:46 2011
New Revision: 1207695

URL: http://svn.apache.org/viewvc?rev=1207695&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/tc7.0.x/trunk/   (props changed)
    tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Connector.java
    
tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml
    tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java
    tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
    tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
    tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
    tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
    
tomcat/tc7.0.x/trunk/test/org/apache/catalina/authenticator/TestFormAuthenticator.java
    tomcat/tc7.0.x/trunk/test/org/apache/catalina/connector/TestConnector.java
    tomcat/tc7.0.x/trunk/test/org/apache/catalina/connector/TestRequest.java
    tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TestStandardContext.java
    
tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TestSwallowAbortedUploads.java
    tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestExpiresFilter.java
    
tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java
    tomcat/tc7.0.x/trunk/test/org/apache/catalina/mbeans/TestRegistration.java
    
tomcat/tc7.0.x/trunk/test/org/apache/catalina/servlets/TestDefaultServlet.java
    tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
    tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java
    
tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
    
tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java
    
tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java
    
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowEquals.java
    
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowHttpSeps.java
    
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowNameOnly.java
    
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesDisallowEquals.java
    tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TestXxxEndpoint.java
    tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
    tomcat/tc7.0.x/trunk/webapps/docs/config/ajp.xml
    tomcat/tc7.0.x/trunk/webapps/docs/config/http.xml

Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Nov 28 23:20:46 2011
@@ -1 +1 @@
-/tomcat/trunk:1156115,1156171,1156276,1156304,1156519,1156530,1156602,1157015,1157018,1157151,1157198,1157204,1157810,1157832,1157834,1157847,1157908,1157939,1158155,1158160,1158176,1158195,1158198-1158199,1158227,1158331,1158334-1158335,1158426,1160347,1160592,1160611,1160619,1160626,1160639,1160652,1160720-1160721,1160772,1160774,1160776,1161303,1161310,1161322,1161339,1161486,1161540,1161549,1161584,1162082,1162149,1162169,1162721,1162769,1162836,1162932,1163630,1164419,1164438,1164469,1164480,1164567,1165234,1165247-1165248,1165253,1165273,1165282,1165309,1165331,1165338,1165347,1165360-1165361,1165367-1165368,1165602,1165608,1165677,1165693,1165721,1165723,1165728,1165730,1165738,1165746,1165765,1165777,1165918,1165921,1166077,1166150-1166151,1166290,1166366,1166620,1166686,1166693,1166752,1166757,1167368,1167394,1169447,1170647,1171692,1172233-1172234,1172236,1172269,1172278,1172282,1172556,1172610,1172664,1172689,1172711,1173020-1173021,1173082,1173088,1173090,1173096
 
,1173241,1173256,1173288,1173333,1173342,1173461,1173614,1173630,1173659,1173722,1174061,1174239,1174322,1174325,1174329-1174330,1174337-1174339,1174343,1174353,1174799,1174882,1174884,1174983,1175155,1175158,1175167,1175182,1175190,1175201,1175272,1175275,1175283,1175582,1175589-1175590,1175594,1175602,1175613,1175633,1175690,1175713,1175798,1175889,1175896,1175907,1176584,1176590,1176799,1177050,1177060,1177125,1177152,1177160,1177245,1177850,1177862,1177978,1178209,1178228,1178233,1178449,1178542,1178681,1178684,1178721,1179268,1179274,1180261,1180865,1180891,1180894,1180907,1181028,1181123,1181125,1181136,1181291,1181743,1182796,1183078,1183105,1183142,1183328,1183339-1183340,1183492-1183494,1183605,1184917,1184919,1185018,1185020,1185200,1185588,1185626,1185756,1185758,1186011,1186042-1186045,1186104,1186123,1186137,1186153,1186254,1186257,1186377-1186379,1186479-1186480,1186712,1186743,1186750,1186763,1186890-1186892,1186894,1186949,1187018,1187027-1187028,1187381,1187
 
753,1187755,1187775,1187801,1187806,1187809,1187827,1188301,1188303-1188305,1188399,1188822,1188930-1188931,1189116,1189129,1189183,1189240,1189256,1189386,1189413-1189414,1189477,1189685,1189805,1189857,1189864,1189882,1190034,1190185,1190279,1190339,1190371,1190388-1190389,1190474,1190481,1194915,1195222-1195223,1195531,1195899,1195905,1195943,1195949,1195953,1195955,1195965,1195968,1196175,1196212,1196223,1196304-1196305,1196735,1196825,1196827,1197158,1197261,1197263,1197299-1197300,1197305,1197339-1197340,1197343,1197382,1197386-1197387,1197480,1197578,1198497,1198528,1198552,1198602,1198604,1198607,1198622,1198640,1198696,1198707,1199418,1199432,1199436,1199513,1199529,1199980,1199996,1200056,1200089,1200106-1200107,1200263,1200316,1200320,1200398-1200399,1200445-1200446,1200555,1200627,1200696,1200725,1200937,1200941,1201069,1201087,1201180,1201235-1201237,1201508,1201521,1201542,1201545-1201546,1201548,1201555-1201556,1201568,1201576,1201608,1201921-1201922,1201931,1
 
202035,1202039,1202271,1202565,1202578,1202705,1202828,1202860,1203047-1203052,1203078,1203091,1203253,1203278,1204182,1204856,1204867,1204936,1204938,1204982,1205033,1205065,1205082,1205097,1205112,1206200
+/tomcat/trunk:1156115,1156171,1156276,1156304,1156519,1156530,1156602,1157015,1157018,1157151,1157198,1157204,1157810,1157832,1157834,1157847,1157908,1157939,1158155,1158160,1158176,1158195,1158198-1158199,1158227,1158331,1158334-1158335,1158426,1160347,1160592,1160611,1160619,1160626,1160639,1160652,1160720-1160721,1160772,1160774,1160776,1161303,1161310,1161322,1161339,1161486,1161540,1161549,1161584,1162082,1162149,1162169,1162721,1162769,1162836,1162932,1163630,1164419,1164438,1164469,1164480,1164567,1165234,1165247-1165248,1165253,1165273,1165282,1165309,1165331,1165338,1165347,1165360-1165361,1165367-1165368,1165602,1165608,1165677,1165693,1165721,1165723,1165728,1165730,1165738,1165746,1165765,1165777,1165918,1165921,1166077,1166150-1166151,1166290,1166366,1166620,1166686,1166693,1166752,1166757,1167368,1167394,1169447,1170647,1171692,1172233-1172234,1172236,1172269,1172278,1172282,1172556,1172610,1172664,1172689,1172711,1173020-1173021,1173082,1173088,1173090,1173096
 
,1173241,1173256,1173288,1173333,1173342,1173461,1173614,1173630,1173659,1173722,1174061,1174239,1174322,1174325,1174329-1174330,1174337-1174339,1174343,1174353,1174799,1174882,1174884,1174983,1175155,1175158,1175167,1175182,1175190,1175201,1175272,1175275,1175283,1175582,1175589-1175590,1175594,1175602,1175613,1175633,1175690,1175713,1175798,1175889,1175896,1175907,1176584,1176590,1176799,1177050,1177060,1177125,1177152,1177160,1177245,1177850,1177862,1177978,1178209,1178228,1178233,1178449,1178542,1178681,1178684,1178721,1179268,1179274,1180261,1180865,1180891,1180894,1180907,1181028,1181123,1181125,1181136,1181291,1181743,1182796,1183078,1183105,1183142,1183328,1183339-1183340,1183492-1183494,1183605,1184917,1184919,1185018,1185020,1185200,1185588,1185626,1185756,1185758,1186011,1186042-1186045,1186104,1186123,1186137,1186153,1186254,1186257,1186377-1186379,1186479-1186480,1186712,1186743,1186750,1186763,1186890-1186892,1186894,1186949,1187018,1187027-1187028,1187381,1187
 
753,1187755,1187775,1187801,1187806,1187809,1187827,1188301,1188303-1188305,1188399,1188822,1188930-1188931,1189116,1189129,1189183,1189240,1189256,1189386,1189413-1189414,1189477,1189685,1189805,1189857,1189864,1189882,1190034,1190185,1190279,1190339,1190371,1190388-1190389,1190474,1190481,1194915,1195222-1195223,1195531,1195899,1195905,1195943,1195949,1195953,1195955,1195965,1195968,1196175,1196212,1196223,1196304-1196305,1196735,1196825,1196827,1197158,1197261,1197263,1197299-1197300,1197305,1197339-1197340,1197343,1197382,1197386-1197387,1197480,1197578,1198497,1198528,1198552,1198602,1198604,1198607,1198622,1198640,1198696,1198707,1199418,1199432,1199436,1199513,1199529,1199980,1199996,1200056,1200089,1200106-1200107,1200263,1200316,1200320,1200398-1200399,1200445-1200446,1200555,1200627,1200696,1200725,1200937,1200941,1201069,1201087,1201180,1201235-1201237,1201508,1201521,1201542,1201545-1201546,1201548,1201555-1201556,1201568,1201576,1201608,1201921-1201922,1201931,1
 
202035,1202039,1202271,1202565,1202578,1202705,1202828,1202860,1203047-1203052,1203078,1203091,1203253,1203278,1204182,1204856,1204867,1204936,1204938,1204982,1205033,1205065,1205082,1205097,1205112,1206200,1207692

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Connector.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Connector.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Connector.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/Connector.java Mon 
Nov 28 23:20:46 2011
@@ -60,7 +60,6 @@ public class Connector extends Lifecycle
 
     // ------------------------------------------------------------ Constructor
 
-
     public Connector() {
         this(null);
     }
@@ -121,7 +120,7 @@ public class Connector extends Lifecycle
     /**
      * The port number on which we listen for requests.
      */
-    protected int port = 0;
+    protected int port = -1;
 
 
     /**
@@ -264,7 +263,6 @@ public class Connector extends Lifecycle
 
     // ------------------------------------------------------------- Properties
 
-
     /**
      * Return a configured property.
      */
@@ -514,7 +512,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() {
 
@@ -537,6 +537,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() {
@@ -881,7 +891,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) {
@@ -955,7 +971,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())));
         }
@@ -1031,11 +1047,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/tc7.0.x/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml 
(original)
+++ 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/connector/mbeans-descriptors.xml 
Mon Nov 28 23:20:46 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/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/coyote/AbstractProtocol.java Mon Nov 
28 23:20:46 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/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AbstractEndpoint.java 
Mon Nov 28 23:20:46 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/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/AprEndpoint.java Mon 
Nov 28 23:20:46 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/tc7.0.x/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/JIoEndpoint.java Mon 
Nov 28 23:20:46 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/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Mon 
Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/catalina/authenticator/TestFormAuthenticator.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/authenticator/TestFormAuthenticator.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/authenticator/TestFormAuthenticator.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/authenticator/TestFormAuthenticator.java
 Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/catalina/connector/TestConnector.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/connector/TestConnector.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/connector/TestConnector.java 
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/connector/TestConnector.java 
Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/catalina/connector/TestRequest.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/connector/TestRequest.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/connector/TestRequest.java 
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/connector/TestRequest.java 
Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/catalina/core/TestStandardContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TestStandardContext.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TestStandardContext.java 
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TestStandardContext.java 
Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/catalina/core/TestSwallowAbortedUploads.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TestSwallowAbortedUploads.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TestSwallowAbortedUploads.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/core/TestSwallowAbortedUploads.java
 Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/catalina/filters/TestExpiresFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestExpiresFilter.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestExpiresFilter.java 
(original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestExpiresFilter.java 
Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java 
(original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/filters/TestRemoteIpFilter.java 
Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/catalina/mbeans/TestRegistration.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/mbeans/TestRegistration.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/mbeans/TestRegistration.java 
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/mbeans/TestRegistration.java 
Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/catalina/servlets/TestDefaultServlet.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/servlets/TestDefaultServlet.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/servlets/TestDefaultServlet.java 
(original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/servlets/TestDefaultServlet.java 
Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java 
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/SimpleHttpClient.java 
Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java 
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TomcatBaseTest.java 
Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/TestAbstractHttp11Processor.java
 Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java 
(original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/TestInternalInputBuffer.java 
Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/coyote/http11/filters/TestChunkedInputFilter.java
 Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowEquals.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowEquals.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowEquals.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowEquals.java
 Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowHttpSeps.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowHttpSeps.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowHttpSeps.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowHttpSeps.java
 Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowNameOnly.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowNameOnly.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowNameOnly.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesAllowNameOnly.java
 Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesDisallowEquals.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesDisallowEquals.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesDisallowEquals.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/http/TestCookiesDisallowEquals.java
 Mon Nov 28 23:20:46 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/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TestXxxEndpoint.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TestXxxEndpoint.java?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TestXxxEndpoint.java 
(original)
+++ tomcat/tc7.0.x/trunk/test/org/apache/tomcat/util/net/TestXxxEndpoint.java 
Mon Nov 28 23:20:46 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/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Mon Nov 28 23:20:46 2011
@@ -68,6 +68,15 @@
       </fix>
     </changelog>
   </subsection>
+  <subsection name = "Coyote">
+    <changelog>
+      <add>
+        <bug>52028</bug>: Add support for automatic binding to a free port by a
+        connector if the special value of zero is used for the port. This is
+        mainly useful in embedded and testing scenarios. (markt)
+      </add>
+    </changelog>
+  </subsection>
   <subsection name="Web applications">
     <changelog>
       <update>

Modified: tomcat/tc7.0.x/trunk/webapps/docs/config/ajp.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/config/ajp.xml?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/config/ajp.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/config/ajp.xml Mon Nov 28 23:20:46 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/tc7.0.x/trunk/webapps/docs/config/http.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/config/http.xml?rev=1207695&r1=1207694&r2=1207695&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/config/http.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/config/http.xml Mon Nov 28 23:20:46 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-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to