RainYuY commented on code in PR #16031:
URL: https://github.com/apache/dubbo/pull/16031#discussion_r2724796657


##########
dubbo-registry/dubbo-registry-multiple/src/test/java/org/apache/dubbo/registry/multiple/MultipleRegistry2S2RTest.java:
##########
@@ -38,162 +42,132 @@ class MultipleRegistry2S2RTest {
 
     private static final String SERVICE_NAME = 
"org.apache.dubbo.registry.MultipleService2S2R";
     private static final String SERVICE2_NAME = 
"org.apache.dubbo.registry.MultipleService2S2R2";
+    private static final String MOCK_ZK_ADDR_1 = 
"zookeeper://127.0.0.1:2181?check=false";
+    private static final String MOCK_ZK_ADDR_2 = 
"zookeeper://127.0.0.1:2182?check=false";
+    private static final URL MOCK_ZK_URL_1 = URL.valueOf(MOCK_ZK_ADDR_1);
+    private static final URL MOCK_ZK_URL_2 = URL.valueOf(MOCK_ZK_ADDR_2);
+
+    private MultipleRegistry multipleRegistry;
+
+    private ZookeeperClient mockZkClient1;
+    private ZookeeperClient mockZkClient2;
+    private ZookeeperRegistry mockZkRegistry1;
+    private ZookeeperRegistry mockZkRegistry2;
+
+    @BeforeEach
+    void setUp() {
+        mockZkClient1 = Mockito.mock(ZookeeperClient.class);
+        mockZkClient2 = Mockito.mock(ZookeeperClient.class);
+        mockZkRegistry1 = Mockito.mock(ZookeeperRegistry.class);
+        mockZkRegistry2 = Mockito.mock(ZookeeperRegistry.class);
+
+        try (MockedConstruction<ZookeeperRegistryFactory> 
zkFactoryConstruction =
+                Mockito.mockConstruction(ZookeeperRegistryFactory.class, 
(mockFactory, context) -> {
+                    Mockito.lenient()
+                            .when(mockFactory.getRegistry(MOCK_ZK_URL_1))
+                            .thenReturn(mockZkRegistry1);
+                    Mockito.lenient()
+                            .when(mockFactory.getRegistry(MOCK_ZK_URL_2))
+                            .thenReturn(mockZkRegistry2);
+                })) {
+            
Mockito.lenient().when(mockZkRegistry1.isAvailable()).thenReturn(true);
+            
Mockito.lenient().when(mockZkRegistry2.isAvailable()).thenReturn(true);
+            
Mockito.lenient().when(mockZkRegistry1.getUrl()).thenReturn(MOCK_ZK_URL_1);
+            
Mockito.lenient().when(mockZkRegistry2.getUrl()).thenReturn(MOCK_ZK_URL_2);
+
+            URL multipleUrl =
+                    
URL.valueOf("multiple://127.0.0.1?application=vic&enable-empty-protection=false&check=false&"
+                            + MultipleRegistry.REGISTRY_FOR_SERVICE + "=" + 
MOCK_ZK_ADDR_1 + "," + MOCK_ZK_ADDR_2 + "&"
+                            + MultipleRegistry.REGISTRY_FOR_REFERENCE + "=" + 
MOCK_ZK_ADDR_1 + "," + MOCK_ZK_ADDR_2);
+
+            multipleRegistry = (MultipleRegistry) new 
MultipleRegistryFactory().createRegistry(multipleUrl);
+
+            Map<URL, Registry> serviceRegistries = new HashMap<>();
+            serviceRegistries.put(MOCK_ZK_URL_1, mockZkRegistry1);
+            serviceRegistries.put(MOCK_ZK_URL_2, mockZkRegistry2);
+            setPrivateField(multipleRegistry, "serviceRegistries", 
serviceRegistries);
+            setPrivateField(multipleRegistry, "referenceRegistries", 
serviceRegistries);
+        } catch (Exception e) {
+            throw new RuntimeException("初始化MultipleRegistry失败", e);
+        }
+    }
 
-    private static MultipleRegistry multipleRegistry;
-    // for test content
-    private static ZookeeperClient zookeeperClient;
-    private static ZookeeperClient zookeeperClient2;
-
-    private static ZookeeperRegistry zookeeperRegistry;
-    private static ZookeeperRegistry zookeeperRegistry2;
-
-    private static String zookeeperConnectionAddress1, 
zookeeperConnectionAddress2;
-
-    @BeforeAll
-    public static void beforeAll() {
-        zookeeperConnectionAddress1 = 
System.getProperty("zookeeper.connection.address.1");
-        zookeeperConnectionAddress2 = 
System.getProperty("zookeeper.connection.address.2");
-
-        URL url = 
URL.valueOf("multiple://127.0.0.1?application=vic&enable-empty-protection=false&"
-                + MultipleRegistry.REGISTRY_FOR_SERVICE
-                + "=" + zookeeperConnectionAddress1 + "," + 
zookeeperConnectionAddress2 + "&"
-                + MultipleRegistry.REGISTRY_FOR_REFERENCE + "=" + 
zookeeperConnectionAddress1 + ","
-                + zookeeperConnectionAddress2);
-        multipleRegistry = (MultipleRegistry) new 
MultipleRegistryFactory().createRegistry(url);
-
-        // for test validation
-        zookeeperClient = new 
Curator5ZookeeperClient(URL.valueOf(zookeeperConnectionAddress1));
-        zookeeperRegistry = MultipleRegistryTestUtil.getZookeeperRegistry(
-                multipleRegistry.getServiceRegistries().values());
-        zookeeperClient2 = new 
Curator5ZookeeperClient(URL.valueOf(zookeeperConnectionAddress2));
-        zookeeperRegistry2 = MultipleRegistryTestUtil.getZookeeperRegistry(
-                multipleRegistry.getServiceRegistries().values());
+    private void setPrivateField(Object targetObj, String fieldName, Object 
fieldValue) {
+        try {
+            Field field = targetObj.getClass().getDeclaredField(fieldName);
+            field.setAccessible(true);
+            field.set(targetObj, fieldValue);
+        } catch (NoSuchFieldException | IllegalAccessException e) {
+            throw new RuntimeException("反射设置私有字段失败:" + fieldName, e);
+        }
     }
 
     @Test
     void testParamConfig() {
-
         Assertions.assertEquals(2, 
multipleRegistry.origReferenceRegistryURLs.size());
-        
Assertions.assertTrue(multipleRegistry.origReferenceRegistryURLs.contains(zookeeperConnectionAddress1));
-        
Assertions.assertTrue(multipleRegistry.origReferenceRegistryURLs.contains(zookeeperConnectionAddress2));
+        
Assertions.assertTrue(multipleRegistry.origReferenceRegistryURLs.contains(MOCK_ZK_ADDR_1));
+        
Assertions.assertTrue(multipleRegistry.origReferenceRegistryURLs.contains(MOCK_ZK_ADDR_2));
 
         Assertions.assertEquals(2, 
multipleRegistry.origServiceRegistryURLs.size());
-        
Assertions.assertTrue(multipleRegistry.origServiceRegistryURLs.contains(zookeeperConnectionAddress1));
-        
Assertions.assertTrue(multipleRegistry.origServiceRegistryURLs.contains(zookeeperConnectionAddress2));
+        
Assertions.assertTrue(multipleRegistry.origServiceRegistryURLs.contains(MOCK_ZK_ADDR_1));
+        
Assertions.assertTrue(multipleRegistry.origServiceRegistryURLs.contains(MOCK_ZK_ADDR_2));
 
         Assertions.assertEquals(2, 
multipleRegistry.effectReferenceRegistryURLs.size());
-        
Assertions.assertTrue(multipleRegistry.effectReferenceRegistryURLs.contains(zookeeperConnectionAddress1));
-        
Assertions.assertTrue(multipleRegistry.effectReferenceRegistryURLs.contains(zookeeperConnectionAddress2));
-
         Assertions.assertEquals(2, 
multipleRegistry.effectServiceRegistryURLs.size());
-        
Assertions.assertTrue(multipleRegistry.effectServiceRegistryURLs.contains(zookeeperConnectionAddress1));
-        
Assertions.assertTrue(multipleRegistry.effectServiceRegistryURLs.contains(zookeeperConnectionAddress2));
-
-        
Assertions.assertTrue(multipleRegistry.getServiceRegistries().containsKey(zookeeperConnectionAddress1));
-        
Assertions.assertTrue(multipleRegistry.getServiceRegistries().containsKey(zookeeperConnectionAddress2));
-        Assertions.assertEquals(
-                2, multipleRegistry.getServiceRegistries().values().size());
-        //        java.util.Iterator<Registry> registryIterable =
-        // multipleRegistry.getServiceRegistries().values().iterator();
-        //        Registry firstRegistry = registryIterable.next();
-        //        Registry secondRegistry = registryIterable.next();
-        Assertions.assertNotNull(MultipleRegistryTestUtil.getZookeeperRegistry(
-                multipleRegistry.getServiceRegistries().values()));
-        Assertions.assertNotNull(MultipleRegistryTestUtil.getZookeeperRegistry(
-                multipleRegistry.getReferenceRegistries().values()));
-
-        Assertions.assertEquals(
-                MultipleRegistryTestUtil.getZookeeperRegistry(
-                        multipleRegistry.getServiceRegistries().values()),
-                MultipleRegistryTestUtil.getZookeeperRegistry(
-                        multipleRegistry.getReferenceRegistries().values()));
-
-        Assertions.assertEquals(
-                MultipleRegistryTestUtil.getZookeeperRegistry(
-                        multipleRegistry.getServiceRegistries().values()),
-                MultipleRegistryTestUtil.getZookeeperRegistry(
-                        multipleRegistry.getReferenceRegistries().values()));
-
-        Assertions.assertEquals(multipleRegistry.getApplicationName(), "vic");
 
+        
Assertions.assertTrue(multipleRegistry.getServiceRegistries().containsKey(MOCK_ZK_URL_1));
+        
Assertions.assertTrue(multipleRegistry.getServiceRegistries().containsKey(MOCK_ZK_URL_2));
+        Assertions.assertEquals(2, 
multipleRegistry.getServiceRegistries().size());
+
+        Assertions.assertEquals("vic", multipleRegistry.getApplicationName());
         Assertions.assertTrue(multipleRegistry.isAvailable());
     }
 
     @Test
-    void testRegistryAndUnRegistry() throws InterruptedException {
+    void testRegistryAndUnRegistry() {
         URL serviceUrl = URL.valueOf(
                 "http2://multiple/" + SERVICE_NAME + 
"?notify=false&methods=test1,test2&category=providers");
-        //        URL serviceUrl2 = URL.valueOf("http2://multiple2/" + 
SERVICE_NAME +
-        // "?notify=false&methods=test1,test2&category=providers");
+
         multipleRegistry.register(serviceUrl);
+        Mockito.verify(mockZkRegistry1, Mockito.times(1)).register(serviceUrl);
+        Mockito.verify(mockZkRegistry2, Mockito.times(1)).register(serviceUrl);
 
-        String path = "/dubbo/" + SERVICE_NAME + "/providers";
-        List<String> providerList = zookeeperClient.getChildren(path);
-        Assertions.assertTrue(!providerList.isEmpty());
-
-        final List<URL> list = new ArrayList<URL>();
-        multipleRegistry.subscribe(serviceUrl, new NotifyListener() {
-            @Override
-            public void notify(List<URL> urls) {
-                list.clear();
-                list.addAll(urls);
-            }
-        });
-        Thread.sleep(1500);
-        Assertions.assertEquals(2, list.size());
+        NotifyListener testListener = urls -> {};
+        multipleRegistry.subscribe(serviceUrl, testListener);
+        Mockito.verify(mockZkRegistry1, Mockito.times(1))
+                .subscribe(Mockito.eq(serviceUrl), 
Mockito.any(NotifyListener.class));
+        Mockito.verify(mockZkRegistry2, Mockito.times(1))
+                .subscribe(Mockito.eq(serviceUrl), 
Mockito.any(NotifyListener.class));
 
         multipleRegistry.unregister(serviceUrl);
-        Thread.sleep(1500);
-        Assertions.assertEquals(1, list.size());
-        List<URL> urls = 
MultipleRegistryTestUtil.getProviderURLsFromNotifyURLS(list);
-        Assertions.assertEquals(1, list.size());

Review Comment:
   why remove size assert?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to