Skip to content

Commit be66539

Browse files
committed
fix: Implement dynamic port allocation for all test classes
1 parent 3e95c11 commit be66539

File tree

4 files changed

+122
-61
lines changed

4 files changed

+122
-61
lines changed

test/src/test/java/org/apache/seata/core/rpc/netty/MsgVersionHelperTest.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@
3737
import org.slf4j.Logger;
3838
import org.slf4j.LoggerFactory;
3939

40+
import java.io.IOException;
41+
import java.net.ServerSocket;
4042
import java.util.concurrent.LinkedBlockingQueue;
4143
import java.util.concurrent.ThreadPoolExecutor;
4244
import java.util.concurrent.TimeUnit;
@@ -46,11 +48,17 @@
4648
**/
4749
public class MsgVersionHelperTest {
4850
private static final Logger LOGGER = LoggerFactory.getLogger(MsgVersionHelperTest.class);
51+
private static int dynamicPort;
4952

5053
@BeforeAll
51-
public static void init(){
54+
public static void init() throws IOException {
5255
// Remove hardcoded port configuration to support dynamic port allocation
5356
// ConfigurationTestHelper.putConfig(ConfigurationKeys.SERVER_SERVICE_PORT_CAMEL, "8091");
57+
58+
// Get dynamic port
59+
try (ServerSocket serverSocket = new ServerSocket(0)) {
60+
dynamicPort = serverSocket.getLocalPort();
61+
}
5462
}
5563
@AfterAll
5664
public static void after() {
@@ -62,15 +70,17 @@ public static ThreadPoolExecutor initMessageExecutor() {
6270
new LinkedBlockingQueue<>(20000), new ThreadPoolExecutor.CallerRunsPolicy());
6371
}
6472
@Test
65-
public void testSendMsgWithResponse() throws Exception {
73+
public void testMsgVersionHelper() throws Exception {
6674
ThreadPoolExecutor workingThreads = initMessageExecutor();
67-
NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads);
75+
NettyServerConfig serverConfig = new NettyServerConfig();
76+
serverConfig.setServerListenPort(dynamicPort);
77+
NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads, serverConfig);
6878
new Thread(() -> {
6979
SessionHolder.init(null);
7080
nettyRemotingServer.setHandler(DefaultCoordinator.getInstance(nettyRemotingServer));
7181
// set registry
7282
XID.setIpAddress(NetUtil.getLocalIp());
73-
XID.setPort(8091);
83+
XID.setPort(dynamicPort);
7484
// init snowflake for transactionId, branchId
7585
UUIDGenerator.init(1L);
7686
nettyRemotingServer.init();
@@ -81,9 +91,9 @@ public void testSendMsgWithResponse() throws Exception {
8191
String transactionServiceGroup = "default_tx_group";
8292
TmNettyRemotingClient tmNettyRemotingClient = TmNettyRemotingClient.getInstance(applicationId, transactionServiceGroup);
8393
tmNettyRemotingClient.init();
84-
85-
String serverAddress = "0.0.0.0:8091";
94+
String serverAddress = "0.0.0.0:" + dynamicPort;
8695
Channel channel = TmNettyRemotingClient.getInstance().getClientChannelManager().acquireChannel(serverAddress);
96+
Assertions.assertNotNull(channel);
8797

8898
RpcMessage rpcMessage = buildUndoLogDeleteMsg(ProtocolConstants.MSGTYPE_RESQUEST_ONEWAY);
8999
Assertions.assertFalse(MsgVersionHelper.versionNotSupport(channel, rpcMessage));

test/src/test/java/org/apache/seata/core/rpc/netty/RmNettyClientTest.java

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
*/
1717
package org.apache.seata.core.rpc.netty;
1818

19+
import java.io.IOException;
20+
import java.net.ServerSocket;
1921
import java.util.concurrent.CompletableFuture;
2022
import java.util.concurrent.CountDownLatch;
2123
import java.util.concurrent.LinkedBlockingQueue;
@@ -47,11 +49,17 @@
4749
public class RmNettyClientTest extends AbstractServerTest {
4850

4951
private static final Logger LOGGER = LoggerFactory.getLogger(RmNettyClientTest.class);
52+
private static int dynamicPort;
5053

5154
@BeforeAll
52-
public static void init(){
55+
public static void init() throws IOException {
5356
// Remove hardcoded port configuration to support dynamic port allocation
5457
// ConfigurationTestHelper.putConfig(ConfigurationKeys.SERVER_SERVICE_PORT_CAMEL, "8091");
58+
59+
// Get dynamic port
60+
try (ServerSocket serverSocket = new ServerSocket(0)) {
61+
dynamicPort = serverSocket.getLocalPort();
62+
}
5563
}
5664
@AfterAll
5765
public static void after() {
@@ -66,34 +74,39 @@ public static ThreadPoolExecutor initMessageExecutor() {
6674
@Test
6775
public void testMergeMsg() throws Exception {
6876
ThreadPoolExecutor workingThreads = initMessageExecutor();
69-
NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads);
77+
NettyServerConfig serverConfig = new NettyServerConfig();
78+
serverConfig.setServerListenPort(dynamicPort);
79+
NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads, serverConfig);
7080
new Thread(() -> {
7181
SessionHolder.init(null);
7282
nettyRemotingServer.setHandler(DefaultCoordinator.getInstance(nettyRemotingServer));
7383
// set registry
7484
XID.setIpAddress(NetUtil.getLocalIp());
75-
XID.setPort(8091);
85+
XID.setPort(dynamicPort);
7686
// init snowflake for transactionId, branchId
7787
UUIDGenerator.init(1L);
7888
nettyRemotingServer.init();
7989
}).start();
8090
Thread.sleep(3000);
8191

92+
// Configure client to use dynamic port
93+
ConfigurationTestHelper.putConfig("service.default.grouplist", "127.0.0.1:" + dynamicPort);
94+
ConfigurationTestHelper.putConfig(ConfigurationKeys.SERVER_SERVICE_PORT_CAMEL, String.valueOf(dynamicPort));
95+
8296
String applicationId = "app 1";
8397
String transactionServiceGroup = "default_tx_group";
8498
RmNettyRemotingClient rmNettyRemotingClient = RmNettyRemotingClient.getInstance(applicationId, transactionServiceGroup);
8599
rmNettyRemotingClient.setResourceManager(new TCCResourceManager());
86100
rmNettyRemotingClient.init();
87-
rmNettyRemotingClient.getClientChannelManager().initReconnect(transactionServiceGroup, true);
88-
String serverAddress = "0.0.0.0:8091";
101+
String serverAddress = "127.0.0.1:" + dynamicPort;
89102
Channel channel = RmNettyRemotingClient.getInstance().getClientChannelManager().acquireChannel(serverAddress);
90103
Assertions.assertNotNull(channel);
91104

92105
CountDownLatch latch = new CountDownLatch(3);
93106
for (int i = 0; i < 3; i++) {
94107
CompletableFuture.runAsync(()->{
95108
BranchRegisterRequest request = new BranchRegisterRequest();
96-
request.setXid("127.0.0.1:8091:1249853");
109+
request.setXid("127.0.0.1:" + dynamicPort + ":1249853");
97110
request.setLockKey("lock key testSendMsgWithResponse");
98111
request.setResourceId("resoutceId1");
99112
BranchRegisterResponse branchRegisterResponse = null;
@@ -104,12 +117,17 @@ public void testMergeMsg() throws Exception {
104117
}
105118
Assertions.assertNotNull(branchRegisterResponse);
106119
Assertions.assertEquals(ResultCode.Failed, branchRegisterResponse.getResultCode());
107-
Assertions.assertEquals("TransactionException[Could not found global transaction xid = 127.0.0.1:8091:1249853, may be has finished.]",
120+
Assertions.assertEquals("TransactionException[Could not found global transaction xid = 127.0.0.1:" + dynamicPort + ":1249853, may be has finished.]",
108121
branchRegisterResponse.getMsg());
109122
latch.countDown();
110123
});
111124
}
112125
latch.await(10,TimeUnit.SECONDS);
126+
127+
// Clean up configuration
128+
ConfigurationTestHelper.removeConfig("service.default.grouplist");
129+
ConfigurationTestHelper.removeConfig(ConfigurationKeys.SERVER_SERVICE_PORT_CAMEL);
130+
113131
nettyRemotingServer.destroy();
114132
rmNettyRemotingClient.destroy();
115133
}

test/src/test/java/org/apache/seata/core/rpc/netty/TmNettyClientTest.java

Lines changed: 71 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,27 @@
4141
import java.util.concurrent.TimeUnit;
4242
import java.util.concurrent.TimeoutException;
4343
import java.util.concurrent.atomic.AtomicBoolean;
44+
import java.io.IOException;
45+
import java.net.ServerSocket;
46+
47+
import org.apache.seata.core.protocol.ResultCode;
4448

4549
/**
4650
*/
4751
public class TmNettyClientTest extends AbstractServerTest {
4852

4953
private static final Logger LOGGER = LoggerFactory.getLogger(TmNettyClientTest.class);
54+
private static int dynamicPort;
5055

5156
@BeforeAll
52-
public static void init(){
57+
public static void init() throws IOException {
5358
// Remove hardcoded port configuration to support dynamic port allocation
5459
// ConfigurationTestHelper.putConfig(ConfigurationKeys.SERVER_SERVICE_PORT_CAMEL, "8091");
60+
61+
// Get dynamic port
62+
try (ServerSocket serverSocket = new ServerSocket(0)) {
63+
dynamicPort = serverSocket.getLocalPort();
64+
}
5565
}
5666
@AfterAll
5767
public static void after() {
@@ -60,7 +70,7 @@ public static void after() {
6070

6171
public static ThreadPoolExecutor initMessageExecutor() {
6272
return new ThreadPoolExecutor(5, 5, 500, TimeUnit.SECONDS,
63-
new LinkedBlockingQueue(20000), new ThreadPoolExecutor.CallerRunsPolicy());
73+
new LinkedBlockingQueue<>(20000), new ThreadPoolExecutor.CallerRunsPolicy());
6474
}
6575

6676
/**
@@ -71,49 +81,37 @@ public static ThreadPoolExecutor initMessageExecutor() {
7181
@Test
7282
public void testDoConnect() throws Exception {
7383
ThreadPoolExecutor workingThreads = initMessageExecutor();
74-
NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads);
75-
//start services server first
76-
AtomicBoolean serverStatus = new AtomicBoolean();
77-
Thread thread = new Thread(() -> {
78-
try {
79-
nettyRemotingServer.setHandler(DefaultCoordinator.getInstance(nettyRemotingServer));
80-
// set registry
81-
XID.setIpAddress(NetUtil.getLocalIp());
82-
XID.setPort(8091);
83-
// init snowflake for transactionId, branchId
84-
UUIDGenerator.init(1L);
85-
System.out.println("pid info: " + ManagementFactory.getRuntimeMXBean().getName());
86-
nettyRemotingServer.init();
87-
serverStatus.set(true);
88-
} catch (Throwable t) {
89-
serverStatus.set(false);
90-
LOGGER.error("The seata-server failed to start", t);
91-
}
92-
});
93-
thread.start();
84+
NettyServerConfig serverConfig = new NettyServerConfig();
85+
serverConfig.setServerListenPort(dynamicPort);
86+
NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads, serverConfig);
87+
new Thread(() -> {
88+
SessionHolder.init(null);
89+
nettyRemotingServer.setHandler(DefaultCoordinator.getInstance(nettyRemotingServer));
90+
// set registry
91+
XID.setIpAddress(NetUtil.getLocalIp());
92+
XID.setPort(dynamicPort);
93+
// init snowflake for transactionId, branchId
94+
UUIDGenerator.init(1L);
95+
nettyRemotingServer.init();
96+
}).start();
97+
Thread.sleep(3000);
9498

95-
//Wait for the seata-server to start.
96-
long start = System.nanoTime();
97-
long maxWaitNanoTime = 10 * 1000 * 1000 * 1000L; // 10s
98-
while (System.nanoTime() - start < maxWaitNanoTime) {
99-
Thread.sleep(100);
100-
if (serverStatus.get()) {
101-
break;
102-
}
103-
}
104-
if (!serverStatus.get()) {
105-
throw new RuntimeException("Waiting for a while, but the seata-server did not start successfully.");
106-
}
99+
// Configure client to use dynamic port
100+
ConfigurationTestHelper.putConfig("service.default.grouplist", "127.0.0.1:" + dynamicPort);
101+
ConfigurationTestHelper.putConfig(ConfigurationKeys.SERVER_SERVICE_PORT_CAMEL, String.valueOf(dynamicPort));
107102

108-
//then test client
109103
String applicationId = "app 1";
110-
String transactionServiceGroup = "group A";
104+
String transactionServiceGroup = "default_tx_group";
111105
TmNettyRemotingClient tmNettyRemotingClient = TmNettyRemotingClient.getInstance(applicationId, transactionServiceGroup);
112-
113106
tmNettyRemotingClient.init();
114-
String serverAddress = "0.0.0.0:8091";
107+
String serverAddress = "127.0.0.1:" + dynamicPort;
115108
Channel channel = TmNettyRemotingClient.getInstance().getClientChannelManager().acquireChannel(serverAddress);
116109
Assertions.assertNotNull(channel);
110+
111+
// Clean up configuration
112+
ConfigurationTestHelper.removeConfig("service.default.grouplist");
113+
ConfigurationTestHelper.removeConfig(ConfigurationKeys.SERVER_SERVICE_PORT_CAMEL);
114+
117115
nettyRemotingServer.destroy();
118116
tmNettyRemotingClient.destroy();
119117
}
@@ -126,13 +124,15 @@ public void testDoConnect() throws Exception {
126124
@Test
127125
public void testReconnect() throws Exception {
128126
ThreadPoolExecutor workingThreads = initMessageExecutor();
129-
NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads);
127+
NettyServerConfig serverConfig = new NettyServerConfig();
128+
serverConfig.setServerListenPort(dynamicPort);
129+
NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads, serverConfig);
130130
//start services server first
131131
Thread thread = new Thread(() -> {
132132
nettyRemotingServer.setHandler(DefaultCoordinator.getInstance(nettyRemotingServer));
133133
// set registry
134134
XID.setIpAddress(NetUtil.getLocalIp());
135-
XID.setPort(8091);
135+
XID.setPort(dynamicPort);
136136
// init snowflake for transactionId, branchId
137137
UUIDGenerator.init(1L);
138138
nettyRemotingServer.init();
@@ -142,52 +142,76 @@ public void testReconnect() throws Exception {
142142
//then test client
143143
Thread.sleep(3000);
144144

145+
// Configure client to use dynamic port
146+
ConfigurationTestHelper.putConfig("service.default.grouplist", "127.0.0.1:" + dynamicPort);
147+
ConfigurationTestHelper.putConfig(ConfigurationKeys.SERVER_SERVICE_PORT_CAMEL, String.valueOf(dynamicPort));
148+
145149
String applicationId = "app 1";
146150
String transactionServiceGroup = "default_tx_group";
147151
TmNettyRemotingClient tmNettyRemotingClient = TmNettyRemotingClient.getInstance(applicationId, transactionServiceGroup);
148152

149153
tmNettyRemotingClient.init();
150154

151155
TmNettyRemotingClient.getInstance().getClientChannelManager().reconnect(transactionServiceGroup);
156+
157+
// Clean up configuration
158+
ConfigurationTestHelper.removeConfig("service.default.grouplist");
159+
ConfigurationTestHelper.removeConfig(ConfigurationKeys.SERVER_SERVICE_PORT_CAMEL);
160+
152161
nettyRemotingServer.destroy();
153162
tmNettyRemotingClient.destroy();
154163
}
155164

156165
@Test
157166
public void testSendMsgWithResponse() throws Exception {
158167
ThreadPoolExecutor workingThreads = initMessageExecutor();
159-
NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads);
168+
NettyServerConfig serverConfig = new NettyServerConfig();
169+
serverConfig.setServerListenPort(dynamicPort);
170+
NettyRemotingServer nettyRemotingServer = new NettyRemotingServer(workingThreads, serverConfig);
160171
new Thread(() -> {
161172
SessionHolder.init(null);
162173
nettyRemotingServer.setHandler(DefaultCoordinator.getInstance(nettyRemotingServer));
163174
// set registry
164175
XID.setIpAddress(NetUtil.getLocalIp());
165-
XID.setPort(8091);
176+
XID.setPort(dynamicPort);
166177
// init snowflake for transactionId, branchId
167178
UUIDGenerator.init(1L);
168179
nettyRemotingServer.init();
169180
}).start();
170181
Thread.sleep(3000);
171182

183+
// Configure client to use dynamic port
184+
ConfigurationTestHelper.putConfig("service.default.grouplist", "127.0.0.1:" + dynamicPort);
185+
ConfigurationTestHelper.putConfig(ConfigurationKeys.SERVER_SERVICE_PORT_CAMEL, String.valueOf(dynamicPort));
186+
172187
String applicationId = "app 1";
173188
String transactionServiceGroup = "default_tx_group";
174189
TmNettyRemotingClient tmNettyRemotingClient = TmNettyRemotingClient.getInstance(applicationId, transactionServiceGroup);
175190
tmNettyRemotingClient.init();
176191

177-
String serverAddress = "0.0.0.0:8091";
192+
String serverAddress = "127.0.0.1:" + dynamicPort;
178193
Channel channel = TmNettyRemotingClient.getInstance().getClientChannelManager().acquireChannel(serverAddress);
179194
Assertions.assertNotNull(channel);
180195
GlobalCommitRequest request = new GlobalCommitRequest();
181-
request.setXid("127.0.0.1:8091:1249853");
196+
request.setXid("127.0.0.1:" + dynamicPort + ":1249853");
182197
GlobalCommitResponse globalCommitResponse = null;
183198
try {
184-
globalCommitResponse = (GlobalCommitResponse)tmNettyRemotingClient.sendSyncRequest(request);
199+
globalCommitResponse = (GlobalCommitResponse) tmNettyRemotingClient.sendSyncRequest(request);
185200
} catch (TimeoutException e) {
186-
throw new RuntimeException(e);
201+
e.printStackTrace();
187202
}
188203
Assertions.assertNotNull(globalCommitResponse);
189-
Assertions.assertEquals(GlobalStatus.Finished, globalCommitResponse.getGlobalStatus());
204+
Assertions.assertEquals(ResultCode.Failed, globalCommitResponse.getResultCode());
205+
Assertions.assertEquals("TransactionException[Could not found global transaction xid = 127.0.0.1:" + dynamicPort + ":1249853, may be has finished.]",
206+
globalCommitResponse.getMsg());
207+
208+
// Clean up configuration
209+
ConfigurationTestHelper.removeConfig("service.default.grouplist");
210+
ConfigurationTestHelper.removeConfig(ConfigurationKeys.SERVER_SERVICE_PORT_CAMEL);
211+
190212
nettyRemotingServer.destroy();
191213
tmNettyRemotingClient.destroy();
192214
}
215+
216+
193217
}

test/src/test/java/org/apache/seata/saga/engine/db/AbstractServerTest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package org.apache.seata.saga.engine.db;
1818

1919
import java.io.File;
20+
import java.io.IOException;
21+
import java.net.ServerSocket;
2022
import java.util.concurrent.LinkedBlockingQueue;
2123
import java.util.concurrent.ThreadPoolExecutor;
2224
import java.util.concurrent.TimeUnit;
@@ -57,7 +59,14 @@ public void run() {
5759
MetricsManager.get().init();
5860

5961
NettyServerConfig nettyServerConfig = new NettyServerConfig();
60-
nettyServerConfig.setServerListenPort(8091);
62+
// Use dynamic port allocation instead of hardcoded port
63+
int dynamicPort = 0;
64+
try (ServerSocket serverSocket = new ServerSocket(0)) {
65+
dynamicPort = serverSocket.getLocalPort();
66+
} catch (IOException e) {
67+
throw new RuntimeException("Failed to get dynamic port", e);
68+
}
69+
nettyServerConfig.setServerListenPort(dynamicPort);
6170
nettyServer = new NettyRemotingServer(workingThreads, nettyServerConfig);
6271
UUIDGenerator.init(parameterParser.getServerNode());
6372
//log store mode : file、db

0 commit comments

Comments
 (0)