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 cd56069  add unit test to dubbo-registry/dubbo-registry-api and 
dubbo-registry/dubbo-registry-default (#3053)
cd56069 is described below

commit cd560698d24aa521ba1b0b45a0ce725308da5af5
Author: XiaoJie Li <lixiaojie_...@outlook.com>
AuthorDate: Fri Dec 28 13:02:42 2018 +0800

    add unit test to dubbo-registry/dubbo-registry-api and 
dubbo-registry/dubbo-registry-default (#3053)
    
    * add FailedRetryTaskTest.java
---
 .../dubbo/registry/dubbo/DubboRegistryTest.java    | 155 +++++++++++++++++++++
 1 file changed, 155 insertions(+)

diff --git 
a/dubbo-registry/dubbo-registry-default/src/test/java/org/apache/dubbo/registry/dubbo/DubboRegistryTest.java
 
b/dubbo-registry/dubbo-registry-default/src/test/java/org/apache/dubbo/registry/dubbo/DubboRegistryTest.java
new file mode 100644
index 0000000..d6390ff
--- /dev/null
+++ 
b/dubbo-registry/dubbo-registry-default/src/test/java/org/apache/dubbo/registry/dubbo/DubboRegistryTest.java
@@ -0,0 +1,155 @@
+/*
+ * 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.registry.dubbo;
+
+import org.apache.dubbo.common.Constants;
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.logger.Logger;
+import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.utils.NetUtils;
+import org.apache.dubbo.registry.NotifyListener;
+import org.apache.dubbo.registry.RegistryService;
+import org.apache.dubbo.registry.support.FailbackRegistry;
+import org.apache.dubbo.rpc.Invoker;
+import org.apache.dubbo.rpc.RpcInvocation;
+import org.apache.dubbo.rpc.protocol.dubbo.DubboProtocol;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.mockito.BDDMockito.given;
+import static org.mockito.BDDMockito.mock;
+
+public class DubboRegistryTest {
+
+    private static final Logger logger = 
LoggerFactory.getLogger(DubboRegistryTest.class);
+
+    private DubboRegistry dubboRegistry;
+
+    private URL registryURL;
+
+    private URL serviceURL;
+
+    private NotifyListener notifyListener;
+
+    private Invoker<RegistryService> invoker;
+
+    private RegistryService registryService;
+
+    @Before
+    public void setUp() {
+        registryURL = new URL(Constants.REGISTRY_PROTOCOL, 
NetUtils.getLocalHost(), NetUtils.getAvailablePort())
+                .addParameter(Constants.CHECK_KEY, false)
+                .setServiceInterface(RegistryService.class.getName());
+        serviceURL = new URL(DubboProtocol.NAME, NetUtils.getLocalHost(), 
NetUtils.getAvailablePort())
+                .addParameter(Constants.CHECK_KEY, false)
+                .setServiceInterface(RegistryService.class.getName());
+
+        registryService = new MockDubboRegistry(registryURL);
+
+        invoker = mock(Invoker.class);
+        given(invoker.getUrl()).willReturn(serviceURL);
+        given(invoker.getInterface()).willReturn(RegistryService.class);
+        given(invoker.invoke(new RpcInvocation())).willReturn(null);
+
+        dubboRegistry = new DubboRegistry(invoker, registryService);
+        notifyListener = mock(NotifyListener.class);
+    }
+
+    @Test
+    public void testRegister() {
+        dubboRegistry.register(serviceURL);
+        assertEquals(1, getRegistereds());
+    }
+
+    @Test
+    public void testUnRegister() {
+        assertEquals(0, getRegistereds());
+        dubboRegistry.register(serviceURL);
+        assertEquals(1, getRegistereds());
+        dubboRegistry.unregister(serviceURL);
+        assertEquals(0, getRegistereds());
+    }
+
+    @Test
+    public void testSubscribe() {
+        dubboRegistry.register(serviceURL);
+        assertEquals(1, getRegistereds());
+        dubboRegistry.subscribe(serviceURL, notifyListener);
+        assertEquals(1, getSubscribeds());
+        assertEquals(1, getNotifiedListeners());
+    }
+
+    @Test
+    public void testUnsubscribe() {
+        dubboRegistry.subscribe(serviceURL, notifyListener);
+        assertEquals(1, getSubscribeds());
+        assertEquals(1, getNotifiedListeners());
+        dubboRegistry.unsubscribe(serviceURL, notifyListener);
+        assertEquals(0, getNotifiedListeners());
+    }
+
+    private class MockDubboRegistry extends FailbackRegistry {
+
+        private volatile boolean isAvaliable = false;
+
+        public MockDubboRegistry(URL url) {
+            super(url);
+        }
+
+        @Override
+        public void doRegister(URL url) {
+            logger.info("Begin to register: " + url);
+            isAvaliable = true;
+        }
+
+        @Override
+        public void doUnregister(URL url) {
+            logger.info("Begin to ungister: " + url);
+            isAvaliable = false;
+        }
+
+        @Override
+        public void doSubscribe(URL url, NotifyListener listener) {
+            logger.info("Begin to subscribe: " + url);
+        }
+
+        @Override
+        public void doUnsubscribe(URL url, NotifyListener listener) {
+            logger.info("Begin to unSubscribe: " + url);
+        }
+
+        @Override
+        public boolean isAvailable() {
+            return isAvaliable;
+        }
+    }
+
+    private int getNotifiedListeners() {
+        return dubboRegistry.getSubscribed().get(serviceURL).size();
+    }
+
+    private int getRegistereds() {
+        return dubboRegistry.getRegistered().size();
+    }
+
+    private int getSubscribeds() {
+        return dubboRegistry.getSubscribed().size();
+    }
+}

Reply via email to