This is an automated email from the ASF dual-hosted git repository. wangxin 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 8b55a0b [Dubbo-1691] Add unit tests for MulticastRegister #1691 (#1738) 8b55a0b is described below commit 8b55a0b31e1c7f9b7d6df5171865bbc11a4d8544 Author: Song Kun <songkun...@gmail.com> AuthorDate: Fri Jun 8 11:41:08 2018 +0800 [Dubbo-1691] Add unit tests for MulticastRegister #1691 (#1738) * Add unit tests for MulticastRegister, add some comments and fix some typo. * Update MulticastRegistryTest.java * Update MulticastRegistryTest.java update code review error --- .../alibaba/dubbo/registry/RegistryService.java | 2 +- .../registry/multicast/MulticastRegistry.java | 6 + .../registry/multicast/MulticastRegistryTest.java | 125 ++++++++++++++++++--- 3 files changed, 115 insertions(+), 18 deletions(-) diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/RegistryService.java b/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/RegistryService.java index 764c5d5..2494d1e 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/RegistryService.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/com/alibaba/dubbo/registry/RegistryService.java @@ -54,7 +54,7 @@ public interface RegistryService { void unregister(URL url); /** - * Subscrib to eligible registered data and automatically push when the registered data is changed. + * Subscribe to eligible registered data and automatically push when the registered data is changed. * <p> * Subscribing need to support contracts:<br> * 1. When the URL sets the check=false parameter. When the registration fails, the exception is not thrown and retried in the background. <br> diff --git a/dubbo-registry/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java b/dubbo-registry/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java index d392839..bdb124b 100644 --- a/dubbo-registry/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java +++ b/dubbo-registry/dubbo-registry-multicast/src/main/java/com/alibaba/dubbo/registry/multicast/MulticastRegistry.java @@ -145,6 +145,9 @@ public class MulticastRegistry extends FailbackRegistry { return false; } + /** + * Remove the expired providers, only when "clean" parameter is true. + */ private void clean() { if (admin) { for (Set<URL> providers : new HashSet<Set<URL>>(received.values())) { @@ -299,6 +302,9 @@ public class MulticastRegistry extends FailbackRegistry { } } + /** + * Remove the expired providers(if clean is true), leave the multicast group and close the multicast socket. + */ @Override public void destroy() { super.destroy(); diff --git a/dubbo-registry/dubbo-registry-multicast/src/test/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryTest.java b/dubbo-registry/dubbo-registry-multicast/src/test/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryTest.java index 3870d54..30fca7e 100644 --- a/dubbo-registry/dubbo-registry-multicast/src/test/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryTest.java +++ b/dubbo-registry/dubbo-registry-multicast/src/test/java/com/alibaba/dubbo/registry/multicast/MulticastRegistryTest.java @@ -27,12 +27,12 @@ import java.net.MulticastSocket; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.concurrent.atomic.AtomicReference; import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.assertEquals; public class MulticastRegistryTest { @@ -44,31 +44,38 @@ public class MulticastRegistryTest { private URL consumerUrl = URL.valueOf("subscribe://" + NetUtils.getLocalHost() + "/" + service + "?arg1=1&arg2=2"); private MulticastRegistry registry = new MulticastRegistry(registryUrl); - /** - * @throws java.lang.Exception - */ @Before - public void setUp() throws Exception { + public void setUp() { registry.register(serviceUrl); } + /** + * Test method for {@link com.alibaba.dubbo.registry.multicast.MulticastRegistry#MulticastRegistry(URL)}. + */ @Test(expected = IllegalArgumentException.class) public void testUrlError() { URL errorUrl = URL.valueOf("multicast://mullticast/"); new MulticastRegistry(errorUrl); } + /** + * Test method for {@link com.alibaba.dubbo.registry.multicast.MulticastRegistry#MulticastRegistry(URL)}. + */ @Test(expected = IllegalStateException.class) public void testAnyHost() { URL errorUrl = URL.valueOf("multicast://0.0.0.0/"); new MulticastRegistry(errorUrl); } + /** + * Test method for {@link com.alibaba.dubbo.registry.multicast.MulticastRegistry#MulticastRegistry(URL)}. + */ @Test public void testGetCustomPort() { - URL customPortUrl = URL.valueOf("multicast://239.255.255.255:4321/"); + int port = NetUtils.getAvailablePort(); + URL customPortUrl = URL.valueOf("multicast://239.255.255.255:" + port); MulticastRegistry multicastRegistry = new MulticastRegistry(customPortUrl); - assertThat(multicastRegistry.getUrl().getPort(), is(4321)); + assertThat(multicastRegistry.getUrl().getPort(), is(port)); } /** @@ -76,43 +83,112 @@ public class MulticastRegistryTest { */ @Test public void testRegister() { - Set<URL> registered = null; + Set<URL> registered; // clear first registered = registry.getRegistered(); + registered.clear(); for (int i = 0; i < 2; i++) { registry.register(serviceUrl); registered = registry.getRegistered(); assertTrue(registered.contains(serviceUrl)); } - // confirm only 1 regist success; + // confirm only 1 register success registered = registry.getRegistered(); assertEquals(1, registered.size()); } /** + * Test method for {@link com.alibaba.dubbo.registry.multicast.MulticastRegistry#unregister(URL)}. + */ + @Test + public void testUnregister() { + Set<URL> registered; + + // register first + registry.register(serviceUrl); + registered = registry.getRegistered(); + assertTrue(registered.contains(serviceUrl)); + + // then unregister + registered = registry.getRegistered(); + registry.unregister(serviceUrl); + assertFalse(registered.contains(serviceUrl)); + } + + /** * Test method for * {@link com.alibaba.dubbo.registry.multicast.MulticastRegistry#subscribe(URL url, com.alibaba.dubbo.registry.NotifyListener)} * . */ @Test public void testSubscribe() { - // verify lisener. - final AtomicReference<URL> args = new AtomicReference<URL>(); + // verify listener registry.subscribe(consumerUrl, new NotifyListener() { + @Override + public void notify(List<URL> urls) { + assertEquals(serviceUrl.toFullString(), urls.get(0).toFullString()); + Map<URL, Set<NotifyListener>> subscribed = registry.getSubscribed(); + assertEquals(consumerUrl, subscribed.keySet().iterator().next()); + } + }); + } + + /** + * Test method for {@link com.alibaba.dubbo.registry.multicast.MulticastRegistry#unsubscribe(URL, NotifyListener)} + */ + @Test + public void testUnsubscribe() { + // subscribe first + registry.subscribe(consumerUrl, new NotifyListener() { @Override public void notify(List<URL> urls) { - // FIXME assertEquals(MulticastRegistry.this.service, service); - args.set(urls.get(0)); + // do nothing + } + }); + + // then unsubscribe + registry.unsubscribe(consumerUrl, new NotifyListener() { + @Override + public void notify(List<URL> urls) { + Map<URL, Set<NotifyListener>> subscribed = registry.getSubscribed(); + Set<NotifyListener> listeners = subscribed.get(consumerUrl); + assertTrue(listeners.isEmpty()); + + Map<URL, Set<URL>> received = registry.getReceived(); + assertTrue(received.get(consumerUrl).isEmpty()); } }); - assertEquals(serviceUrl.toFullString(), args.get().toFullString()); - Map<URL, Set<NotifyListener>> arg = registry.getSubscribed(); - assertEquals(consumerUrl, arg.keySet().iterator().next()); + } + /** + * Test method for {@link MulticastRegistry#isAvailable()} + */ + @Test + public void testAvailability() { + int port = NetUtils.getAvailablePort(); + MulticastRegistry registry = new MulticastRegistry(URL.valueOf("multicast://224.5.6.8:" + port)); + assertTrue(registry.isAvailable()); + } + + /** + * Test method for {@link MulticastRegistry#destroy()} + */ + @Test + public void testDestroy() { + MulticastSocket socket = registry.getMutilcastSocket(); + assertFalse(socket.isClosed()); + + // then destroy, the multicast socket will be closed + registry.destroy(); + socket = registry.getMutilcastSocket(); + assertTrue(socket.isClosed()); } + /** + * Test method for {@link com.alibaba.dubbo.registry.multicast.MulticastRegistry#MulticastRegistry(URL)} + */ @Test public void testDefaultPort() { MulticastRegistry multicastRegistry = new MulticastRegistry(URL.valueOf("multicast://224.5.6.7")); @@ -124,4 +200,19 @@ public class MulticastRegistryTest { } } + /** + * Test method for {@link com.alibaba.dubbo.registry.multicast.MulticastRegistry#MulticastRegistry(URL)} + */ + @Test + public void testCustomedPort() { + int port = NetUtils.getAvailablePort(); + MulticastRegistry multicastRegistry = new MulticastRegistry(URL.valueOf("multicast://224.5.6.7:" + port)); + try { + MulticastSocket multicastSocket = multicastRegistry.getMutilcastSocket(); + assertEquals(port, multicastSocket.getLocalPort()); + } finally { + multicastRegistry.destroy(); + } + } + } -- To stop receiving notification emails like this one, please contact wang...@apache.org.