From 03da6bc162b4c7f9f859a05e6c002bad3af498b5 Mon Sep 17 00:00:00 2001 From: passer Date: Wed, 26 May 2021 08:22:19 +0800 Subject: [PATCH 1/3] Add unit test for TraceTelnetHandler (#7843) --- .../qos/legacy/TraceTelnetHandlerTest.java | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java diff --git a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java new file mode 100644 index 00000000000..8b3e878e133 --- /dev/null +++ b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java @@ -0,0 +1,81 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.dubbo.qos.legacy; + +import org.apache.dubbo.common.URL; +import org.apache.dubbo.qos.legacy.service.DemoService; +import org.apache.dubbo.remoting.Channel; +import org.apache.dubbo.remoting.telnet.TelnetHandler; +import org.apache.dubbo.rpc.Invoker; +import org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol; +import org.apache.dubbo.rpc.protocol.dubbo.filter.TraceFilter; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.lang.reflect.Field; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +import static org.mockito.BDDMockito.given; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.reset; + +public class TraceTelnetHandlerTest { + + private TelnetHandler handler; + private Channel mockChannel; + private Invoker mockInvoker; + private URL url = URL.valueOf("dubbo://127.0.0.1:20884/demo"); + + @BeforeEach + public void setUp() { + handler = new TraceTelnetHandler(); + mockChannel = mock(Channel.class); + mockInvoker = mock(Invoker.class); + given(mockInvoker.getInterface()).willReturn(DemoService.class); + given(mockInvoker.getUrl()).willReturn(url); + } + + @AfterEach + public void tearDown() { + reset(mockChannel, mockInvoker); + ProtocolUtils.closeAll(); + } + + @Test + public void test() throws Exception { + String method = "sayHello"; + String message = "org.apache.dubbo.qos.legacy.service.DemoService sayHello 1"; + Class type = DemoService.class; + + DubboProtocol.getDubboProtocol().export(mockInvoker); + handler.telnet(mockChannel, message); + + TraceFilter.addTracer(type, method, mockChannel, 100); + String key = method != null && method.length() > 0 ? type.getName() + "." + method : type.getName(); + Field tracers = TraceFilter.class.getDeclaredField("TRACERS"); + tracers.setAccessible(true); + ConcurrentHashMap> map = (ConcurrentHashMap>) tracers.get(new ConcurrentHashMap>()); + + Set channels = map.getOrDefault(key, null); + Assertions.assertNotNull(channels); + + Assertions.assertTrue(channels.contains(mockChannel)); + } +} From 79ebf89ca9d989a1f1379b66b6474ed0f5704828 Mon Sep 17 00:00:00 2001 From: passer Date: Wed, 26 May 2021 08:24:56 +0800 Subject: [PATCH 2/3] Optimize (#7843) --- .../org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java index 8b3e878e133..63202a92671 100644 --- a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java +++ b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java @@ -71,7 +71,8 @@ public void test() throws Exception { String key = method != null && method.length() > 0 ? type.getName() + "." + method : type.getName(); Field tracers = TraceFilter.class.getDeclaredField("TRACERS"); tracers.setAccessible(true); - ConcurrentHashMap> map = (ConcurrentHashMap>) tracers.get(new ConcurrentHashMap>()); + ConcurrentHashMap> map = + (ConcurrentHashMap>) tracers.get(new ConcurrentHashMap>()); Set channels = map.getOrDefault(key, null); Assertions.assertNotNull(channels); From 53694fe839a374eb4934ac987e42fa22bb5c4e3a Mon Sep 17 00:00:00 2001 From: passer Date: Wed, 26 May 2021 18:54:32 +0800 Subject: [PATCH 3/3] Optimize TraceTelnetHandlerTest (#7843) --- .../org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java index 63202a92671..13c626e7692 100644 --- a/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java +++ b/dubbo-plugin/dubbo-qos/src/test/java/org/apache/dubbo/qos/legacy/TraceTelnetHandlerTest.java @@ -59,7 +59,7 @@ public void tearDown() { } @Test - public void test() throws Exception { + public void testTraceTelnetAddTracer() throws Exception { String method = "sayHello"; String message = "org.apache.dubbo.qos.legacy.service.DemoService sayHello 1"; Class type = DemoService.class; @@ -67,8 +67,7 @@ public void test() throws Exception { DubboProtocol.getDubboProtocol().export(mockInvoker); handler.telnet(mockChannel, message); - TraceFilter.addTracer(type, method, mockChannel, 100); - String key = method != null && method.length() > 0 ? type.getName() + "." + method : type.getName(); + String key = type.getName() + "." + method; Field tracers = TraceFilter.class.getDeclaredField("TRACERS"); tracers.setAccessible(true); ConcurrentHashMap> map =