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

albumenj pushed a commit to branch 3.2
in repository https://gitbox.apache.org/repos/asf/dubbo.git

commit 012a6ed49e106739d4530bbcee45a035d41c8a21
Author: Albumen Kevin <[email protected]>
AuthorDate: Mon Jan 16 11:24:24 2023 +0800

    Fix Nacos sub try test conflict
---
 .../registry/nacos/NacosConnectionManager.java     | 12 ++++-
 .../nacos/NacosConnectionsManagerTest.java         | 60 ++++++++++++++++++++++
 2 files changed, 71 insertions(+), 1 deletion(-)

diff --git 
a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosConnectionManager.java
 
b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosConnectionManager.java
index 2698e6cd34..913809a5a6 100644
--- 
a/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosConnectionManager.java
+++ 
b/dubbo-registry/dubbo-registry-nacos/src/main/java/org/apache/dubbo/registry/nacos/NacosConnectionManager.java
@@ -122,7 +122,7 @@ public class NacosConnectionManager {
         try {
             for (int i = 0; i < retryTimes + 1; i++) {
                 namingService = 
NacosFactory.createNamingService(nacosProperties);
-                if (!check || UP.equals(namingService.getServerStatus())) {
+                if (!check || (UP.equals(namingService.getServerStatus()) && 
testNamingService(namingService))) {
                     break;
                 } else {
                     logger.warn(LoggerCodeConstants.REGISTRY_NACOS_EXCEPTION, 
"", "",
@@ -152,6 +152,16 @@ public class NacosConnectionManager {
         return namingService;
     }
 
+    private boolean testNamingService(NamingService namingService) {
+        try {
+            namingService.getAllInstances("Dubbo-Nacos-Test", false);
+            return true;
+        } catch (NacosException e) {
+            return false;
+        }
+    }
+
+
     private Properties buildNacosProperties(URL url) {
         Properties properties = new Properties();
         setServerAddr(url, properties);
diff --git 
a/dubbo-registry/dubbo-registry-nacos/src/test/java/org/apache/dubbo/registry/nacos/NacosConnectionsManagerTest.java
 
b/dubbo-registry/dubbo-registry-nacos/src/test/java/org/apache/dubbo/registry/nacos/NacosConnectionsManagerTest.java
index 1f6f30145c..5396bd10e2 100644
--- 
a/dubbo-registry/dubbo-registry-nacos/src/test/java/org/apache/dubbo/registry/nacos/NacosConnectionsManagerTest.java
+++ 
b/dubbo-registry/dubbo-registry-nacos/src/test/java/org/apache/dubbo/registry/nacos/NacosConnectionsManagerTest.java
@@ -32,6 +32,7 @@ import org.mockito.Mockito;
 import com.alibaba.nacos.api.NacosFactory;
 import com.alibaba.nacos.api.exception.NacosException;
 import com.alibaba.nacos.api.naming.NamingService;
+import com.alibaba.nacos.api.naming.pojo.Instance;
 
 import static com.alibaba.nacos.client.constant.Constants.HealthCheck.DOWN;
 import static com.alibaba.nacos.client.constant.Constants.HealthCheck.UP;
@@ -133,4 +134,63 @@ public class NacosConnectionsManagerTest {
             }
         }
     }
+
+    @Test
+    void testDisable() {
+        try (MockedStatic<NacosFactory> nacosFactoryMockedStatic = 
Mockito.mockStatic(NacosFactory.class)) {
+            NamingService mock = new MockNamingService() {
+                @Override
+                public String getServerStatus() {
+                    return DOWN;
+                }
+            };
+            nacosFactoryMockedStatic.when(() -> 
NacosFactory.createNamingService((Properties) any())).thenReturn(mock);
+
+
+            URL url = URL.valueOf("nacos://127.0.0.1:8848")
+                .addParameter("nacos.retry", 5)
+                .addParameter("nacos.retry-wait", 10)
+                .addParameter("nacos.check", "false");
+            try {
+                new NacosConnectionManager(url, false, 5, 10);
+            } catch (Throwable t) {
+                Assertions.fail(t);
+            }
+        }
+    }
+
+    @Test
+    void testRequest() {
+        try (MockedStatic<NacosFactory> nacosFactoryMockedStatic = 
Mockito.mockStatic(NacosFactory.class)) {
+            AtomicInteger atomicInteger = new AtomicInteger(0);
+            NamingService mock = new MockNamingService() {
+                @Override
+                public List<Instance> getAllInstances(String serviceName, 
boolean subscribe) throws NacosException {
+                    if (atomicInteger.incrementAndGet() > 10) {
+                        return null;
+                    } else {
+                        throw new NacosException();
+                    }
+                }
+
+                @Override
+                public String getServerStatus() {
+                    return UP;
+                }
+            };
+            nacosFactoryMockedStatic.when(() -> 
NacosFactory.createNamingService((Properties) any())).thenReturn(mock);
+
+
+            URL url = URL.valueOf("nacos://127.0.0.1:8848")
+                .addParameter("nacos.retry", 5)
+                .addParameter("nacos.retry-wait", 10);
+            Assertions.assertThrows(IllegalStateException.class, () -> new 
NacosConnectionManager(url, true, 5, 10));
+
+            try {
+                new NacosConnectionManager(url, true, 5, 10);
+            } catch (Throwable t) {
+                Assertions.fail(t);
+            }
+        }
+    }
 }

Reply via email to