Skip to content

Commit

Permalink
unit test for ServiceConfig (#1780)
Browse files Browse the repository at this point in the history
* unit test for RegistryConfigTest

* unit test for ServiceConfig

* ignore com.alibaba.dubbo.config.ServiceConfigTest.testUnexport to make unit test stable
  • Loading branch information
beiwei30 authored May 14, 2018
1 parent 2030789 commit 038b600
Show file tree
Hide file tree
Showing 4 changed files with 221 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
/*
* 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.URL;
import com.alibaba.dubbo.registry.Registry;
import com.alibaba.dubbo.registry.RegistryFactory;

public class MockRegistryFactory implements RegistryFactory {
public static Registry registry;

@Override
public Registry getRegistry(URL url) {
return registry;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,19 @@
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;
}
}
Original file line number Diff line number Diff line change
@@ -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"));
}
}
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
mockregistry=com.alibaba.dubbo.config.support.MockRegistryFactory
mockprotocol2=com.alibaba.dubbo.config.MockRegistryFactory

0 comments on commit 038b600

Please sign in to comment.