From 3390fe8dd61fd2a8cdea411bf1f810b9cbaf99ea Mon Sep 17 00:00:00 2001 From: changfubai Date: Fri, 20 Aug 2021 13:26:21 +0800 Subject: [PATCH 1/2] fix issue-8516 --- .../apache/dubbo/rpc/support/MockInvoker.java | 7 +++--- .../dubbo/rpc/support/DemoServiceA.java | 5 ++++ .../dubbo/rpc/support/DemoServiceAMock.java | 12 +++++++++ .../dubbo/rpc/support/DemoServiceB.java | 5 ++++ .../dubbo/rpc/support/DemoServiceBMock.java | 13 ++++++++++ .../dubbo/rpc/support/MockInvokerTest.java | 25 +++++++++++++++++++ 6 files changed, 64 insertions(+), 3 deletions(-) create mode 100644 dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceA.java create mode 100644 dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceAMock.java create mode 100644 dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceB.java create mode 100644 dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceBMock.java diff --git a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/MockInvoker.java b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/MockInvoker.java index 41a554557d9..6bd4dff11f5 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/MockInvoker.java +++ b/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/support/MockInvoker.java @@ -161,14 +161,15 @@ public static Throwable getThrowable(String throwstr) { } @SuppressWarnings("unchecked") - private Invoker getInvoker(String mockService) { + private Invoker getInvoker(String mock) { + Class serviceType = (Class) ReflectUtils.forName(url.getServiceInterface()); + String mockService = ConfigUtils.isDefault(mock) ? serviceType.getName() + "Mock" : mock; Invoker invoker = (Invoker) MOCK_MAP.get(mockService); if (invoker != null) { return invoker; } - Class serviceType = (Class) ReflectUtils.forName(url.getServiceInterface()); - T mockObject = (T) getMockObject(mockService, serviceType); + T mockObject = (T) getMockObject(mock, serviceType); invoker = PROXY_FACTORY.getInvoker(mockObject, serviceType, url); if (MOCK_MAP.size() < 10000) { MOCK_MAP.put(mockService, invoker); diff --git a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceA.java b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceA.java new file mode 100644 index 00000000000..a533ea3a27e --- /dev/null +++ b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceA.java @@ -0,0 +1,5 @@ +package org.apache.dubbo.rpc.support; + +public interface DemoServiceA { + String methodA(); +} diff --git a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceAMock.java b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceAMock.java new file mode 100644 index 00000000000..44cb7c7c68f --- /dev/null +++ b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceAMock.java @@ -0,0 +1,12 @@ +package org.apache.dubbo.rpc.support; + +/** + * default mock service for DemoServiceA + */ +public class DemoServiceAMock implements DemoServiceA{ + public static final String MOCK_VALUE = "mockA"; + @Override + public String methodA() { + return MOCK_VALUE; + } +} diff --git a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceB.java b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceB.java new file mode 100644 index 00000000000..7f0568bfdc8 --- /dev/null +++ b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceB.java @@ -0,0 +1,5 @@ +package org.apache.dubbo.rpc.support; + +public interface DemoServiceB { + String methodB(); +} diff --git a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceBMock.java b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceBMock.java new file mode 100644 index 00000000000..5fe6b44f854 --- /dev/null +++ b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceBMock.java @@ -0,0 +1,13 @@ +package org.apache.dubbo.rpc.support; + +/** + * default mock service for DemoServiceA + */ +public class DemoServiceBMock implements DemoServiceB { + public static final String MOCK_VALUE = "mockB"; + + @Override + public String methodB() { + return MOCK_VALUE; + } +} diff --git a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/MockInvokerTest.java b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/MockInvokerTest.java index b40951a08ac..646c789e2ee 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/MockInvokerTest.java +++ b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/MockInvokerTest.java @@ -65,6 +65,31 @@ public void testInvoke() { mockInvoker.invoke(invocation).getObjectAttachments()); } + @Test + public void testGetDefaultObject() { + // test methodA in DemoServiceAMock + final Class demoServiceAClass = DemoServiceA.class; + URL url = URL.valueOf("remote://1.2.3.4/" + demoServiceAClass.getName()); + url = url.addParameter(MOCK_KEY, "force:true"); + MockInvoker mockInvoker = new MockInvoker(url, demoServiceAClass); + + RpcInvocation invocation = new RpcInvocation(); + invocation.setMethodName("methodA"); + Assertions.assertEquals(new HashMap<>(), + mockInvoker.invoke(invocation).getObjectAttachments()); + + // test methodB in DemoServiceBMock + final Class demoServiceBClass = DemoServiceB.class; + url = URL.valueOf("remote://1.2.3.4/" + demoServiceBClass.getName()); + url = url.addParameter(MOCK_KEY, "force:true"); + mockInvoker = new MockInvoker(url, demoServiceBClass); + invocation = new RpcInvocation(); + invocation.setMethodName("methodB"); + Assertions.assertEquals(new HashMap<>(), + mockInvoker.invoke(invocation).getObjectAttachments()); + } + + @Test public void testInvokeThrowsRpcException1() { URL url = URL.valueOf("remote://1.2.3.4/" + String.class.getName()); From 8ea33040febdcbcbc34d38a184db65f971dbf618 Mon Sep 17 00:00:00 2001 From: changfubai Date: Fri, 20 Aug 2021 13:31:46 +0800 Subject: [PATCH 2/2] add license to file --- .../apache/dubbo/rpc/support/DemoServiceA.java | 16 ++++++++++++++++ .../dubbo/rpc/support/DemoServiceAMock.java | 16 ++++++++++++++++ .../apache/dubbo/rpc/support/DemoServiceB.java | 16 ++++++++++++++++ .../dubbo/rpc/support/DemoServiceBMock.java | 16 ++++++++++++++++ 4 files changed, 64 insertions(+) diff --git a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceA.java b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceA.java index a533ea3a27e..54318360dfc 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceA.java +++ b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceA.java @@ -1,3 +1,19 @@ +/* + * 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.rpc.support; public interface DemoServiceA { diff --git a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceAMock.java b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceAMock.java index 44cb7c7c68f..23c623ac1f5 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceAMock.java +++ b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceAMock.java @@ -1,3 +1,19 @@ +/* + * 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.rpc.support; /** diff --git a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceB.java b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceB.java index 7f0568bfdc8..a2350a5daa4 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceB.java +++ b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceB.java @@ -1,3 +1,19 @@ +/* + * 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.rpc.support; public interface DemoServiceB { diff --git a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceBMock.java b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceBMock.java index 5fe6b44f854..ffc199dc862 100644 --- a/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceBMock.java +++ b/dubbo-rpc/dubbo-rpc-api/src/test/java/org/apache/dubbo/rpc/support/DemoServiceBMock.java @@ -1,3 +1,19 @@ +/* + * 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.rpc.support; /**