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

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


The following commit(s) were added to refs/heads/3.3 by this push:
     new 7a71763003 Dubbo registry multiple remove dubbo test common (#16031)
7a71763003 is described below

commit 7a71763003b6da94dbd811901a6845b281f50c6d
Author: wxt1222 <[email protected]>
AuthorDate: Tue Jan 27 17:51:17 2026 +0800

    Dubbo registry multiple remove dubbo test common (#16031)
    
    * dubbo-registry-multiple-remove-dubbo-test-common
    
    * dubbo-registry-multiple-remove-dubbo-test-common
    
    * dubbo-registry-multiple-remove-dubbo-test-common
    
    * dubbo-registry-multiple-remove-dubbo-test-common
    
    * dubbo-registry-multiple-remove-dubbo-test-common
    
    * dubbo-registry-multiple-remove-dubbo-test-common
    
    * dubbo-registry-multiple-remove-dubbo-test-common
    
    * dubbo-registry-multiple-remove-dubbo-test-common
    
    * dubbo-registry-multiple-remove-dubbo-test-common
    
    * dubbo-registry-multiple-remove-dubbo-test-common
    
    * dubbo-registry-multiple-remove-dubbo-test-common
    
    ---------
    
    Co-authored-by: Rain Yu <[email protected]>
---
 dubbo-registry/dubbo-registry-multiple/pom.xml     |   6 -
 .../multiple/MultipleRegistry2S2RTest.java         | 190 ++++++++++++++-------
 .../multiple/MultipleServiceDiscoveryTest.java     |  45 ++---
 3 files changed, 156 insertions(+), 85 deletions(-)

diff --git a/dubbo-registry/dubbo-registry-multiple/pom.xml 
b/dubbo-registry/dubbo-registry-multiple/pom.xml
index 012288a5a5..af00a87698 100644
--- a/dubbo-registry/dubbo-registry-multiple/pom.xml
+++ b/dubbo-registry/dubbo-registry-multiple/pom.xml
@@ -47,12 +47,6 @@
       <artifactId>commons-lang3</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.apache.dubbo</groupId>
-      <artifactId>dubbo-test-common</artifactId>
-      <version>${project.parent.version}</version>
-      <scope>test</scope>
-    </dependency>
 
     <dependency>
       <groupId>org.apache.curator</groupId>
diff --git 
a/dubbo-registry/dubbo-registry-multiple/src/test/java/org/apache/dubbo/registry/multiple/MultipleRegistry2S2RTest.java
 
b/dubbo-registry/dubbo-registry-multiple/src/test/java/org/apache/dubbo/registry/multiple/MultipleRegistry2S2RTest.java
index 4c35d448fe..735e8b0105 100644
--- 
a/dubbo-registry/dubbo-registry-multiple/src/test/java/org/apache/dubbo/registry/multiple/MultipleRegistry2S2RTest.java
+++ 
b/dubbo-registry/dubbo-registry-multiple/src/test/java/org/apache/dubbo/registry/multiple/MultipleRegistry2S2RTest.java
@@ -20,16 +20,23 @@ import org.apache.dubbo.common.URL;
 import org.apache.dubbo.registry.NotifyListener;
 import org.apache.dubbo.registry.Registry;
 import org.apache.dubbo.registry.zookeeper.ZookeeperRegistry;
-import org.apache.dubbo.remoting.zookeeper.curator5.Curator5ZookeeperClient;
+import org.apache.dubbo.registry.zookeeper.ZookeeperRegistryFactory;
 import org.apache.dubbo.remoting.zookeeper.curator5.ZookeeperClient;
 
+import java.lang.reflect.Field;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Assumptions;
-import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.MockedConstruction;
+import org.mockito.Mockito;
 
 /**
  * 2019-04-30
@@ -38,59 +45,86 @@ 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("Failed to initialize 
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("Failed to set private field via 
Reflection:" + 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.assertTrue(multipleRegistry.effectReferenceRegistryURLs.contains(MOCK_ZK_ADDR_1));
+        
Assertions.assertTrue(multipleRegistry.effectReferenceRegistryURLs.contains(MOCK_ZK_ADDR_2));
 
         Assertions.assertEquals(2, 
multipleRegistry.effectServiceRegistryURLs.size());
-        
Assertions.assertTrue(multipleRegistry.effectServiceRegistryURLs.contains(zookeeperConnectionAddress1));
-        
Assertions.assertTrue(multipleRegistry.effectServiceRegistryURLs.contains(zookeeperConnectionAddress2));
+        
Assertions.assertTrue(multipleRegistry.effectServiceRegistryURLs.contains(MOCK_ZK_ADDR_1));
+        
Assertions.assertTrue(multipleRegistry.effectServiceRegistryURLs.contains(MOCK_ZK_ADDR_2));
 
-        
Assertions.assertTrue(multipleRegistry.getServiceRegistries().containsKey(zookeeperConnectionAddress1));
-        
Assertions.assertTrue(multipleRegistry.getServiceRegistries().containsKey(zookeeperConnectionAddress2));
+        
Assertions.assertTrue(multipleRegistry.getServiceRegistries().containsKey(MOCK_ZK_URL_1));
+        
Assertions.assertTrue(multipleRegistry.getServiceRegistries().containsKey(MOCK_ZK_URL_2));
         Assertions.assertEquals(
                 2, multipleRegistry.getServiceRegistries().values().size());
         //        java.util.Iterator<Registry> registryIterable =
@@ -121,17 +155,19 @@ class MultipleRegistry2S2RTest {
 
     @Test
     void testRegistryAndUnRegistry() throws InterruptedException {
-        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");
+        URL serviceUrl = URL.valueOf("http2://multiple/" + SERVICE_NAME
+                + 
"?notify=false&methods=test1,test2&category=providers&application=vic");
+
         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);
+        
Mockito.when(mockZkClient1.getChildren(path)).thenReturn(Arrays.asList("provider1"));
+        List<String> providerList = mockZkClient1.getChildren(path);
         Assertions.assertTrue(!providerList.isEmpty());
 
-        final List<URL> list = new ArrayList<URL>();
+        final List<URL> list = new ArrayList<>();
         multipleRegistry.subscribe(serviceUrl, new NotifyListener() {
             @Override
             public void notify(List<URL> urls) {
@@ -139,12 +175,31 @@ class MultipleRegistry2S2RTest {
                 list.addAll(urls);
             }
         });
+
+        ArgumentCaptor<NotifyListener> captor1 = 
ArgumentCaptor.forClass(NotifyListener.class);
+        ArgumentCaptor<NotifyListener> captor2 = 
ArgumentCaptor.forClass(NotifyListener.class);
+        Mockito.verify(mockZkRegistry1, 
Mockito.times(1)).subscribe(Mockito.eq(serviceUrl), captor1.capture());
+        Mockito.verify(mockZkRegistry2, 
Mockito.times(1)).subscribe(Mockito.eq(serviceUrl), captor2.capture());
+
+        List<URL> mockUrls1 = 
Arrays.asList(URL.valueOf("http2://127.0.0.1:20880/" + SERVICE_NAME));
+        List<URL> mockUrls2 = 
Arrays.asList(URL.valueOf("http2://127.0.0.1:20881/" + SERVICE_NAME));
+        captor1.getValue().notify(mockUrls1);
+        captor2.getValue().notify(mockUrls2);
+
         Thread.sleep(1500);
         Assertions.assertEquals(2, list.size());
 
         multipleRegistry.unregister(serviceUrl);
+        Mockito.verify(mockZkRegistry1, 
Mockito.times(1)).unregister(serviceUrl);
+        Mockito.verify(mockZkRegistry2, 
Mockito.times(1)).unregister(serviceUrl);
+
+        List<URL> unregisterUrls = 
Arrays.asList(URL.valueOf("empty://127.0.0.1:20880/" + SERVICE_NAME));
+        captor1.getValue().notify(unregisterUrls);
+        captor2.getValue().notify(unregisterUrls);
+
         Thread.sleep(1500);
         Assertions.assertEquals(1, list.size());
+
         List<URL> urls = 
MultipleRegistryTestUtil.getProviderURLsFromNotifyURLS(list);
         Assertions.assertEquals(1, list.size());
         Assertions.assertEquals("empty", list.get(0).getProtocol());
@@ -152,17 +207,19 @@ class MultipleRegistry2S2RTest {
 
     @Test
     void testSubscription() throws InterruptedException {
-        URL serviceUrl = URL.valueOf(
-                "http2://multiple/" + SERVICE2_NAME + 
"?notify=false&methods=test1,test2&category=providers");
-        //        URL serviceUrl2 = URL.valueOf("http2://multiple2/" + 
SERVICE_NAME +
-        // "?notify=false&methods=test1,test2&category=providers");
+        URL serviceUrl = URL.valueOf("http2://multiple/" + SERVICE2_NAME
+                + 
"?notify=false&methods=test1,test2&category=providers&application=vic");
+
         multipleRegistry.register(serviceUrl);
+        Mockito.verify(mockZkRegistry1, Mockito.times(1)).register(serviceUrl);
+        Mockito.verify(mockZkRegistry2, Mockito.times(1)).register(serviceUrl);
 
         String path = "/dubbo/" + SERVICE2_NAME + "/providers";
-        List<String> providerList = zookeeperClient.getChildren(path);
+        
Mockito.when(mockZkClient1.getChildren(path)).thenReturn(Arrays.asList("provider1"));
+        List<String> providerList = mockZkClient1.getChildren(path);
         Assumptions.assumeTrue(!providerList.isEmpty());
 
-        final List<URL> list = new ArrayList<URL>();
+        final List<URL> list = new ArrayList<>();
         multipleRegistry.subscribe(serviceUrl, new NotifyListener() {
             @Override
             public void notify(List<URL> urls) {
@@ -170,22 +227,41 @@ class MultipleRegistry2S2RTest {
                 list.addAll(urls);
             }
         });
+
+        ArgumentCaptor<NotifyListener> captor1 = 
ArgumentCaptor.forClass(NotifyListener.class);
+        ArgumentCaptor<NotifyListener> captor2 = 
ArgumentCaptor.forClass(NotifyListener.class);
+        Mockito.verify(mockZkRegistry1, 
Mockito.times(1)).subscribe(Mockito.eq(serviceUrl), captor1.capture());
+        Mockito.verify(mockZkRegistry2, 
Mockito.times(1)).subscribe(Mockito.eq(serviceUrl), captor2.capture());
+
+        List<URL> mockUrls1 = 
Arrays.asList(URL.valueOf("http2://127.0.0.1:20880/" + SERVICE2_NAME));
+        List<URL> mockUrls2 = 
Arrays.asList(URL.valueOf("http2://127.0.0.1:20881/" + SERVICE2_NAME));
+        captor1.getValue().notify(mockUrls1);
+        captor2.getValue().notify(mockUrls2);
+
         Thread.sleep(1500);
         Assertions.assertEquals(2, list.size());
 
         List<Registry> serviceRegistries =
-                new 
ArrayList<Registry>(multipleRegistry.getServiceRegistries().values());
+                new 
ArrayList<>(multipleRegistry.getServiceRegistries().values());
         serviceRegistries.get(0).unregister(serviceUrl);
+        Mockito.verify(mockZkRegistry1, 
Mockito.times(1)).unregister(serviceUrl);
+
+        List<URL> unregisterUrls1 = 
Arrays.asList(URL.valueOf("empty://127.0.0.1:20880/" + SERVICE2_NAME));
+        captor1.getValue().notify(unregisterUrls1);
+
         Thread.sleep(1500);
         Assertions.assertEquals(1, list.size());
-        List<URL> urls = 
MultipleRegistryTestUtil.getProviderURLsFromNotifyURLS(list);
+        List<URL> urls1 = 
MultipleRegistryTestUtil.getProviderURLsFromNotifyURLS(list);
         Assertions.assertEquals(1, list.size());
         Assertions.assertTrue(!"empty".equals(list.get(0).getProtocol()));
 
         serviceRegistries.get(1).unregister(serviceUrl);
+        Mockito.verify(mockZkRegistry2, 
Mockito.times(1)).unregister(serviceUrl);
+        List<URL> unregisterUrls2 = 
Arrays.asList(URL.valueOf("empty://127.0.0.1:20881/" + SERVICE2_NAME));
+        captor2.getValue().notify(unregisterUrls2);
         Thread.sleep(1500);
         Assertions.assertEquals(1, list.size());
-        urls = MultipleRegistryTestUtil.getProviderURLsFromNotifyURLS(list);
+        List<URL> urls2 = 
MultipleRegistryTestUtil.getProviderURLsFromNotifyURLS(list);
         Assertions.assertEquals(1, list.size());
         Assertions.assertEquals("empty", list.get(0).getProtocol());
     }
diff --git 
a/dubbo-registry/dubbo-registry-multiple/src/test/java/org/apache/dubbo/registry/multiple/MultipleServiceDiscoveryTest.java
 
b/dubbo-registry/dubbo-registry-multiple/src/test/java/org/apache/dubbo/registry/multiple/MultipleServiceDiscoveryTest.java
index b9bebdd7fc..b3391576f7 100644
--- 
a/dubbo-registry/dubbo-registry-multiple/src/test/java/org/apache/dubbo/registry/multiple/MultipleServiceDiscoveryTest.java
+++ 
b/dubbo-registry/dubbo-registry-multiple/src/test/java/org/apache/dubbo/registry/multiple/MultipleServiceDiscoveryTest.java
@@ -32,7 +32,6 @@ import org.apache.dubbo.rpc.model.ApplicationModel;
 
 import java.lang.reflect.Field;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -46,7 +45,7 @@ import static 
org.apache.dubbo.registry.client.metadata.ServiceInstanceMetadataU
 
 public class MultipleServiceDiscoveryTest {
 
-    private static String zookeeperConnectionAddress1, 
zookeeperConnectionAddress2;
+    private static String mockZkAddress = 
"zookeeper://mock-zk:2181?check=false";
 
     @Test
     public void testOnEvent() {
@@ -57,34 +56,36 @@ public class MultipleServiceDiscoveryTest {
             MetadataInfo metadataInfo = JsonUtils.toJavaObject(metadata_111, 
MetadataInfo.class);
             ApplicationModel applicationModel = 
ApplicationModel.defaultModel();
             applicationModel.getApplicationConfigManager().setApplication(new 
ApplicationConfig("app2"));
-            zookeeperConnectionAddress1 =
-                    
"multiple://127.0.0.1:2181?reference-registry=127.0.0.1:2181?enableEmptyProtection=false&child.a1=zookeeper://127.0.0.1:2181";
-            List<Object> urlsSameRevision = new ArrayList<>();
-            urlsSameRevision.add("127.0.0.1:20880?revision=111");
-            urlsSameRevision.add("127.0.0.2:20880?revision=111");
-            urlsSameRevision.add("127.0.0.3:20880?revision=111");
-            URL url = URL.valueOf(zookeeperConnectionAddress1);
+            String multipleUrl = String.format(
+                    
"multiple://mock-registry:2181?reference-registry=%s&child.a1=%s&check=false",
+                    mockZkAddress, mockZkAddress);
+            URL url = URL.valueOf(multipleUrl);
             url.setScopeModel(applicationModel);
             MultipleServiceDiscovery multipleServiceDiscovery = new 
MultipleServiceDiscovery(url);
-            Class<MultipleServiceDiscovery> multipleServiceDiscoveryClass = 
MultipleServiceDiscovery.class;
-            Field serviceDiscoveries = 
multipleServiceDiscoveryClass.getDeclaredField("serviceDiscoveries");
-            serviceDiscoveries.setAccessible(true);
-            ServiceDiscovery serviceDiscoveryMock = 
Mockito.mock(ServiceDiscovery.class);
-            
Mockito.when(serviceDiscoveryMock.getRemoteMetadata(Mockito.anyString(), 
Mockito.anyList()))
+            Class<MultipleServiceDiscovery> msdClass = 
MultipleServiceDiscovery.class;
+            Field serviceDiscoveriesField = 
msdClass.getDeclaredField("serviceDiscoveries");
+            serviceDiscoveriesField.setAccessible(true);
+            ServiceDiscovery mockServiceDiscovery = 
Mockito.mock(ServiceDiscovery.class);
+            
Mockito.when(mockServiceDiscovery.getRemoteMetadata(Mockito.anyString(), 
Mockito.anyList()))
                     .thenReturn(metadataInfo);
-            serviceDiscoveries.set(
-                    multipleServiceDiscovery, 
Collections.singletonMap("child.a1", serviceDiscoveryMock));
+            Map<String, ServiceDiscovery> mockServiceDiscoveries = new 
HashMap<>();
+            mockServiceDiscoveries.put("child.a1", mockServiceDiscovery);
+            serviceDiscoveriesField.set(multipleServiceDiscovery, 
mockServiceDiscoveries);
             MultipleServiceDiscovery.MultiServiceInstancesChangedListener 
listener =
                     
(MultipleServiceDiscovery.MultiServiceInstancesChangedListener)
                             
multipleServiceDiscovery.createListener(Sets.newHashSet("app1"));
             
multipleServiceDiscovery.addServiceInstancesChangedListener(listener);
-            MultipleServiceDiscovery.SingleServiceInstancesChangedListener 
singleServiceInstancesChangedListener =
+
+            MultipleServiceDiscovery.SingleServiceInstancesChangedListener 
singleListener =
                     listener.getAndComputeIfAbsent("child.a1", (a1) -> null);
-            Assert.notNull(
-                    singleServiceInstancesChangedListener, 
"singleServiceInstancesChangedListener can not be null");
-            singleServiceInstancesChangedListener.onEvent(
-                    new ServiceInstancesChangedEvent("app1", 
buildInstances(urlsSameRevision)));
-            Mockito.verify(serviceDiscoveryMock, Mockito.times(1))
+            Assert.notNull(singleListener, 
"singleServiceInstancesChangedListener can not be null");
+
+            List<Object> urlsSameRevision = new ArrayList<>();
+            urlsSameRevision.add("127.0.0.1:20880?revision=111");
+            urlsSameRevision.add("127.0.0.2:20880?revision=111");
+            urlsSameRevision.add("127.0.0.3:20880?revision=111");
+            singleListener.onEvent(new ServiceInstancesChangedEvent("app1", 
buildInstances(urlsSameRevision)));
+            Mockito.verify(mockServiceDiscovery, Mockito.times(1))
                     .getRemoteMetadata(Mockito.anyString(), Mockito.anyList());
             Field serviceUrlsField = 
ServiceInstancesChangedListener.class.getDeclaredField("serviceUrls");
             serviceUrlsField.setAccessible(true);

Reply via email to