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); + } + } + } }
