You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by il...@apache.org on 2018/05/14 02:49:11 UTC
[incubator-dubbo] branch master updated: unit test for
ServiceConfig (#1780)
This is an automated email from the ASF dual-hosted git repository.
iluo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git
The following commit(s) were added to refs/heads/master by this push:
new 038b600 unit test for ServiceConfig (#1780)
038b600 is described below
commit 038b600b095d35d209e198dad3bed4e850f8296c
Author: Ian Luo <ia...@gmail.com>
AuthorDate: Mon May 14 10:49:08 2018 +0800
unit test for ServiceConfig (#1780)
* unit test for RegistryConfigTest
* unit test for ServiceConfig
* ignore com.alibaba.dubbo.config.ServiceConfigTest.testUnexport to make unit test stable
---
...ckTransporter.java => MockRegistryFactory.java} | 18 +-
.../com/alibaba/dubbo/config/MockTransporter.java | 8 +-
.../alibaba/dubbo/config/ServiceConfigTest.java | 183 +++++++++++++++++++++
.../com.alibaba.dubbo.registry.RegistryFactory | 1 +
4 files changed, 196 insertions(+), 14 deletions(-)
diff --git a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/MockTransporter.java b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/MockRegistryFactory.java
similarity index 63%
copy from dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/MockTransporter.java
copy to dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/MockRegistryFactory.java
index 749b909..1534d30 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/MockTransporter.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/MockRegistryFactory.java
@@ -18,20 +18,14 @@
package com.alibaba.dubbo.config;
import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.remoting.ChannelHandler;
-import com.alibaba.dubbo.remoting.Client;
-import com.alibaba.dubbo.remoting.RemotingException;
-import com.alibaba.dubbo.remoting.Server;
-import com.alibaba.dubbo.remoting.Transporter;
+import com.alibaba.dubbo.registry.Registry;
+import com.alibaba.dubbo.registry.RegistryFactory;
-public class MockTransporter implements Transporter {
- @Override
- public Server bind(URL url, ChannelHandler handler) throws RemotingException {
- return null;
- }
+public class MockRegistryFactory implements RegistryFactory {
+ public static Registry registry;
@Override
- public Client connect(URL url, ChannelHandler handler) throws RemotingException {
- return null;
+ public Registry getRegistry(URL url) {
+ return registry;
}
}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/MockTransporter.java b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/MockTransporter.java
index 749b909..0651c2a 100644
--- a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/MockTransporter.java
+++ b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/MockTransporter.java
@@ -23,15 +23,19 @@ import com.alibaba.dubbo.remoting.Client;
import com.alibaba.dubbo.remoting.RemotingException;
import com.alibaba.dubbo.remoting.Server;
import com.alibaba.dubbo.remoting.Transporter;
+import org.mockito.Mockito;
public class MockTransporter implements Transporter {
+ private Server server = Mockito.mock(Server.class);
+ private Client client = Mockito.mock(Client.class);
+
@Override
public Server bind(URL url, ChannelHandler handler) throws RemotingException {
- return null;
+ return server;
}
@Override
public Client connect(URL url, ChannelHandler handler) throws RemotingException {
- return null;
+ return client;
}
}
diff --git a/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/ServiceConfigTest.java b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/ServiceConfigTest.java
new file mode 100644
index 0000000..632cbd1
--- /dev/null
+++ b/dubbo-config/dubbo-config-api/src/test/java/com/alibaba/dubbo/config/ServiceConfigTest.java
@@ -0,0 +1,183 @@
+/*
+ * 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 com.alibaba.dubbo.config;
+
+import com.alibaba.dubbo.common.Constants;
+import com.alibaba.dubbo.common.URL;
+import com.alibaba.dubbo.config.api.DemoService;
+import com.alibaba.dubbo.config.provider.impl.DemoServiceImpl;
+import com.alibaba.dubbo.registry.Registry;
+import com.alibaba.dubbo.rpc.Exporter;
+import com.alibaba.dubbo.rpc.Invoker;
+import com.alibaba.dubbo.rpc.Protocol;
+import com.alibaba.dubbo.rpc.service.GenericService;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+import org.mockito.Mockito;
+
+import java.util.Collections;
+
+import static com.alibaba.dubbo.common.Constants.GENERIC_SERIALIZATION_BEAN;
+import static com.alibaba.dubbo.common.Constants.GENERIC_SERIALIZATION_DEFAULT;
+import static com.alibaba.dubbo.common.Constants.GENERIC_SERIALIZATION_NATIVE_JAVA;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.Matchers.hasEntry;
+import static org.hamcrest.Matchers.hasKey;
+import static org.hamcrest.Matchers.hasSize;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.withSettings;
+
+public class ServiceConfigTest {
+ private Protocol protocolDelegate = Mockito.mock(Protocol.class);
+ private Registry registryDelegate = Mockito.mock(Registry.class);
+ private Exporter exporter = Mockito.mock(Exporter.class);
+ private ServiceConfig<DemoServiceImpl> service = new ServiceConfig<DemoServiceImpl>();
+
+
+ @Before
+ public void setUp() throws Exception {
+ MockProtocol2.delegate = protocolDelegate;
+ MockRegistryFactory.registry = registryDelegate;
+ Mockito.when(protocolDelegate.export(Mockito.any(Invoker.class))).thenReturn(exporter);
+
+ ApplicationConfig app = new ApplicationConfig("app");
+
+ ProtocolConfig protocolConfig = new ProtocolConfig();
+ protocolConfig.setName("mockprotocol2");
+
+ ProviderConfig provider = new ProviderConfig();
+ provider.setExport(true);
+ provider.setProtocol(protocolConfig);
+
+ RegistryConfig registry = new RegistryConfig();
+ registry.setProtocol("mockprotocol2");
+
+ ArgumentConfig argument = new ArgumentConfig();
+ argument.setIndex(0);
+ argument.setCallback(false);
+
+ MethodConfig method = new MethodConfig();
+ method.setName("echo");
+ method.setArguments(Collections.singletonList(argument));
+
+ service.setProvider(provider);
+ service.setApplication(app);
+ service.setRegistry(registry);
+ service.setInterface(DemoService.class);
+ service.setRef(new DemoServiceImpl());
+ service.setMethods(Collections.singletonList(method));
+ }
+
+ @Test
+ public void testExport() throws Exception {
+ service.export();
+
+ assertThat(service.getExportedUrls(), hasSize(1));
+ URL url = service.toUrl();
+ assertThat(url.getProtocol(), equalTo("mockprotocol2"));
+ assertThat(url.getPath(), equalTo(DemoService.class.getName()));
+ assertThat(url.getParameters(), hasEntry(Constants.ANYHOST_KEY, "true"));
+ assertThat(url.getParameters(), hasEntry(Constants.APPLICATION_KEY, "app"));
+ assertThat(url.getParameters(), hasKey(Constants.BIND_IP_KEY));
+ assertThat(url.getParameters(), hasKey(Constants.BIND_PORT_KEY));
+ assertThat(url.getParameters(), hasEntry(Constants.DEFAULT_KEY + "." + Constants.EXPORT_KEY, "true"));
+ assertThat(url.getParameters(), hasEntry(Constants.EXPORT_KEY, "true"));
+ assertThat(url.getParameters(), hasEntry("echo.0.callback", "false"));
+ assertThat(url.getParameters(), hasEntry(Constants.GENERIC_KEY, "false"));
+ assertThat(url.getParameters(), hasEntry(Constants.INTERFACE_KEY, DemoService.class.getName()));
+ assertThat(url.getParameters(), hasKey(Constants.METHODS_KEY));
+ assertThat(url.getParameters().get(Constants.METHODS_KEY), containsString("echo"));
+ assertThat(url.getParameters(), hasEntry(Constants.SIDE_KEY, Constants.PROVIDER));
+ Mockito.verify(protocolDelegate).export(Mockito.any(Invoker.class));
+ }
+
+ @Test
+ @Ignore("cannot pass in travis")
+ public void testUnexport() throws Exception {
+ System.setProperty(Constants.SHUTDOWN_WAIT_KEY, "0");
+ try {
+ service.export();
+ service.unexport();
+ Thread.sleep(1000);
+ Mockito.verify(exporter, Mockito.atLeastOnce()).unexport();
+ } finally {
+ System.clearProperty(Constants.SHUTDOWN_TIMEOUT_KEY);
+ }
+ }
+
+ @Test
+ public void testInterfaceClass() throws Exception {
+ ServiceConfig<Greeting> service = new ServiceConfig<Greeting>();
+ service.setInterface(Greeting.class.getName());
+ service.setRef(Mockito.mock(Greeting.class));
+ assertThat(service.getInterfaceClass() == Greeting.class, is(true));
+ service = new ServiceConfig<Greeting>();
+ service.setRef(Mockito.mock(Greeting.class, withSettings().extraInterfaces(GenericService.class)));
+ assertThat(service.getInterfaceClass() == GenericService.class, is(true));
+ }
+
+ @Test(expected = IllegalStateException.class)
+ public void testInterface1() throws Exception {
+ ServiceConfig<DemoService> service = new ServiceConfig<DemoService>();
+ service.setInterface(DemoServiceImpl.class);
+ }
+
+ @Test
+ public void testInterface2() throws Exception {
+ ServiceConfig<DemoService> service = new ServiceConfig<DemoService>();
+ service.setInterface(DemoService.class);
+ assertThat(service.getInterface(), equalTo(DemoService.class.getName()));
+ }
+
+ @Test
+ public void testProvider() throws Exception {
+ ServiceConfig service = new ServiceConfig();
+ ProviderConfig provider = new ProviderConfig();
+ service.setProvider(provider);
+ assertThat(service.getProvider(), is(provider));
+ }
+
+ @Test
+ public void testGeneric1() throws Exception {
+ ServiceConfig service = new ServiceConfig();
+ service.setGeneric(GENERIC_SERIALIZATION_DEFAULT);
+ assertThat(service.getGeneric(), equalTo(GENERIC_SERIALIZATION_DEFAULT));
+ service.setGeneric(GENERIC_SERIALIZATION_NATIVE_JAVA);
+ assertThat(service.getGeneric(), equalTo(GENERIC_SERIALIZATION_NATIVE_JAVA));
+ service.setGeneric(GENERIC_SERIALIZATION_BEAN);
+ assertThat(service.getGeneric(), equalTo(GENERIC_SERIALIZATION_BEAN));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testGeneric2() throws Exception {
+ ServiceConfig service = new ServiceConfig();
+ service.setGeneric("illegal");
+ }
+
+ @Test
+ public void testUniqueServiceName() throws Exception {
+ ServiceConfig<Greeting> service = new ServiceConfig<Greeting>();
+ service.setGroup("dubbo");
+ service.setInterface(Greeting.class);
+ service.setVersion("1.0.0");
+ assertThat(service.getUniqueServiceName(), equalTo("dubbo/" + Greeting.class.getName() + ":1.0.0"));
+ }
+}
diff --git a/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory
index 6dd0bbd..970c6c7 100644
--- a/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory
+++ b/dubbo-config/dubbo-config-api/src/test/resources/META-INF/services/com.alibaba.dubbo.registry.RegistryFactory
@@ -1 +1,2 @@
mockregistry=com.alibaba.dubbo.config.support.MockRegistryFactory
+mockprotocol2=com.alibaba.dubbo.config.MockRegistryFactory
--
To stop receiving notification emails like this one, please contact
iluo@apache.org.