Skip to content

Commit 61c9bd2

Browse files
authored
trpc-admin: migrate junit4 to junit5 and upgrade resteasy (#118)
* trpc-admin: migrate junit4 to junit5 and upgrade resteasy * feat(admin): Upgrade Jakarta EE dependencies for RESTEasy 6.x compatibility
1 parent 13403f7 commit 61c9bd2

28 files changed

+263
-248
lines changed

trpc-admin/trpc-admin-default/pom.xml

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,22 +46,20 @@
4646
</dependency>
4747
<dependency>
4848
<groupId>org.jboss.resteasy</groupId>
49-
<artifactId>resteasy-netty4</artifactId>
50-
<exclusions>
51-
<exclusion>
52-
<groupId>io.netty</groupId>
53-
<artifactId>netty-all</artifactId>
54-
</exclusion>
55-
<exclusion>
56-
<groupId>jakarta.validation</groupId>
57-
<artifactId>jakarta.validation-api</artifactId>
58-
</exclusion>
59-
</exclusions>
49+
<artifactId>resteasy-undertow</artifactId>
6050
</dependency>
6151
<dependency>
6252
<groupId>jakarta.validation</groupId>
6353
<artifactId>jakarta.validation-api</artifactId>
6454
</dependency>
55+
<dependency>
56+
<groupId>jakarta.activation</groupId>
57+
<artifactId>jakarta.activation-api</artifactId>
58+
</dependency>
59+
<dependency>
60+
<groupId>org.eclipse.angus</groupId>
61+
<artifactId>angus-activation</artifactId>
62+
</dependency>
6563
<dependency>
6664
<groupId>org.jboss.resteasy</groupId>
6765
<artifactId>resteasy-jackson2-provider</artifactId>
@@ -76,5 +74,10 @@
7674
<artifactId>spring-test</artifactId>
7775
<scope>test</scope>
7876
</dependency>
77+
<dependency>
78+
<groupId>org.mockito</groupId>
79+
<artifactId>mockito-core</artifactId>
80+
<scope>test</scope>
81+
</dependency>
7982
</dependencies>
8083
</project>

trpc-admin/trpc-admin-default/src/main/java/com/tencent/trpc/admin/impl/CommandAdmin.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
import java.util.ArrayList;
2222
import java.util.Collection;
2323
import java.util.List;
24-
import javax.ws.rs.GET;
25-
import javax.ws.rs.Path;
26-
import javax.ws.rs.Produces;
27-
import javax.ws.rs.core.MediaType;
24+
import jakarta.ws.rs.GET;
25+
import jakarta.ws.rs.Path;
26+
import jakarta.ws.rs.Produces;
27+
import jakarta.ws.rs.core.MediaType;
2828

2929
/**
3030
* Command Operation Management

trpc-admin/trpc-admin-default/src/main/java/com/tencent/trpc/admin/impl/ConfigAdmin.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
import com.tencent.trpc.admin.dto.ConfigOverviewDto;
1616
import com.tencent.trpc.core.admin.spi.Admin;
1717
import com.tencent.trpc.core.common.ConfigManager;
18-
import javax.ws.rs.GET;
19-
import javax.ws.rs.Path;
20-
import javax.ws.rs.Produces;
21-
import javax.ws.rs.core.MediaType;
18+
import jakarta.ws.rs.GET;
19+
import jakarta.ws.rs.Path;
20+
import jakarta.ws.rs.Produces;
21+
import jakarta.ws.rs.core.MediaType;
2222

2323
@Path("/cmds")
2424
public class ConfigAdmin implements Admin {

trpc-admin/trpc-admin-default/src/main/java/com/tencent/trpc/admin/impl/FrameOverviewAdmin.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@
1414
import com.tencent.trpc.admin.dto.VersionDto;
1515
import com.tencent.trpc.core.admin.spi.Admin;
1616
import com.tencent.trpc.core.common.Version;
17-
import javax.ws.rs.GET;
18-
import javax.ws.rs.Path;
19-
import javax.ws.rs.Produces;
20-
import javax.ws.rs.core.MediaType;
17+
import jakarta.ws.rs.GET;
18+
import jakarta.ws.rs.Path;
19+
import jakarta.ws.rs.Produces;
20+
import jakarta.ws.rs.core.MediaType;
2121

2222
@Path("/version")
2323
public class FrameOverviewAdmin implements Admin {

trpc-admin/trpc-admin-default/src/main/java/com/tencent/trpc/admin/impl/LoggerAdmin.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
import java.util.List;
2121
import java.util.Map;
2222
import java.util.Objects;
23-
import javax.ws.rs.FormParam;
24-
import javax.ws.rs.GET;
25-
import javax.ws.rs.PUT;
26-
import javax.ws.rs.Path;
27-
import javax.ws.rs.PathParam;
28-
import javax.ws.rs.Produces;
29-
import javax.ws.rs.core.MediaType;
23+
import jakarta.ws.rs.FormParam;
24+
import jakarta.ws.rs.GET;
25+
import jakarta.ws.rs.PUT;
26+
import jakarta.ws.rs.Path;
27+
import jakarta.ws.rs.PathParam;
28+
import jakarta.ws.rs.Produces;
29+
import jakarta.ws.rs.core.MediaType;
3030
import org.apache.commons.lang3.EnumUtils;
3131

3232
/**

trpc-admin/trpc-admin-default/src/main/java/com/tencent/trpc/admin/impl/RpcStatsAdmin.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@
3434
import java.util.HashMap;
3535
import java.util.List;
3636
import java.util.Map;
37-
import javax.ws.rs.GET;
38-
import javax.ws.rs.Path;
39-
import javax.ws.rs.Produces;
40-
import javax.ws.rs.core.MediaType;
37+
import jakarta.ws.rs.GET;
38+
import jakarta.ws.rs.Path;
39+
import jakarta.ws.rs.Produces;
40+
import jakarta.ws.rs.core.MediaType;
4141
import org.apache.commons.collections4.CollectionUtils;
4242

4343
/**

trpc-admin/trpc-admin-default/src/main/java/com/tencent/trpc/admin/impl/WorkerPoolAdmin.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@
1818
import java.util.HashMap;
1919
import java.util.List;
2020
import java.util.Map;
21-
import javax.ws.rs.GET;
22-
import javax.ws.rs.Path;
23-
import javax.ws.rs.Produces;
24-
import javax.ws.rs.core.MediaType;
21+
import jakarta.ws.rs.GET;
22+
import jakarta.ws.rs.Path;
23+
import jakarta.ws.rs.Produces;
24+
import jakarta.ws.rs.core.MediaType;
2525

2626
@Path("/cmds/workerpool")
2727
public class WorkerPoolAdmin implements Admin {

trpc-admin/trpc-admin-default/src/main/java/com/tencent/trpc/admin/service/DefaultAdminServiceImpl.java

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,10 @@
2424
import com.tencent.trpc.core.stat.MetricStatFactory;
2525
import java.util.Collection;
2626
import java.util.List;
27-
import javax.ws.rs.Path;
27+
import io.undertow.Undertow;
28+
import jakarta.ws.rs.Path;
2829
import org.jboss.resteasy.core.ResteasyDeploymentImpl;
29-
import org.jboss.resteasy.plugins.server.netty.NettyJaxrsServer;
30+
import org.jboss.resteasy.plugins.server.undertow.UndertowJaxrsServer;
3031
import org.jboss.resteasy.spi.Registry;
3132

3233
/**
@@ -36,9 +37,9 @@ public class DefaultAdminServiceImpl implements AdminService {
3637

3738
private static final Logger LOGGER = LoggerFactory.getLogger(DefaultAdminServiceImpl.class);
3839
/**
39-
* netty jar server
40+
* undertow jaxrs server
4041
*/
41-
private NettyJaxrsServer adminRestServer;
42+
private UndertowJaxrsServer adminRestServer;
4243
private ServerConfig serverConfig;
4344
/**
4445
* Lifecycle class
@@ -70,19 +71,23 @@ protected class LifecycleObj extends LifecycleBase {
7071
@Override
7172
protected void initInternal() throws Exception {
7273
super.initInternal();
73-
adminRestServer = new NettyJaxrsServer();
74-
AdminConfig adminConfig = serverConfig.getAdminConfig();
75-
adminRestServer.setHostname(adminConfig.getAdminIp());
76-
adminRestServer.setPort(adminConfig.getAdminPort());
77-
adminRestServer.setDeployment(new ResteasyDeploymentImpl());
74+
adminRestServer = new UndertowJaxrsServer();
7875
}
7976

8077
@Override
8178
protected void startInternal() {
8279
try {
8380
super.startInternal();
84-
adminRestServer.start();
85-
Registry registry = adminRestServer.getDeployment().getRegistry();
81+
AdminConfig adminConfig = serverConfig.getAdminConfig();
82+
adminRestServer.start(Undertow.builder()
83+
.addHttpListener(adminConfig.getAdminPort(), adminConfig.getAdminIp()));
84+
ResteasyDeploymentImpl deployment = new ResteasyDeploymentImpl();
85+
deployment.start();
86+
adminRestServer.deploy(adminRestServer.undertowDeployment(deployment)
87+
.setContextPath("/")
88+
.setDeploymentName("AdminService")
89+
.setClassLoader(DefaultAdminServiceImpl.class.getClassLoader()));
90+
Registry registry = deployment.getRegistry();
8691
ExtensionLoader<Admin> extensionLoader = ExtensionLoader.getExtensionLoader(Admin.class);
8792
Collection<ExtensionClass<Admin>> extensionClasses = extensionLoader.getAllExtensionClass();
8893
for (ExtensionClass<Admin> extensionClass : extensionClasses) {

trpc-admin/trpc-admin-default/src/test/java/com/tencent/trpc/admin/AdminIntegrationTest.java

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -25,34 +25,35 @@
2525
import com.tencent.trpc.core.common.config.AdminConfig;
2626
import com.tencent.trpc.core.utils.JsonUtils;
2727
import java.util.List;
28-
import org.junit.Assert;
29-
import org.junit.Before;
30-
import org.junit.Test;
31-
import org.junit.runner.RunWith;
28+
import org.junit.jupiter.api.Assertions;
29+
import org.junit.jupiter.api.BeforeEach;
30+
import org.junit.jupiter.api.Test;
31+
import org.junit.jupiter.api.extension.ExtendWith;
3232
import org.springframework.boot.test.context.SpringBootTest;
3333
import org.springframework.test.context.ActiveProfiles;
34-
import org.springframework.test.context.junit4.SpringRunner;
34+
import org.springframework.test.context.junit.jupiter.SpringExtension;
3535

36-
@RunWith(SpringRunner.class)
36+
@ExtendWith(SpringExtension.class)
3737
@ActiveProfiles("admin")
3838
@SpringBootTest(classes = TrpcServerApplication.class)
3939
public class AdminIntegrationTest {
4040

4141
private String adminAddress;
4242

43-
@Before
43+
@BeforeEach
4444
public void before() {
4545
final AdminConfig adminConfig = ConfigManager.getInstance().getServerConfig().getAdminConfig();
4646
adminAddress = new StringBuffer(adminConfig.getAdminIp()).append(":").append(adminConfig.getAdminPort())
4747
.toString();
48+
System.out.println("adminAddress:" + adminAddress);
4849
}
4950

5051
@Test
5152
public void testVersion() {
5253
String[] cmd = {"curl", "http://" + adminAddress + "/version"};
5354
String versionInfo = ShellUtils.execute(cmd);
5455
VersionDto versionDto = JsonUtils.fromJson(versionInfo, VersionDto.class);
55-
Assert.assertEquals(Version.version(), versionDto.getVersion());
56+
Assertions.assertEquals(Version.version(), versionDto.getVersion());
5657
}
5758

5859
@Test
@@ -61,19 +62,19 @@ public void testUpdateLoglevel() {
6162
String[] set2DebugCmd = {"curl", "-XPUT", "http://" + adminAddress + "/cmds/loglevel/ROOT", "-d",
6263
"value=DEBUG"};
6364
String set2DebugResult = ShellUtils.execute(set2DebugCmd);
64-
System.out.println(set2DebugResult);
65+
System.out.println("set2DebugResult: " + set2DebugResult);
6566
final LoggerLevelRevisedDto levelDebugRevisedDto = JsonUtils.fromJson(set2DebugResult,
6667
LoggerLevelRevisedDto.class);
6768

68-
Assert.assertEquals(CommonDto.SUCCESS, levelDebugRevisedDto.getErrorcode());
69-
Assert.assertEquals("DEBUG", (levelDebugRevisedDto.getLevel()));
69+
Assertions.assertEquals(CommonDto.SUCCESS, levelDebugRevisedDto.getErrorcode());
70+
Assertions.assertEquals("DEBUG", (levelDebugRevisedDto.getLevel()));
7071

7172
//查看修改后的结果
7273
String[] logLevelCmd = {"curl", "http://" + adminAddress + "/cmds/loglevel"};
7374
String logLevelInfo = ShellUtils.execute(logLevelCmd);
7475
LoggerLevelDto dto = JsonUtils.fromJson(logLevelInfo, LoggerLevelDto.class);
75-
Assert.assertEquals(CommonDto.SUCCESS, dto.getErrorcode());
76-
Assert.assertTrue(dto.getLogger().stream()
76+
Assertions.assertEquals(CommonDto.SUCCESS, dto.getErrorcode());
77+
Assertions.assertTrue(dto.getLogger().stream()
7778
.anyMatch(log -> "ROOT".equals(log.getLoggerName()) && "DEBUG".equals(log.getLevel())));
7879

7980
//修改
@@ -82,63 +83,64 @@ public void testUpdateLoglevel() {
8283
LoggerLevelRevisedDto levelInfoRevisedDto = JsonUtils.fromJson(set2InfoResult,
8384
LoggerLevelRevisedDto.class);
8485

85-
Assert.assertEquals(CommonDto.SUCCESS, levelInfoRevisedDto.getErrorcode());
86-
Assert.assertEquals("INFO", levelInfoRevisedDto.getLevel());
86+
Assertions.assertEquals(CommonDto.SUCCESS, levelInfoRevisedDto.getErrorcode());
87+
Assertions.assertEquals("INFO", levelInfoRevisedDto.getLevel());
8788
}
8889

8990
@Test
9091
public void testLogLevel() {
9192
String[] cmd = {"curl", "http://" + adminAddress + "/cmds/loglevel"};
9293
String logLevelInfo = ShellUtils.execute(cmd);
94+
System.out.println(logLevelInfo);
9395
LoggerLevelDto dto = JsonUtils.fromJson(logLevelInfo, LoggerLevelDto.class);
94-
Assert.assertEquals(CommonDto.SUCCESS, dto.getErrorcode());
95-
Assert.assertTrue(dto.getLogger().stream()
96+
Assertions.assertEquals(CommonDto.SUCCESS, dto.getErrorcode());
97+
Assertions.assertTrue(dto.getLogger().stream()
9698
.anyMatch(log -> "ROOT".equals(log.getLoggerName()) && "INFO".equals(log.getLevel())));
9799
}
98100

99101
@Test
100102
public void testWorkerPool() {
101103
String[] cmd = {"curl", "http://" + adminAddress + "/cmds/workerpool/info"};
102104
String workPoolInfo = ShellUtils.execute(cmd);
103-
Assert.assertTrue("{\"errorcode\":\"0\",\"message\":\"\",\"workerPoolInfo\":{}}".equals(workPoolInfo));
105+
Assertions.assertTrue("{\"errorcode\":\"0\",\"message\":\"\",\"workerPoolInfo\":{}}".equals(workPoolInfo));
104106
}
105107

106108
@Test
107109
public void testConfig() {
108110
String[] cmd = {"curl", "http://" + adminAddress + "/cmds/config"};
109111
String configInfo = ShellUtils.execute(cmd);
110112
ConfigOverviewDto configOverviewDto = JsonUtils.fromJson(configInfo, ConfigOverviewDto.class);
111-
Assert.assertEquals(CommonDto.SUCCESS, configOverviewDto.getErrorcode());
112-
Assert.assertEquals("integration-test-admin", configOverviewDto.getContent().getServer().getApp());
113+
Assertions.assertEquals(CommonDto.SUCCESS, configOverviewDto.getErrorcode());
114+
Assertions.assertEquals("integration-test-admin", configOverviewDto.getContent().getServer().getApp());
113115
}
114116

115117
@Test
116118
public void testStatRpc() {
117119
String[] cmd = {"curl", "http://" + adminAddress + "/cmds/stats/rpc"};
118120
String rpcStats = ShellUtils.execute(cmd);
119121
RpcStatsDto rpcStatsDto = JsonUtils.fromJson(rpcStats, RpcStatsDto.class);
120-
Assert.assertEquals(CommonDto.SUCCESS, rpcStatsDto.getErrorcode());
121-
Assert.assertEquals(Version.version(), rpcStatsDto.getRpcVersion());
122-
Assert.assertEquals(0, rpcStatsDto.getRpcServiceCount().intValue());
122+
Assertions.assertEquals(CommonDto.SUCCESS, rpcStatsDto.getErrorcode());
123+
Assertions.assertEquals(Version.version(), rpcStatsDto.getRpcVersion());
124+
Assertions.assertEquals(0, rpcStatsDto.getRpcServiceCount().intValue());
123125
}
124126

125127
@Test
126128
public void testCustomAdmin() {
127129
String[] cmd = {"curl", "http://" + adminAddress + "/cmds/test"};
128130
String testInfo = ShellUtils.execute(cmd);
129131
TestDto rpcStatsDto = JsonUtils.fromJson(testInfo, TestDto.class);
130-
Assert.assertEquals(CommonDto.SUCCESS, rpcStatsDto.getErrorcode());
131-
Assert.assertEquals("hello world!", rpcStatsDto.getTestResult());
132+
Assertions.assertEquals(CommonDto.SUCCESS, rpcStatsDto.getErrorcode());
133+
Assertions.assertEquals("hello world!", rpcStatsDto.getTestResult());
132134
}
133135

134136
@Test
135137
public void testCmds() {
136138
String[] cmd = {"curl", "http://" + adminAddress + "/cmds"};
137139
String cmdResult = ShellUtils.execute(cmd);
138140
CommandDto commandDto = JsonUtils.fromJson(cmdResult, CommandDto.class);
139-
Assert.assertEquals(CommonDto.SUCCESS, commandDto.getErrorcode());
141+
Assertions.assertEquals(CommonDto.SUCCESS, commandDto.getErrorcode());
140142
List<String> commands = commandDto.getCmds();
141-
Assert.assertTrue(commands.contains("/cmds/loglevel") && commands.contains("/cmds/loglevel/{logname}")
143+
Assertions.assertTrue(commands.contains("/cmds/loglevel") && commands.contains("/cmds/loglevel/{logname}")
142144
&& commands.contains("/version") && commands.contains("/cmds") && commands.contains("/cmds/config")
143145
&& commands.contains("/cmds/stats/rpc") && commands.contains("/cmds/workerpool/info")
144146
&& commands.contains("/cmds/test"));

trpc-admin/trpc-admin-default/src/test/java/com/tencent/trpc/admin/AdminTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,18 @@
1717
import com.tencent.trpc.core.exception.LifecycleException;
1818
import com.tencent.trpc.core.extension.ExtensionClass;
1919
import com.tencent.trpc.core.extension.ExtensionLoader;
20-
import org.junit.After;
21-
import org.junit.Assert;
22-
import org.junit.Before;
23-
import org.junit.Test;
20+
import org.junit.jupiter.api.AfterEach;
21+
import org.junit.jupiter.api.Assertions;
22+
import org.junit.jupiter.api.BeforeEach;
23+
import org.junit.jupiter.api.Test;
2424
import org.slf4j.Logger;
2525
import org.slf4j.LoggerFactory;
2626

2727
public class AdminTest {
2828

2929
private static final String LOCAL_HOST = "127.0.0.1";
3030

31-
@After
31+
@AfterEach
3232
public void after() {
3333
ExtensionLoader.destroyAllPlugin();
3434
}
@@ -57,7 +57,7 @@ public void testStartFail() {
5757
adminService2.stop();
5858
}
5959
}
60-
Assert.assertTrue(exception != null && exception instanceof LifecycleException);
60+
Assertions.assertTrue(exception != null && exception instanceof LifecycleException);
6161
}
6262

6363
private AdminService getAdminService(String ip, int adminPort) {

0 commit comments

Comments
 (0)