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

liujun pushed a commit to branch 3.x-dev
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/3.x-dev by this push:
     new 91554bc  Fix problem caused by merge in InvokerTelnetHandlerTest
91554bc is described below

commit 91554bc84b8a1f022f6430a8767739673ac60449
Author: ken.lj <[email protected]>
AuthorDate: Thu Mar 28 11:02:17 2019 +0800

    Fix problem caused by merge in InvokerTelnetHandlerTest
---
 .../dubbo/telnet/InvokerTelnetHandlerTest.java     | 211 +++++++++++++--------
 1 file changed, 136 insertions(+), 75 deletions(-)

diff --git 
a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java
 
b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java
index c8029c7..a947829 100644
--- 
a/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java
+++ 
b/dubbo-rpc/dubbo-rpc-dubbo/src/test/java/org/apache/dubbo/rpc/protocol/dubbo/telnet/InvokerTelnetHandlerTest.java
@@ -16,8 +16,10 @@
  */
 package org.apache.dubbo.rpc.protocol.dubbo.telnet;
 
+import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.utils.NetUtils;
 import org.apache.dubbo.remoting.Channel;
+import org.apache.dubbo.remoting.ChannelHandler;
 import org.apache.dubbo.remoting.RemotingException;
 import org.apache.dubbo.remoting.telnet.TelnetHandler;
 import org.apache.dubbo.rpc.model.ApplicationModel;
@@ -30,18 +32,23 @@ import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
+import java.net.InetSocketAddress;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assertions.fail;
 import static org.mockito.BDDMockito.given;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 
 /**
- * CountTelnetHandlerTest.java
+ * InvokeTelnetHandlerTest.java
  */
 public class InvokerTelnetHandlerTest {
 
     private static TelnetHandler invoke = new InvokeTelnetHandler();
+    private static TelnetHandler select = new SelectTelnetHandler();
     private Channel mockChannel;
 
     @BeforeEach
@@ -56,136 +63,104 @@ public class InvokerTelnetHandlerTest {
 
     @SuppressWarnings("unchecked")
     @Test
-    public void testInvokeDefaultSService() throws RemotingException {
+    public void testInvokeDefaultService() throws RemotingException {
         mockChannel = mock(Channel.class);
-        
given(mockChannel.getAttribute("telnet.service")).willReturn("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService");
+        
given(mockChannel.getAttribute("telnet.service")).willReturn(DemoService.class.getName());
         
given(mockChannel.getLocalAddress()).willReturn(NetUtils.toAddress("127.0.0.1:5555"));
         
given(mockChannel.getRemoteAddress()).willReturn(NetUtils.toAddress("127.0.0.1:20886"));
 
         ProviderModel providerModel = new 
ProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", 
"Dubbo", "1.0.0", new DemoServiceImpl(), DemoService.class);
-        
ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService",
 providerModel);
+        ApplicationModel.initProviderModel(DemoService.class.getName(), 
providerModel);
 
-        String result = invoke.telnet(mockChannel, "DemoService.echo(\"ok\")");
-        assertTrue(result.contains("Use default service 
org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n\"ok\"\r\n"));
+        String result = invoke.telnet(mockChannel, "echo(\"ok\")");
+        assertTrue(result.contains("result: \"ok\""));
     }
 
     @SuppressWarnings("unchecked")
     @Test
-    public void testInvokeByPassingNullValue() throws RemotingException {
+    public void testInvokeWithSpecifyService() throws RemotingException {
         mockChannel = mock(Channel.class);
-        
given(mockChannel.getAttribute("telnet.service")).willReturn("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService");
+        given(mockChannel.getAttribute("telnet.service")).willReturn(null);
         
given(mockChannel.getLocalAddress()).willReturn(NetUtils.toAddress("127.0.0.1:5555"));
         
given(mockChannel.getRemoteAddress()).willReturn(NetUtils.toAddress("127.0.0.1:20886"));
 
         ProviderModel providerModel = new 
ProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", 
"Dubbo", "1.0.0", new DemoServiceImpl(), DemoService.class);
         
ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService",
 providerModel);
 
-        // pass null value to parameter of primitive type
-        try {
-            invoke.telnet(mockChannel, "DemoService.add(null, 2)");
-            fail("It should cause a NullPointerException by the above code.");
-        } catch (NullPointerException ex) {
-            String message = ex.getMessage();
-            assertEquals("The type of No.1 parameter is primitive(int), but 
the value passed is null.", message);
-        }
-
-        try {
-            invoke.telnet(mockChannel, "DemoService.add(1, null)");
-            fail("It should cause a NullPointerException by the above code.");
-        } catch (NullPointerException ex) {
-            String message = ex.getMessage();
-            assertEquals("The type of No.2 parameter is primitive(long), but 
the value passed is null.", message);
-        }
-
-        // pass null value to parameter of object type
-        try {
-            invoke.telnet(mockChannel, "DemoService.sayHello(null)");
-        } catch (NullPointerException ex) {
-            fail("It shouldn't cause a NullPointerException by the above 
code.");
-        }
+        String result = invoke.telnet(mockChannel, "DemoService.echo(\"ok\")");
+        assertTrue(result.contains("result: \"ok\""));
     }
 
+    @SuppressWarnings("unchecked")
     @Test
-    public void testInvokeByPassingEnumValue() throws RemotingException {
+    public void testInvokeByPassingNullValue() {
         mockChannel = mock(Channel.class);
-        given(mockChannel.getAttribute("telnet.service")).willReturn(null);
+        
given(mockChannel.getAttribute("telnet.service")).willReturn(DemoService.class.getName());
         
given(mockChannel.getLocalAddress()).willReturn(NetUtils.toAddress("127.0.0.1:5555"));
         
given(mockChannel.getRemoteAddress()).willReturn(NetUtils.toAddress("127.0.0.1:20886"));
 
         ProviderModel providerModel = new 
ProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", 
"Dubbo", "1.0.0", new DemoServiceImpl(), DemoService.class);
         
ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService",
 providerModel);
 
-        String result = invoke.telnet(mockChannel, "getType(\"High\")");
-        assertTrue(result.contains("High"));
+        // pass null value to parameter of primitive type
+        try {
+            invoke.telnet(mockChannel, "sayHello(null)");
+        } catch (Exception ex) {
+            assertTrue(ex instanceof NullPointerException);
+        }
     }
 
-
-    @SuppressWarnings("unchecked")
     @Test
-    public void testComplexParamWithoutSpecifyParamType() throws 
RemotingException {
+    public void testInvokeByPassingEnumValue() throws RemotingException {
         mockChannel = mock(Channel.class);
-        
given(mockChannel.getAttribute("telnet.service")).willReturn("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService");
+        given(mockChannel.getAttribute("telnet.service")).willReturn(null);
         
given(mockChannel.getLocalAddress()).willReturn(NetUtils.toAddress("127.0.0.1:5555"));
         
given(mockChannel.getRemoteAddress()).willReturn(NetUtils.toAddress("127.0.0.1:20886"));
 
         ProviderModel providerModel = new 
ProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", 
"Dubbo", "1.0.0", new DemoServiceImpl(), DemoService.class);
         
ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService",
 providerModel);
 
-        // pass json value to parameter of Person type
-
-        String result = invoke.telnet(mockChannel, 
"DemoService.getPerson({\"name\":\"zhangsan\",\"age\":12})");
-        assertTrue(result.contains("No such method getPerson in service 
DemoService"));
+        String result = invoke.telnet(mockChannel, "getType(\"High\")");
+        assertTrue(result.contains("result: \"High\""));
     }
 
+
     @SuppressWarnings("unchecked")
     @Test
-    public void testComplexParamSpecifyParamType() throws RemotingException {
+    public void testOverriddenMethodWithSpecifyParamType() throws 
RemotingException {
         mockChannel = mock(Channel.class);
-        
given(mockChannel.getAttribute("telnet.service")).willReturn("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService");
+        
given(mockChannel.getAttribute("telnet.service")).willReturn(DemoService.class.getName());
         
given(mockChannel.getLocalAddress()).willReturn(NetUtils.toAddress("127.0.0.1:5555"));
         
given(mockChannel.getRemoteAddress()).willReturn(NetUtils.toAddress("127.0.0.1:20886"));
 
         ProviderModel providerModel = new 
ProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", 
"Dubbo", "1.0.0", new DemoServiceImpl(), DemoService.class);
         
ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService",
 providerModel);
 
-        // pass json value to parameter of Person type and specify it's type
-        // one parameter with type of Person
-        String result = invoke.telnet(mockChannel, 
"DemoService.getPerson({\"name\":\"zhangsan\",\"age\":12}) -p 
org.apache.dubbo.rpc.protocol.dubbo.support.Person");
-        assertTrue(result.contains("Use default service 
org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n1\r\n"));
-
-        // two parameter with type of Person
-        result = invoke.telnet(mockChannel, 
"DemoService.getPerson({\"name\":\"zhangsan\",\"age\":12},{\"name\":\"lisi\",\"age\":12})
 " +
-                "-p org.apache.dubbo.rpc.protocol.dubbo.support.Person " +
-                "org.apache.dubbo.rpc.protocol.dubbo.support.Person");
-        assertTrue(result.contains("Use default service 
org.apache.dubbo.rpc.protocol.dubbo.support.DemoService.\r\n2\r\n"));
+        String result = invoke.telnet(mockChannel, 
"getPerson({\"name\":\"zhangsan\",\"age\":12,\"class\":\"org.apache.dubbo.rpc.protocol.dubbo.support.Person\"})");
+        assertTrue(result.contains("result: 12"));
     }
 
-    @SuppressWarnings("unchecked")
     @Test
-    public void testComplexParamSpecifyWrongParamType() throws 
RemotingException {
-        mockChannel = mock(Channel.class);
-        
given(mockChannel.getAttribute("telnet.service")).willReturn("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService");
+    public void testInvokeOverriddenMethodBySelect() throws RemotingException {
+        //create a real instance to keep the attribute values;
+        mockChannel = spy(getChannelInstance());
+        
given(mockChannel.getAttribute("telnet.service")).willReturn(DemoService.class.getName());
         
given(mockChannel.getLocalAddress()).willReturn(NetUtils.toAddress("127.0.0.1:5555"));
         
given(mockChannel.getRemoteAddress()).willReturn(NetUtils.toAddress("127.0.0.1:20886"));
 
         ProviderModel providerModel = new 
ProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", 
"Dubbo", "1.0.0", new DemoServiceImpl(), DemoService.class);
         
ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService",
 providerModel);
 
-        // pass json value to parameter of Person type
-        // wrong name of parameter class
-        String result = invoke.telnet(mockChannel, 
"DemoService.getPerson({\"name\":\"zhangsan\",\"age\":12}) -p wrongType");
-        assertEquals("Unknown parameter class for name wrongType", result);
-
-        // wrong number of parameter class
-        result = invoke.telnet(mockChannel, 
"DemoService.getPerson({\"name\":\"zhangsan\",\"age\":12},{\"name\":\"lisi\",\"age\":12})
 " +
-                "-p org.apache.dubbo.rpc.protocol.dubbo.support.Person");
-        assertEquals("Parameter's number does not match the number of 
parameter class", result);
+        String param = "{\"name\":\"Dubbo\",\"age\":8}";
+        String result = invoke.telnet(mockChannel, "getPerson(" + param + ")");
+        assertTrue(result.contains("Please use the select command to select 
the method you want to invoke. eg: select 1"));
+        result = select.telnet(mockChannel, "1");
+        //result dependent on method order.
+        assertTrue(result.contains("result: 8") || result.contains("result: 
\"Dubbo\""));
     }
 
-
-    @SuppressWarnings("unchecked")
     @Test
-    public void testInvokeAutoFindMethod() throws RemotingException {
+    public void testInvokeMultiJsonParamMethod() throws RemotingException {
         mockChannel = mock(Channel.class);
         given(mockChannel.getAttribute("telnet.service")).willReturn(null);
         
given(mockChannel.getLocalAddress()).willReturn(NetUtils.toAddress("127.0.0.1:5555"));
@@ -194,8 +169,9 @@ public class InvokerTelnetHandlerTest {
         ProviderModel providerModel = new 
ProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService", 
"Dubbo", "1.0.0", new DemoServiceImpl(), DemoService.class);
         
ApplicationModel.initProviderModel("org.apache.dubbo.rpc.protocol.dubbo.support.DemoService",
 providerModel);
 
-        String result = invoke.telnet(mockChannel, "echo(\"ok\")");
-        assertTrue(result.contains("ok"));
+        String param = 
"{\"name\":\"Dubbo\",\"age\":8},{\"name\":\"Apache\",\"age\":20}";
+        String result = invoke.telnet(mockChannel, "getPerson(" + param + ")");
+        assertTrue(result.contains("result: 28"));
     }
 
     @Test
@@ -212,8 +188,93 @@ public class InvokerTelnetHandlerTest {
     public void testInvalidMessage() throws RemotingException {
         mockChannel = mock(Channel.class);
         given(mockChannel.getAttribute("telnet.service")).willReturn(null);
-
         String result = invoke.telnet(mockChannel, "(");
         assertEquals("Invalid parameters, format: service.method(args)", 
result);
     }
+
+    private Channel getChannelInstance() {
+        return new Channel() {
+            private final Map<String, Object> attributes = new 
ConcurrentHashMap<String, Object>();
+
+            @Override
+            public InetSocketAddress getRemoteAddress() {
+                return null;
+            }
+
+            @Override
+            public boolean isConnected() {
+                return false;
+            }
+
+            @Override
+            public boolean hasAttribute(String key) {
+                return attributes.containsKey(key);
+            }
+
+            @Override
+            public Object getAttribute(String key) {
+                return attributes.get(key);
+            }
+
+            @Override
+            public void setAttribute(String key, Object value) {
+                if (value == null) { // The null value unallowed in the 
ConcurrentHashMap.
+                    attributes.remove(key);
+                } else {
+                    attributes.put(key, value);
+                }
+            }
+
+            @Override
+            public void removeAttribute(String key) {
+                attributes.remove(key);
+            }
+
+
+            @Override
+            public URL getUrl() {
+                return null;
+            }
+
+            @Override
+            public ChannelHandler getChannelHandler() {
+                return null;
+            }
+
+            @Override
+            public InetSocketAddress getLocalAddress() {
+                return null;
+            }
+
+            @Override
+            public void send(Object message) throws RemotingException {
+
+            }
+
+            @Override
+            public void send(Object message, boolean sent) throws 
RemotingException {
+
+            }
+
+            @Override
+            public void close() {
+
+            }
+
+            @Override
+            public void close(int timeout) {
+
+            }
+
+            @Override
+            public void startClose() {
+
+            }
+
+            @Override
+            public boolean isClosed() {
+                return false;
+            }
+        };
+    }
 }

Reply via email to