This is an automated email from the ASF dual-hosted git repository.

markt-asf pushed a commit to branch 9.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/9.0.x by this push:
     new 8403b12cec SWitch cluster tests to use automatic ports to avoid 
conflicts
8403b12cec is described below

commit 8403b12cec78fbf4837ecba268917715f473feb7
Author: Mark Thomas <[email protected]>
AuthorDate: Fri Oct 23 16:28:14 2026 +0100

    SWitch cluster tests to use automatic ports to avoid conflicts
    
    I have seen the occasional test failure due to a port conflict
---
 .../apache/catalina/tribes/transport/nio/NioReceiver.java   |  2 +-
 .../catalina/session/TestStandardSessionIntegration.java    |  1 +
 test/org/apache/catalina/tribes/TesterUtil.java             | 13 +++++++++++++
 .../catalina/tribes/group/GroupChannelTlsTestBase.java      |  6 ++----
 .../tribes/group/TestGroupChannelMemberArrival.java         |  1 +
 .../catalina/tribes/group/TestGroupChannelOptionFlag.java   |  2 ++
 .../tribes/group/TestGroupChannelSenderConnections.java     |  1 +
 .../catalina/tribes/group/TestGroupChannelStartStop.java    |  8 +++++---
 .../group/interceptors/TestDomainFilterInterceptor.java     |  2 ++
 .../group/interceptors/TestNonBlockingCoordinator.java      |  1 +
 .../tribes/group/interceptors/TestOrderInterceptor.java     |  1 +
 .../tribes/group/interceptors/TestTcpFailureDetector.java   |  2 ++
 .../apache/catalina/tribes/membership/TestMcastService.java | 13 +++++++------
 .../catalina/tribes/test/channel/TestDataIntegrity.java     |  3 +++
 .../catalina/tribes/test/channel/TestMulticastPackages.java |  6 ++++--
 .../tribes/test/channel/TestRemoteProcessException.java     |  3 +++
 .../catalina/tribes/test/channel/TestUdpPackages.java       |  6 ++++--
 .../catalina/tribes/transport/nio/TestNioReceiver.java      |  4 ++--
 webapps/docs/config/cluster-receiver.xml                    |  3 ++-
 19 files changed, 57 insertions(+), 21 deletions(-)

diff --git a/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java 
b/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
index 4a55f19ab8..39227dfcc3 100644
--- a/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
+++ b/java/org/apache/catalina/tribes/transport/nio/NioReceiver.java
@@ -312,7 +312,7 @@ public class NioReceiver extends ReceiverBase implements 
Runnable, NioReceiverMB
             serverChannel.register(this.selector.get(), 
SelectionKey.OP_ACCEPT);
 
             // set up the datagram channel
-            if (this.getUdpPort() > 0) {
+            if (this.getUdpPort() >= 0) {
                 datagramChannel = DatagramChannel.open();
                 configureDatagramChannel();
                 // bind to the address to avoid security checks
diff --git 
a/test/org/apache/catalina/session/TestStandardSessionIntegration.java 
b/test/org/apache/catalina/session/TestStandardSessionIntegration.java
index 90c42bf540..2bececc157 100644
--- a/test/org/apache/catalina/session/TestStandardSessionIntegration.java
+++ b/test/org/apache/catalina/session/TestStandardSessionIntegration.java
@@ -67,6 +67,7 @@ public class TestStandardSessionIntegration extends 
TomcatBaseTest {
             SimpleTcpCluster cluster = new SimpleTcpCluster();
             GroupChannel channel = (GroupChannel) cluster.getChannel();
             ((ReceiverBase) channel.getChannelReceiver()).setHost("localhost");
+            ((ReceiverBase) channel.getChannelReceiver()).setPort(0);
             // Avoid discovering unrelated cluster members and waiting for 
their session state.
             TesterUtil.addRandomDomain(new ManagedChannel[] { channel });
             tomcat.getEngine().setCluster(cluster);
diff --git a/test/org/apache/catalina/tribes/TesterUtil.java 
b/test/org/apache/catalina/tribes/TesterUtil.java
index 50c5a32f07..737c5a401d 100644
--- a/test/org/apache/catalina/tribes/TesterUtil.java
+++ b/test/org/apache/catalina/tribes/TesterUtil.java
@@ -18,6 +18,7 @@ package org.apache.catalina.tribes;
 
 import java.io.IOException;
 import java.net.DatagramPacket;
+import java.net.DatagramSocket;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.MulticastSocket;
@@ -37,6 +38,18 @@ public class TesterUtil {
     }
 
 
+    /*
+     * Returns a UDP port that was free on the loopback interface when it was 
checked. Only for ports, such as a
+     * multicast group port, that cannot be left to the operating system 
because every member needs to know it in
+     * advance. There is a small window in which another process may take the 
port before the caller binds it.
+     */
+    public static int getFreeUdpPort() throws IOException {
+        try (DatagramSocket socket = new DatagramSocket(0, 
InetAddress.getLoopbackAddress())) {
+            return socket.getLocalPort();
+        }
+    }
+
+
     /*
      * Determines whether IP multicast is actually usable in the current
      * environment. The tribes membership tests rely on the default
diff --git a/test/org/apache/catalina/tribes/group/GroupChannelTlsTestBase.java 
b/test/org/apache/catalina/tribes/group/GroupChannelTlsTestBase.java
index 3a96019fb1..65a8810518 100644
--- a/test/org/apache/catalina/tribes/group/GroupChannelTlsTestBase.java
+++ b/test/org/apache/catalina/tribes/group/GroupChannelTlsTestBase.java
@@ -17,7 +17,6 @@
 package org.apache.catalina.tribes.group;
 
 import java.io.Serializable;
-import java.net.ServerSocket;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
@@ -105,9 +104,8 @@ public class GroupChannelTlsTestBase {
         channel.setPskDigest(digest);
         ReceiverBase receiver = (ReceiverBase) channel.getChannelReceiver();
         receiver.setHost("localhost");
-        try (ServerSocket socket = new ServerSocket(0)) {
-            receiver.setSecurePort(socket.getLocalPort());
-        }
+        receiver.setPort(0);
+        receiver.setSecurePort(0);
         return channel;
     }
 }
diff --git 
a/test/org/apache/catalina/tribes/group/TestGroupChannelMemberArrival.java 
b/test/org/apache/catalina/tribes/group/TestGroupChannelMemberArrival.java
index 58f9af09be..53cc202903 100644
--- a/test/org/apache/catalina/tribes/group/TestGroupChannelMemberArrival.java
+++ b/test/org/apache/catalina/tribes/group/TestGroupChannelMemberArrival.java
@@ -43,6 +43,7 @@ public class TestGroupChannelMemberArrival {
         for (int i = 0; i < channels.length; i++) {
             channels[i] = new GroupChannel();
             ((ReceiverBase) 
channels[i].getChannelReceiver()).setHost("localhost");
+            ((ReceiverBase) channels[i].getChannelReceiver()).setPort(0);
             channels[i].getMembershipService().setPayload( ("Channel-" + (i + 
1)).getBytes("ASCII"));
             listeners[i] = new TestMbrListener( ("Listener-" + (i + 1)));
             channels[i].addMembershipListener(listeners[i]);
diff --git 
a/test/org/apache/catalina/tribes/group/TestGroupChannelOptionFlag.java 
b/test/org/apache/catalina/tribes/group/TestGroupChannelOptionFlag.java
index 37701b576b..3af119e7fe 100644
--- a/test/org/apache/catalina/tribes/group/TestGroupChannelOptionFlag.java
+++ b/test/org/apache/catalina/tribes/group/TestGroupChannelOptionFlag.java
@@ -24,6 +24,7 @@ import org.junit.Test;
 import org.apache.catalina.tribes.Channel;
 import org.apache.catalina.tribes.ChannelException;
 import org.apache.catalina.tribes.ChannelInterceptor;
+import org.apache.catalina.tribes.transport.ReceiverBase;
 import org.apache.tomcat.util.res.StringManager;
 
 public class TestGroupChannelOptionFlag {
@@ -33,6 +34,7 @@ public class TestGroupChannelOptionFlag {
     @Before
     public void setUp() throws Exception {
         channel = new GroupChannel();
+        ((ReceiverBase) channel.getChannelReceiver()).setPort(0);
     }
 
     @After
diff --git 
a/test/org/apache/catalina/tribes/group/TestGroupChannelSenderConnections.java 
b/test/org/apache/catalina/tribes/group/TestGroupChannelSenderConnections.java
index 9e4ce212b4..e2eadad408 100644
--- 
a/test/org/apache/catalina/tribes/group/TestGroupChannelSenderConnections.java
+++ 
b/test/org/apache/catalina/tribes/group/TestGroupChannelSenderConnections.java
@@ -48,6 +48,7 @@ public class TestGroupChannelSenderConnections extends 
LoggingBaseTest {
         for (int i = 0; i < channels.length; i++) {
             channels[i] = new GroupChannel();
             ((ReceiverBase) 
channels[i].getChannelReceiver()).setHost("localhost");
+            ((ReceiverBase) channels[i].getChannelReceiver()).setPort(0);
             channels[i].getMembershipService().setPayload( ("Channel-" + (i + 
1)).getBytes("ASCII"));
             listeners[i] = new TestMsgListener( ("Listener-" + (i + 1)));
             channels[i].addChannelListener(listeners[i]);
diff --git 
a/test/org/apache/catalina/tribes/group/TestGroupChannelStartStop.java 
b/test/org/apache/catalina/tribes/group/TestGroupChannelStartStop.java
index 1dcf65275b..0ed5350f44 100644
--- a/test/org/apache/catalina/tribes/group/TestGroupChannelStartStop.java
+++ b/test/org/apache/catalina/tribes/group/TestGroupChannelStartStop.java
@@ -32,12 +32,12 @@ import 
org.apache.catalina.tribes.transport.ReplicationTransmitter;
 
 public class TestGroupChannelStartStop {
     private GroupChannel channel = null;
-    private int udpPort = 45543;
 
     @Before
     public void setUp() throws Exception {
         channel = new GroupChannel();
         ((ReceiverBase) channel.getChannelReceiver()).setHost("localhost");
+        ((ReceiverBase) channel.getChannelReceiver()).setPort(0);
     }
 
     @After
@@ -189,7 +189,7 @@ public class TestGroupChannelStartStop {
         // start one service, then start everything: the already
         // started service must not be started a second time
         ReceiverBase rb = (ReceiverBase) channel.getChannelReceiver();
-        rb.setPort(45588);
+        rb.setPort(0);
         // one bind attempt only, so a second start on the same port fails
         rb.setAutoBind(0);
         int count = 0;
@@ -197,6 +197,8 @@ public class TestGroupChannelStartStop {
             channel.start(Channel.SND_RX_SEQ);
             count++;
         } catch ( Exception x){x.printStackTrace();}
+        // Pin the port the first start was given so that a second bind 
attempt would fail
+        rb.setPort(rb.getBoundPort());
         try {
             channel.start(Channel.DEFAULT);
             count++;
@@ -250,7 +252,7 @@ public class TestGroupChannelStartStop {
     @Test
     public void testUdpReceiverStart() throws Exception {
         ReceiverBase rb = (ReceiverBase)channel.getChannelReceiver();
-        rb.setUdpPort(udpPort);
+        rb.setUdpPort(0);
         channel.start(Channel.DEFAULT);
         Thread.sleep(1000);
         channel.stop(Channel.DEFAULT);
diff --git 
a/test/org/apache/catalina/tribes/group/interceptors/TestDomainFilterInterceptor.java
 
b/test/org/apache/catalina/tribes/group/interceptors/TestDomainFilterInterceptor.java
index 4def88c6ec..213af17ced 100644
--- 
a/test/org/apache/catalina/tribes/group/interceptors/TestDomainFilterInterceptor.java
+++ 
b/test/org/apache/catalina/tribes/group/interceptors/TestDomainFilterInterceptor.java
@@ -30,6 +30,7 @@ import org.apache.catalina.tribes.Member;
 import org.apache.catalina.tribes.MembershipListener;
 import org.apache.catalina.tribes.TesterUtil;
 import org.apache.catalina.tribes.group.GroupChannel;
+import org.apache.catalina.tribes.transport.ReceiverBase;
 import org.apache.catalina.tribes.util.UUIDGenerator;
 
 public class TestDomainFilterInterceptor {
@@ -43,6 +44,7 @@ public class TestDomainFilterInterceptor {
                 TesterUtil.isMulticastAvailable());
         for (int i = 0; i < channels.length; i++) {
             channels[i] = new GroupChannel();
+            ((ReceiverBase) channels[i].getChannelReceiver()).setPort(0);
             channels[i].getMembershipService().setPayload( ("Channel-" + (i + 
1)).getBytes("ASCII"));
             listeners[i] = new TestMbrListener( ("Listener-" + (i + 1)));
             channels[i].addMembershipListener(listeners[i]);
diff --git 
a/test/org/apache/catalina/tribes/group/interceptors/TestNonBlockingCoordinator.java
 
b/test/org/apache/catalina/tribes/group/interceptors/TestNonBlockingCoordinator.java
index 3c61c0952c..dbb5d1318f 100644
--- 
a/test/org/apache/catalina/tribes/group/interceptors/TestNonBlockingCoordinator.java
+++ 
b/test/org/apache/catalina/tribes/group/interceptors/TestNonBlockingCoordinator.java
@@ -56,6 +56,7 @@ public class TestNonBlockingCoordinator {
             for ( int i=0; i<CHANNEL_COUNT; i++ ) {
                 channels[i] = new GroupChannel();
                 ((ReceiverBase) 
channels[i].getChannelReceiver()).setHost("localhost");
+                ((ReceiverBase) channels[i].getChannelReceiver()).setPort(0);
                 coordinators[i] = new NonBlockingCoordinator();
                 channels[i].addInterceptor(coordinators[i]);
                 TcpFailureDetector tcpFailureDetector = new 
TcpFailureDetector();
diff --git 
a/test/org/apache/catalina/tribes/group/interceptors/TestOrderInterceptor.java 
b/test/org/apache/catalina/tribes/group/interceptors/TestOrderInterceptor.java
index 35398458a2..f0590533f9 100644
--- 
a/test/org/apache/catalina/tribes/group/interceptors/TestOrderInterceptor.java
+++ 
b/test/org/apache/catalina/tribes/group/interceptors/TestOrderInterceptor.java
@@ -60,6 +60,7 @@ public class TestOrderInterceptor {
         for ( int i=0; i<channelCount; i++ ) {
             channels[i] = new GroupChannel();
             ((ReceiverBase) 
channels[i].getChannelReceiver()).setHost("localhost");
+            ((ReceiverBase) channels[i].getChannelReceiver()).setPort(0);
             orderitcs[i] = new OrderInterceptor();
             mangleitcs[i] = new MangleOrderInterceptor();
             orderitcs[i].setExpire(Long.MAX_VALUE);
diff --git 
a/test/org/apache/catalina/tribes/group/interceptors/TestTcpFailureDetector.java
 
b/test/org/apache/catalina/tribes/group/interceptors/TestTcpFailureDetector.java
index fdcd7d6345..1f1e117c80 100644
--- 
a/test/org/apache/catalina/tribes/group/interceptors/TestTcpFailureDetector.java
+++ 
b/test/org/apache/catalina/tribes/group/interceptors/TestTcpFailureDetector.java
@@ -49,7 +49,9 @@ public class TestTcpFailureDetector {
         channel1 = new GroupChannel();
         channel2 = new GroupChannel();
         ((ReceiverBase) channel1.getChannelReceiver()).setHost("localhost");
+        ((ReceiverBase) channel1.getChannelReceiver()).setPort(0);
         ((ReceiverBase) channel2.getChannelReceiver()).setHost("localhost");
+        ((ReceiverBase) channel2.getChannelReceiver()).setPort(0);
         
channel1.getMembershipService().setPayload("Channel-1".getBytes("ASCII"));
         
channel2.getMembershipService().setPayload("Channel-2".getBytes("ASCII"));
         mbrlist1 = new TestMbrListener("Channel-1");
diff --git a/test/org/apache/catalina/tribes/membership/TestMcastService.java 
b/test/org/apache/catalina/tribes/membership/TestMcastService.java
index 51fb7a4505..1aada231b6 100644
--- a/test/org/apache/catalina/tribes/membership/TestMcastService.java
+++ b/test/org/apache/catalina/tribes/membership/TestMcastService.java
@@ -24,6 +24,7 @@ import org.junit.Test;
 
 import org.apache.catalina.tribes.Channel;
 import org.apache.catalina.tribes.ChannelException;
+import org.apache.catalina.tribes.TesterUtil;
 import org.apache.catalina.tribes.group.GroupChannel;
 import org.apache.catalina.tribes.io.ChannelData;
 import org.apache.catalina.tribes.io.XByteBuffer;
@@ -37,12 +38,12 @@ public class TestMcastService {
      */
     @Test(timeout = 60000)
     public void testStopWithFailingShutdownSendCompletes() throws Exception {
-        int base = 40000 + (int) Math.floorMod(System.nanoTime(), 10000);
+        int mcastPort = TesterUtil.getFreeUdpPort();
         StringBuilder properties = new StringBuilder();
         properties.append("mcastAddress=228.0.0.4\n");
-        properties.append("mcastPort=").append(base).append("\n");
+        properties.append("mcastPort=").append(mcastPort).append("\n");
         properties.append("tcpListenHost=127.0.0.1\n");
-        properties.append("tcpListenPort=").append(base + 1).append("\n");
+        properties.append("tcpListenPort=").append(0).append("\n");
         properties.append("tcpSecurePort=0\n");
         properties.append("udpListenPort=0\n");
         properties.append("mcastFrequency=100\n");
@@ -167,12 +168,12 @@ public class TestMcastService {
      */
     @Test(timeout = 60000)
     public void testBroadcastRejectsPacketsTheSocketCannotCarry() throws 
Exception {
-        int base = 40000 + (int) Math.floorMod(System.nanoTime(), 10000);
+        int mcastPort = TesterUtil.getFreeUdpPort();
         Properties props = new Properties();
         props.setProperty("mcastAddress", "228.0.0.4");
-        props.setProperty("mcastPort", String.valueOf(base));
+        props.setProperty("mcastPort", String.valueOf(mcastPort));
         props.setProperty("tcpListenHost", "127.0.0.1");
-        props.setProperty("tcpListenPort", String.valueOf(base + 1));
+        props.setProperty("tcpListenPort", "0");
         props.setProperty("tcpSecurePort", "0");
         props.setProperty("udpListenPort", "0");
         props.setProperty("mcastFrequency", "100");
diff --git 
a/test/org/apache/catalina/tribes/test/channel/TestDataIntegrity.java 
b/test/org/apache/catalina/tribes/test/channel/TestDataIntegrity.java
index 3da336f4f1..70f4592c22 100644
--- a/test/org/apache/catalina/tribes/test/channel/TestDataIntegrity.java
+++ b/test/org/apache/catalina/tribes/test/channel/TestDataIntegrity.java
@@ -32,6 +32,7 @@ import org.apache.catalina.tribes.Member;
 import org.apache.catalina.tribes.TesterUtil;
 import org.apache.catalina.tribes.group.GroupChannel;
 import 
org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor;
+import org.apache.catalina.tribes.transport.ReceiverBase;
 
 public class TestDataIntegrity {
     private int msgCount = 500;
@@ -43,8 +44,10 @@ public class TestDataIntegrity {
     @Before
     public void setUp() throws Exception {
         channel1 = new GroupChannel();
+        ((ReceiverBase) channel1.getChannelReceiver()).setPort(0);
         channel1.addInterceptor(new MessageDispatchInterceptor());
         channel2 = new GroupChannel();
+        ((ReceiverBase) channel2.getChannelReceiver()).setPort(0);
         channel2.addInterceptor(new MessageDispatchInterceptor());
         listener1 = new Listener();
         channel2.addChannelListener(listener1);
diff --git 
a/test/org/apache/catalina/tribes/test/channel/TestMulticastPackages.java 
b/test/org/apache/catalina/tribes/test/channel/TestMulticastPackages.java
index 0faee86a88..c7fb989de4 100644
--- a/test/org/apache/catalina/tribes/test/channel/TestMulticastPackages.java
+++ b/test/org/apache/catalina/tribes/test/channel/TestMulticastPackages.java
@@ -53,8 +53,10 @@ public class TestMulticastPackages {
     @Before
     public void setUp() throws Exception {
         channel1 = new GroupChannel();
+        ((ReceiverBase) channel1.getChannelReceiver()).setPort(0);
         channel1.addInterceptor(new MessageDispatchInterceptor());
         channel2 = new GroupChannel();
+        ((ReceiverBase) channel2.getChannelReceiver()).setPort(0);
         channel2.addInterceptor(new MessageDispatchInterceptor());
         ThroughputInterceptor tint = new ThroughputInterceptor();
         tint.setInterval(500);
@@ -65,8 +67,8 @@ public class TestMulticastPackages {
         listener1 = new Listener();
         ReceiverBase rb1 = (ReceiverBase)channel1.getChannelReceiver();
         ReceiverBase rb2 = (ReceiverBase)channel2.getChannelReceiver();
-        rb1.setUdpPort(50000);
-        rb2.setUdpPort(50000);
+        rb1.setUdpPort(0);
+        rb2.setUdpPort(0);
         channel2.addChannelListener(listener1);
         TesterUtil.addRandomDomain(new ManagedChannel[] {channel1, channel2});
         channel1.start(Channel.DEFAULT);
diff --git 
a/test/org/apache/catalina/tribes/test/channel/TestRemoteProcessException.java 
b/test/org/apache/catalina/tribes/test/channel/TestRemoteProcessException.java
index 587699e865..d3ec4635ae 100644
--- 
a/test/org/apache/catalina/tribes/test/channel/TestRemoteProcessException.java
+++ 
b/test/org/apache/catalina/tribes/test/channel/TestRemoteProcessException.java
@@ -33,6 +33,7 @@ import org.apache.catalina.tribes.ManagedChannel;
 import org.apache.catalina.tribes.Member;
 import org.apache.catalina.tribes.TesterUtil;
 import org.apache.catalina.tribes.group.GroupChannel;
+import org.apache.catalina.tribes.transport.ReceiverBase;
 
 public class TestRemoteProcessException {
     private int msgCount = 10000;
@@ -43,7 +44,9 @@ public class TestRemoteProcessException {
     @Before
     public void setUp() throws Exception {
         channel1 = new GroupChannel();
+        ((ReceiverBase) channel1.getChannelReceiver()).setPort(0);
         channel2 = new GroupChannel();
+        ((ReceiverBase) channel2.getChannelReceiver()).setPort(0);
         listener1 = new Listener();
         channel2.addChannelListener(listener1);
         TesterUtil.addRandomDomain(new ManagedChannel[] {channel1, channel2});
diff --git a/test/org/apache/catalina/tribes/test/channel/TestUdpPackages.java 
b/test/org/apache/catalina/tribes/test/channel/TestUdpPackages.java
index bdb7078f8c..1bb6a0b157 100644
--- a/test/org/apache/catalina/tribes/test/channel/TestUdpPackages.java
+++ b/test/org/apache/catalina/tribes/test/channel/TestUdpPackages.java
@@ -53,8 +53,10 @@ public class TestUdpPackages {
     @Before
     public void setUp() throws Exception {
         channel1 = new GroupChannel();
+        ((ReceiverBase) channel1.getChannelReceiver()).setPort(0);
         channel1.addInterceptor(new MessageDispatchInterceptor());
         channel2 = new GroupChannel();
+        ((ReceiverBase) channel2.getChannelReceiver()).setPort(0);
         channel2.addInterceptor(new MessageDispatchInterceptor());
         ThroughputInterceptor tint = new ThroughputInterceptor();
         tint.setInterval(500);
@@ -65,8 +67,8 @@ public class TestUdpPackages {
         listener1 = new Listener();
         ReceiverBase rb1 = (ReceiverBase)channel1.getChannelReceiver();
         ReceiverBase rb2 = (ReceiverBase)channel2.getChannelReceiver();
-        rb1.setUdpPort(50000);
-        rb2.setUdpPort(50000);
+        rb1.setUdpPort(0);
+        rb2.setUdpPort(0);
         channel2.addChannelListener(listener1);
         TesterUtil.addRandomDomain(new ManagedChannel[] {channel1, channel2});
         channel1.start(Channel.DEFAULT);
diff --git a/test/org/apache/catalina/tribes/transport/nio/TestNioReceiver.java 
b/test/org/apache/catalina/tribes/transport/nio/TestNioReceiver.java
index b931ba0c44..552d3daa84 100644
--- a/test/org/apache/catalina/tribes/transport/nio/TestNioReceiver.java
+++ b/test/org/apache/catalina/tribes/transport/nio/TestNioReceiver.java
@@ -124,7 +124,7 @@ public class TestNioReceiver {
         receiver.setChannel(new GroupChannel());
         receiver.setAddress("127.0.0.1");
         receiver.setPort(0);
-        receiver.setUdpPort(45678);
+        receiver.setUdpPort(0);
         receiver.bind();
         Field field = NioReceiver.class.getDeclaredField("datagramChannel");
         field.setAccessible(true);
@@ -249,7 +249,7 @@ public class TestNioReceiver {
         receiver.setChannel(new GroupChannel());
         receiver.setAddress("127.0.0.1");
         receiver.setPort(0);
-        receiver.setUdpPort(45678);
+        receiver.setUdpPort(0);
         try {
             receiver.bind();
             Field field = 
NioReceiver.class.getDeclaredField("datagramChannel");
diff --git a/webapps/docs/config/cluster-receiver.xml 
b/webapps/docs/config/cluster-receiver.xml
index c0b05526ab..293ae4e5b5 100644
--- a/webapps/docs/config/cluster-receiver.xml
+++ b/webapps/docs/config/cluster-receiver.xml
@@ -99,7 +99,8 @@
     </attribute>
     <attribute name="udpPort" required="false">
       The UDP listen port. If this attribute is omitted no UDP port is opened 
up.
-      The default value is unset, meaning there is no UDP listener available.
+      The default value is unset, meaning there is no UDP listener available. 
A value of <code>0</code> lets the
+      operating system select a free port.
       As with <code>port</code>, auto-binding does not change the configured 
value; the port actually bound is
       available via the read-only <code>boundUdpPort</code> property.
     </attribute>


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to