This is an automated email from the ASF dual-hosted git repository.

victory pushed a commit to branch cloud-native
in repository https://gitbox.apache.org/repos/asf/dubbo.git

commit 5dcf3017ddff65664ff430ebffdf51f61ba84142
Author: cvictory <shenglic...@gmail.com>
AuthorDate: Mon Sep 2 14:09:33 2019 +0800

    unit test for etcd serviceDiscovery
---
 .../dubbo/registry/etcd/EtcdServiceDiscovery.java  |  12 ++-
 .../registry/etcd/EtcdServiceDiscoveryTest.java    | 102 ++++++++++++++++++++-
 2 files changed, 108 insertions(+), 6 deletions(-)

diff --git 
a/dubbo-registry/dubbo-registry-etcd3/src/main/java/org/apache/dubbo/registry/etcd/EtcdServiceDiscovery.java
 
b/dubbo-registry/dubbo-registry-etcd3/src/main/java/org/apache/dubbo/registry/etcd/EtcdServiceDiscovery.java
index 1f88f7e..821d80c 100644
--- 
a/dubbo-registry/dubbo-registry-etcd3/src/main/java/org/apache/dubbo/registry/etcd/EtcdServiceDiscovery.java
+++ 
b/dubbo-registry/dubbo-registry-etcd3/src/main/java/org/apache/dubbo/registry/etcd/EtcdServiceDiscovery.java
@@ -63,9 +63,9 @@ public class EtcdServiceDiscovery implements 
ServiceDiscovery, EventListener<Ser
 
     private final ConcurrentMap<URL, ConcurrentMap<NotifyListener, 
ChildListener>> etcdListeners = new ConcurrentHashMap<>();
 
-    private EtcdClient etcdClient;
-    private EventDispatcher dispatcher;
-    private ServiceInstance serviceInstance;
+    EtcdClient etcdClient;
+    EventDispatcher dispatcher;
+    ServiceInstance serviceInstance;
 
     @Override
     public void onEvent(ServiceInstancesChangedEvent event) {
@@ -99,7 +99,9 @@ public class EtcdServiceDiscovery implements 
ServiceDiscovery, EventListener<Ser
 
     @Override
     public void destroy() {
-
+        if (etcdClient != null && etcdClient.isConnected()) {
+            etcdClient.close();
+        }
     }
 
     @Override
@@ -131,7 +133,7 @@ public class EtcdServiceDiscovery implements 
ServiceDiscovery, EventListener<Ser
     public void update(ServiceInstance serviceInstance) throws 
RuntimeException {
         try {
             String path = toPath(serviceInstance);
-            etcdClient.put(path, new Gson().toJson(serviceInstance));
+            etcdClient.putEphemeral(path, new Gson().toJson(serviceInstance));
             services.add(serviceInstance.getServiceName());
         } catch (Throwable e) {
             throw new RpcException("Failed to register " + serviceInstance + " 
to etcd " + etcdClient.getUrl()
diff --git 
a/dubbo-registry/dubbo-registry-etcd3/src/test/java/org/apache/dubbo/registry/etcd/EtcdServiceDiscoveryTest.java
 
b/dubbo-registry/dubbo-registry-etcd3/src/test/java/org/apache/dubbo/registry/etcd/EtcdServiceDiscoveryTest.java
index 5955f7a..48cff97 100644
--- 
a/dubbo-registry/dubbo-registry-etcd3/src/test/java/org/apache/dubbo/registry/etcd/EtcdServiceDiscoveryTest.java
+++ 
b/dubbo-registry/dubbo-registry-etcd3/src/test/java/org/apache/dubbo/registry/etcd/EtcdServiceDiscoveryTest.java
@@ -1,8 +1,108 @@
 package org.apache.dubbo.registry.etcd;
 
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.registry.client.DefaultServiceInstance;
+import org.apache.dubbo.registry.client.ServiceInstance;
+
+import com.google.gson.Gson;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static java.lang.String.valueOf;
+
 /**
- * @author cvictory ON 2019-08-30
+ * 2019-08-30
+ * <p>
+ * There is no embedded server. so it works depend on etcd local server.
  */
+@Disabled
 public class EtcdServiceDiscoveryTest {
 
+    static EtcdServiceDiscovery etcdServiceDiscovery;
+
+    @BeforeAll
+    public static void setUp() throws Exception {
+        URL url = 
URL.valueOf("etcd3://127.0.0.1:2379/org.apache.dubbo.registry.RegistryService");
+        etcdServiceDiscovery = new EtcdServiceDiscovery();
+        Assertions.assertNull(etcdServiceDiscovery.etcdClient);
+        etcdServiceDiscovery.initialize(url);
+    }
+
+    @AfterAll
+    public static void destroy() throws Exception {
+//        etcdServiceDiscovery.destroy();
+    }
+
+
+    @Test
+    public void testLifecycle() throws Exception {
+        URL url = 
URL.valueOf("etcd3://127.0.0.1:2233/org.apache.dubbo.registry.RegistryService");
+        EtcdServiceDiscovery etcdServiceDiscoveryTmp = new 
EtcdServiceDiscovery();
+        Assertions.assertNull(etcdServiceDiscoveryTmp.etcdClient);
+        etcdServiceDiscoveryTmp.initialize(url);
+        Assertions.assertNotNull(etcdServiceDiscoveryTmp.etcdClient);
+        
Assertions.assertTrue(etcdServiceDiscoveryTmp.etcdClient.isConnected());
+        etcdServiceDiscoveryTmp.destroy();
+        
Assertions.assertFalse(etcdServiceDiscoveryTmp.etcdClient.isConnected());
+    }
+
+    @Test
+    public void testRegistry() throws Exception {
+        ServiceInstance serviceInstance = new 
DefaultServiceInstance(valueOf(System.nanoTime()), "EtcdTestService", 
"127.0.0.1", 8080);
+        
Assertions.assertNull(etcdServiceDiscovery.etcdClient.getKVValue(etcdServiceDiscovery.toPath(serviceInstance)));
+        etcdServiceDiscovery.register(serviceInstance);
+        
Assertions.assertNotNull(etcdServiceDiscovery.etcdClient.getKVValue(etcdServiceDiscovery.toPath(serviceInstance)));
+    }
+
+    @Test
+    public void testUnRegistry() throws Exception {
+        ServiceInstance serviceInstance = new 
DefaultServiceInstance(valueOf(System.nanoTime()), "EtcdTest2Service", 
"127.0.0.1", 8080);
+        
Assertions.assertNull(etcdServiceDiscovery.etcdClient.getKVValue(etcdServiceDiscovery.toPath(serviceInstance)));
+        etcdServiceDiscovery.register(serviceInstance);
+        
Assertions.assertNotNull(etcdServiceDiscovery.etcdClient.getKVValue(etcdServiceDiscovery.toPath(serviceInstance)));
+        etcdServiceDiscovery.unregister(serviceInstance);
+        
Assertions.assertNull(etcdServiceDiscovery.etcdClient.getKVValue(etcdServiceDiscovery.toPath(serviceInstance)));
+    }
+
+    @Test
+    public void testUpdate() throws Exception {
+        DefaultServiceInstance serviceInstance = new 
DefaultServiceInstance(valueOf(System.nanoTime()), "EtcdTest2Service", 
"127.0.0.1", 8080);
+        
Assertions.assertNull(etcdServiceDiscovery.etcdClient.getKVValue(etcdServiceDiscovery.toPath(serviceInstance)));
+        etcdServiceDiscovery.register(serviceInstance);
+        
Assertions.assertNotNull(etcdServiceDiscovery.etcdClient.getKVValue(etcdServiceDiscovery.toPath(serviceInstance)));
+        
Assertions.assertEquals(etcdServiceDiscovery.etcdClient.getKVValue(etcdServiceDiscovery.toPath(serviceInstance)),
+                new Gson().toJson(serviceInstance));
+        serviceInstance.setPort(9999);
+        etcdServiceDiscovery.update(serviceInstance);
+        
Assertions.assertNotNull(etcdServiceDiscovery.etcdClient.getKVValue(etcdServiceDiscovery.toPath(serviceInstance)));
+        
Assertions.assertEquals(etcdServiceDiscovery.etcdClient.getKVValue(etcdServiceDiscovery.toPath(serviceInstance)),
+                new Gson().toJson(serviceInstance));
+    }
+
+    @Test
+    public void testGetInstances() throws Exception {
+        String serviceName = "EtcdTest77Service";
+        
Assertions.assertTrue(etcdServiceDiscovery.getInstances(serviceName).isEmpty());
+        etcdServiceDiscovery.register(new 
DefaultServiceInstance(valueOf(System.nanoTime()), serviceName, "127.0.0.1", 
8080));
+        etcdServiceDiscovery.register(new 
DefaultServiceInstance(valueOf(System.nanoTime()), serviceName, "127.0.0.1", 
9809));
+        
Assertions.assertFalse(etcdServiceDiscovery.getInstances(serviceName).isEmpty());
+        List<String> r = 
convertToIpPort(etcdServiceDiscovery.getInstances(serviceName));
+        Assertions.assertTrue(r.contains("127.0.0.1:8080"));
+        Assertions.assertTrue(r.contains("127.0.0.1:9809"));
+    }
+
+    private List<String> convertToIpPort(List<ServiceInstance> 
serviceInstances) {
+        List<String> result = new ArrayList<>();
+        for (ServiceInstance serviceInstance : serviceInstances) {
+            result.add(serviceInstance.getHost() + ":" + 
serviceInstance.getPort());
+        }
+        return result;
+    }
+
 }

Reply via email to