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.

Reply via email to