Skip to content

Commit 2e2ca55

Browse files
committed
feat: add test case
1 parent 5d3d2bd commit 2e2ca55

7 files changed

Lines changed: 394 additions & 0 deletions

File tree

trpc-core/src/test/java/com/tencent/trpc/core/cluster/RpcClusterClientManagerTest.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,18 @@ public void test() throws IllegalArgumentException, IllegalAccessException, NoSu
4949
RpcClusterClientManager.shutdownBackendConfig(backend);
5050
}
5151

52+
@Test
53+
public void testDebugLog() throws Exception {
54+
BackendConfig backendConfig = new BackendConfig();
55+
backendConfig.setIdleTimeout(100000);
56+
backendConfig.setNamingUrl("ip://127.0.0.1:8082");
57+
ProtocolConfigTest config = new ProtocolConfigTest();
58+
RpcClient rpcClient = RpcClusterClientManager.getOrCreateClient(backendConfig, config);
59+
Assert.assertNotNull(rpcClient);
60+
RpcClusterClientManager.scanUnusedClient();
61+
RpcClusterClientManager.shutdownBackendConfig(backendConfig);
62+
}
63+
5264
private static class ProtocolConfigTest extends ProtocolConfig {
5365

5466
@Override

trpc-core/src/test/java/com/tencent/trpc/core/cluster/def/DefClusterInvokerTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,4 +205,15 @@ public void testDoInvoke() {
205205
}
206206
}
207207

208+
@Test
209+
public void testDebugLog() {
210+
DefRequest defRequest = new DefRequest();
211+
RpcInvocation invocation = new RpcInvocation();
212+
invocation.setFunc("a");
213+
defRequest.setInvocation(invocation);
214+
consumerInvokerProxy.invoke(defRequest, new ServiceInstance());
215+
invocation.setFunc("n");
216+
consumerInvokerProxy.invoke(defRequest, new ServiceInstance());
217+
}
218+
208219
}

trpc-core/src/test/java/com/tencent/trpc/core/common/config/BackendConfigTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -410,6 +410,23 @@ public void testGenerateProtocolConfig() {
410410
assertEquals("tcp", protocolConfig.getNetwork());
411411
}
412412

413+
@Test
414+
public void testDebugLog() {
415+
ExtensionLoader.registerPlugin(new PluginConfig("attalog", Filter.class, RemoteLoggerTest.class));
416+
ExtensionLoader.registerPlugin(ThreadWorkerPool.newThreadWorkerPoolConfig("thread", 10, Boolean.FALSE));
417+
BackendConfig config = new BackendConfig();
418+
config.setNamingUrl("ip://127.0.0.1:9999");
419+
config.setWorkerPool("thread");
420+
config.setServiceInterface(GenericClient.class);
421+
config.init();
422+
try {
423+
assertNotNull(config);
424+
assertTrue(config.isInited());
425+
} finally {
426+
config.stop();
427+
}
428+
}
429+
413430
public static final class RemoteLoggerTest extends RemoteLoggerFilter {
414431

415432
@Override
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
/*
2+
* Tencent is pleased to support the open source community by making tRPC available.
3+
*
4+
* Copyright (C) 2023 Tencent.
5+
* All rights reserved.
6+
*
7+
* If you have downloaded a copy of the tRPC source code from Tencent,
8+
* please note that tRPC source code is licensed under the Apache 2.0 License,
9+
* A copy of the Apache 2.0 License can be found in the LICENSE file.
10+
*/
11+
12+
package com.tencent.trpc.core.extension;
13+
14+
import com.tencent.trpc.core.common.config.PluginConfig;
15+
import com.tencent.trpc.core.filter.spi.Filter;
16+
import com.tencent.trpc.core.rpc.Invoker;
17+
import com.tencent.trpc.core.rpc.Request;
18+
import com.tencent.trpc.core.rpc.Response;
19+
import java.util.concurrent.CompletionStage;
20+
import org.junit.After;
21+
import org.junit.Assert;
22+
import org.junit.Test;
23+
24+
public class ExtensionClassTest {
25+
26+
@After
27+
public void after() {
28+
ExtensionLoader.destroyAllPlugin();
29+
}
30+
31+
@Test
32+
public void testCreateInstance() {
33+
ExtensionLoader.registerPlugin(new PluginConfig("testFilter", Filter.class, TestFilter.class));
34+
ExtensionClass<Filter> extensionClass = ExtensionLoader.getExtensionLoader(Filter.class)
35+
.getExtensionClass("testFilter");
36+
Assert.assertNotNull(extensionClass);
37+
Filter instance = extensionClass.getExtInstance();
38+
Assert.assertNotNull(instance);
39+
Assert.assertTrue(instance instanceof TestFilter);
40+
}
41+
42+
@Test
43+
public void testDebugLog() {
44+
ExtensionLoader.registerPlugin(new PluginConfig("testFilter", Filter.class, TestFilter.class));
45+
ExtensionClass<Filter> extensionClass = ExtensionLoader.getExtensionLoader(Filter.class)
46+
.getExtensionClass("testFilter");
47+
Assert.assertNotNull(extensionClass);
48+
// 测试创建实例时的 debug 日志
49+
Filter instance = extensionClass.getExtInstance();
50+
Assert.assertNotNull(instance);
51+
// 再次获取实例,应该返回缓存的实例
52+
Filter instance2 = extensionClass.getExtInstance();
53+
Assert.assertSame(instance, instance2);
54+
}
55+
56+
public static class TestFilter implements Filter {
57+
58+
@Override
59+
public CompletionStage<Response> filter(Invoker<?> invoker, Request request) {
60+
return invoker.invoke(request);
61+
}
62+
}
63+
}

trpc-core/src/test/java/com/tencent/trpc/core/filter/ProviderFilterInvokerTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,19 @@ public void filterOrderedTest() {
101101
assertEquals("102,1,", r.getValue());
102102
}
103103

104+
@Test
105+
public void testDebugLog() {
106+
FilterManager.registerPlugin("ProviderInovkrMockFilter", ProviderInovkrMockFilter.class);
107+
ProviderConfig<Object> config = createProviderConfig();
108+
config.setFilters(Lists.newArrayList("ProviderInovkrMockFilter"));
109+
ProtocolConfig protoConfig = createProtoConfig();
110+
ProviderInvoker buildProviderChain = FilterChain.buildProviderChain(config,
111+
new ProviderInvokerMock(config, protoConfig));
112+
CompletionStage invoke = buildProviderChain.invoke(createRequest());
113+
Response r = (Response) (invoke.toCompletableFuture().join());
114+
Assert.assertNotNull(r);
115+
}
116+
104117
public RpcServerContext createServerContext() {
105118
RpcServerContext context = new RpcServerContext();
106119
return context;
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
/*
2+
* Tencent is pleased to support the open source community by making tRPC available.
3+
*
4+
* Copyright (C) 2023 Tencent.
5+
* All rights reserved.
6+
*
7+
* If you have downloaded a copy of the tRPC source code from Tencent,
8+
* please note that tRPC source code is licensed under the Apache 2.0 License,
9+
* A copy of the Apache 2.0 License can be found in the LICENSE file.
10+
*/
11+
12+
package com.tencent.trpc.core.trace;
13+
14+
import com.tencent.trpc.core.extension.ExtensionLoader;
15+
import com.tencent.trpc.core.logger.Logger;
16+
import com.tencent.trpc.core.logger.LoggerFactory;
17+
import com.tencent.trpc.core.rpc.Invoker;
18+
import com.tencent.trpc.core.rpc.Request;
19+
import com.tencent.trpc.core.rpc.Response;
20+
import com.tencent.trpc.core.rpc.RpcClientContext;
21+
import com.tencent.trpc.core.rpc.RpcContext;
22+
import com.tencent.trpc.core.rpc.RpcContextValueKeys;
23+
import com.tencent.trpc.core.rpc.RpcInvocation;
24+
import com.tencent.trpc.core.rpc.def.DefRequest;
25+
import com.tencent.trpc.core.rpc.def.DefResponse;
26+
import com.tencent.trpc.core.trace.spi.TracerFactory;
27+
import com.tencent.trpc.core.utils.RpcContextUtils;
28+
import io.opentracing.Span;
29+
import io.opentracing.SpanContext;
30+
import io.opentracing.Tracer;
31+
import io.opentracing.Tracer.SpanBuilder;
32+
import io.opentracing.noop.NoopSpan;
33+
import io.opentracing.noop.NoopTracerFactory;
34+
import java.net.InetSocketAddress;
35+
import java.util.HashMap;
36+
import java.util.Map;
37+
import java.util.concurrent.CompletableFuture;
38+
import org.junit.After;
39+
import org.junit.Before;
40+
import org.junit.Test;
41+
import org.junit.runner.RunWith;
42+
import org.powermock.api.mockito.PowerMockito;
43+
import org.powermock.core.classloader.annotations.PowerMockIgnore;
44+
import org.powermock.modules.junit4.PowerMockRunner;
45+
46+
@RunWith(PowerMockRunner.class)
47+
@PowerMockIgnore({"javax.management.*"})
48+
public class TracerClientFilterTest {
49+
50+
private TracerClientFilter filter = new TracerClientFilter() {
51+
52+
private final Logger logger = LoggerFactory.getLogger(TracerClientFilter.class);
53+
54+
@Override
55+
public String getPluginName() {
56+
return "tjg";
57+
}
58+
59+
@Override
60+
public Span start(SpanBuilder spanBuilder, RpcContext context, Invoker<?> invoker, Request request) {
61+
if (spanBuilder == null || request == null || request.getMeta() == null) {
62+
return null;
63+
}
64+
return spanBuilder.start();
65+
}
66+
67+
@Override
68+
public void finish(Span span, Request request, Response response, Throwable t) {
69+
if (span == null) {
70+
return;
71+
}
72+
span.finish();
73+
}
74+
75+
@Override
76+
public SpanContext extract(Tracer tracer, Map<String, Object> attachments) {
77+
return null;
78+
}
79+
80+
@Override
81+
public Map<String, Object> inject(Tracer tracer, Span span) {
82+
if (logger.isDebugEnabled()) {
83+
logger.debug("inject tracer:{},span:{}", tracer, span);
84+
}
85+
return new HashMap<>();
86+
}
87+
};
88+
89+
@Before
90+
public void before() {
91+
TracerFactoryManager.getManager().registPlugin("mtest", TestTraceFactory.class);
92+
}
93+
94+
@After
95+
public void after() {
96+
ExtensionLoader.destroyAllPlugin();
97+
}
98+
99+
@Test
100+
public void testNormalSpan() {
101+
RpcClientContext context = new RpcClientContext();
102+
RpcContextUtils.putValueMapValue(context, RpcContextValueKeys.CTX_TRACE_SPAN, NoopSpan.INSTANCE);
103+
RpcContextUtils.putValueMapValue(context, RpcContextValueKeys.CTX_TRACER, NoopTracerFactory.create());
104+
Request request = new DefRequest();
105+
request.setContext(context);
106+
RpcInvocation invocation = new RpcInvocation();
107+
invocation.setRpcServiceName("rpcServiceName");
108+
invocation.setRpcMethodName("rpcMethodName");
109+
request.getMeta().setRemoteAddress(InetSocketAddress.createUnresolved("127.0.0.1", 8888));
110+
request.getMeta().setLocalAddress(InetSocketAddress.createUnresolved("127.0.0.1", 9999));
111+
request.setInvocation(invocation);
112+
CompletableFuture<Response> future = new CompletableFuture<Response>();
113+
Response rsp = new DefResponse();
114+
future.complete(rsp);
115+
Invoker<?> invoker = (Invoker<?>) PowerMockito.mock(Invoker.class);
116+
PowerMockito.when(invoker.invoke(request)).thenReturn(future);
117+
filter.filter(invoker, request);
118+
}
119+
120+
@Test
121+
public void testDebugLog() {
122+
RpcClientContext context = new RpcClientContext();
123+
Request request = new DefRequest();
124+
request.setContext(context);
125+
RpcInvocation invocation = new RpcInvocation();
126+
invocation.setRpcServiceName("rpcServiceName");
127+
invocation.setRpcMethodName("rpcMethodName");
128+
request.getMeta().setRemoteAddress(InetSocketAddress.createUnresolved("127.0.0.1", 8888));
129+
request.getMeta().setLocalAddress(InetSocketAddress.createUnresolved("127.0.0.1", 9999));
130+
request.setInvocation(invocation);
131+
CompletableFuture<Response> future = new CompletableFuture<Response>();
132+
Response rsp = new DefResponse();
133+
future.complete(rsp);
134+
Invoker<?> invoker = (Invoker<?>) PowerMockito.mock(Invoker.class);
135+
PowerMockito.when(invoker.invoke(request)).thenReturn(future);
136+
filter.filter(invoker, request);
137+
}
138+
139+
private static class TestTraceFactory implements TracerFactory {
140+
141+
@Override
142+
public Tracer getTracer(String serverName, Integer port) {
143+
return NoopTracerFactory.create();
144+
}
145+
}
146+
}

0 commit comments

Comments
 (0)