You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/09/02 02:55:28 UTC

[dubbo] branch 3.0-multi-instances updated: Fix uts

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

albumenj pushed a commit to branch 3.0-multi-instances
in repository https://gitbox.apache.org/repos/asf/dubbo.git


The following commit(s) were added to refs/heads/3.0-multi-instances by this push:
     new de44579  Fix uts
de44579 is described below

commit de445791e58d46309b5dc17ebe1a264532b951ce
Author: Albumen Kevin <jh...@gmail.com>
AuthorDate: Thu Sep 2 10:55:03 2021 +0800

    Fix uts
---
 .../metadata/MetadataServiceNameMapping.java       |   6 +-
 .../ServiceInstanceMetadataCustomizer.java         |   3 +-
 .../client/ServiceDiscoveryRegistryTest.java       |  90 +++++++-------
 .../metadata/MetadataServiceNameMappingTest.java   | 118 +++++++++++--------
 .../ServiceInstanceMetadataCustomizerTest.java     |   2 +-
 .../store/InMemoryMetadataServiceTest.java         |   2 +
 .../migration/MigrationRuleListenerTest.java       |   2 +
 .../client/migration/model/MigrationRuleTest.java  | 130 ++++++++++-----------
 8 files changed, 188 insertions(+), 165 deletions(-)

diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMapping.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMapping.java
index c963b72..a0735bf 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMapping.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMapping.java
@@ -45,7 +45,11 @@ public class MetadataServiceNameMapping extends AbstractServiceNameMapping imple
     private static final List<String> IGNORED_SERVICE_INTERFACES = Collections.singletonList(MetadataService.class.getName());
 
     private static final int CAS_RETRY_TIMES = 6;
-    private MetadataReportInstance metadataReportInstance;
+    protected MetadataReportInstance metadataReportInstance;
+
+    public MetadataServiceNameMapping() {
+        metadataReportInstance = ApplicationModel.defaultModel().getBeanFactory().getBean(MetadataReportInstance.class);
+    }
 
     @Override
     public boolean map(URL url) {
diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizer.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizer.java
index e238ea7..155a778 100644
--- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizer.java
+++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizer.java
@@ -31,6 +31,7 @@ import org.apache.dubbo.rpc.model.ApplicationModel;
 
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
@@ -59,7 +60,6 @@ public class ServiceInstanceMetadataCustomizer implements ServiceInstanceCustomi
     public void customize(ServiceInstance serviceInstance) {
         ApplicationModel applicationModel = serviceInstance.getApplicationModel();
         ExtensionLoader<MetadataParamsFilter> loader = applicationModel.getExtensionLoader(MetadataParamsFilter.class);
-        Set<MetadataParamsFilter> paramsFilters = loader.getSupportedExtensionInstances();
 
         InMemoryWritableMetadataService localMetadataService
                 = (InMemoryWritableMetadataService) WritableMetadataService.getDefaultExtension(applicationModel);
@@ -75,6 +75,7 @@ public class ServiceInstanceMetadataCustomizer implements ServiceInstanceCustomi
         }
         MetadataInfo.ServiceInfo serviceInfo = metadataInfo.getServices().values().iterator().next();
         URL url = serviceInfo.getUrl();
+        List<MetadataParamsFilter> paramsFilters = loader.getActivateExtension(url, "params-filter");
         Map<String, String> allParams = new HashMap<>(url.getParameters());
 
         // load instance params users want to load.
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryTest.java
index 31e7b37..f8378d4 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/ServiceDiscoveryRegistryTest.java
@@ -98,63 +98,65 @@ public class ServiceDiscoveryRegistryTest {
         when(serviceDiscovery.createListener(any())).thenReturn(instanceListener);
         when(serviceDiscovery.getInstances(any())).thenReturn(Collections.emptyList());
 
-        spiedMetadataService  = spy(WritableMetadataService.getDefaultExtension(ApplicationModel.defaultModel()));
+        spiedMetadataService = spy(WritableMetadataService.getDefaultExtension(ApplicationModel.defaultModel()));
         serviceDiscoveryRegistry = new ServiceDiscoveryRegistry(registryURL, serviceDiscovery, spiedMetadataService);
     }
 
     /**
      * Test subscribe
-     *  - Normal case
-     *  - Exception case
-     *    - check=true
-     *    - check=false
+     * - Normal case
+     * - Exception case
+     * - check=true
+     * - check=false
      */
     @Test
     public void testDoSubscribe() {
-        try (MockedStatic<ServiceNameMapping> mockStaticMapping = Mockito.mockStatic(ServiceNameMapping.class, withSettings().defaultAnswer(CALLS_REAL_METHODS))) {
-            mockStaticMapping.when(ServiceNameMapping::getDefaultExtension).thenReturn(mapping);
-            // Exception case, no interface-app mapping found
-            when(mapping.getAndListenServices(any(), any(), any())).thenReturn(Collections.emptySet());
-            // when check = false
-            try {
-                serviceDiscoveryRegistry.doSubscribe(url, testServiceListener);
-            } finally {
-                spiedMetadataService.unsubscribeURL(url);
-            }
-            // when check = true
-            URL checkURL = url.addParameter(CHECK_KEY, true);
-            Exception exceptionShouldHappen = null;
-            try {
-                serviceDiscoveryRegistry.doSubscribe(checkURL, testServiceListener);
-            } catch (IllegalStateException e) {
-                exceptionShouldHappen = e;
-            } finally {
-                spiedMetadataService.unsubscribeURL(checkURL);
-            }
-            if (exceptionShouldHappen == null) {
-                fail();
-            }
-
-            // Normal case
-            Set<String> singleApp = new HashSet<>();
-            singleApp.add(APP_NAME1);
-            when(mapping.getAndListenServices(any(), any(), any())).thenReturn(singleApp);
-            try {
-                serviceDiscoveryRegistry.doSubscribe(checkURL, testServiceListener);
-            } finally {
-                spiedMetadataService.unsubscribeURL(checkURL);
-            }
+        ApplicationModel applicationModel = spy(ApplicationModel.defaultModel());
+        when(applicationModel.getDefaultExtension(ServiceNameMapping.class)).thenReturn(mapping);
+        // Exception case, no interface-app mapping found
+        when(mapping.getAndListenServices(any(), any(), any())).thenReturn(Collections.emptySet());
+        // when check = false
+        try {
+            registryURL = registryURL.setScopeModel(applicationModel);
+            serviceDiscoveryRegistry = new ServiceDiscoveryRegistry(registryURL, serviceDiscovery, spiedMetadataService);
+            serviceDiscoveryRegistry.doSubscribe(url, testServiceListener);
+        } finally {
+            registryURL = registryURL.setScopeModel(null);
+            spiedMetadataService.unsubscribeURL(url);
+        }
+        // when check = true
+        URL checkURL = url.addParameter(CHECK_KEY, true);
+        Exception exceptionShouldHappen = null;
+        try {
+            serviceDiscoveryRegistry.doSubscribe(checkURL, testServiceListener);
+        } catch (IllegalStateException e) {
+            exceptionShouldHappen = e;
+        } finally {
+            spiedMetadataService.unsubscribeURL(checkURL);
+        }
+        if (exceptionShouldHappen == null) {
+            fail();
+        }
+
+        // Normal case
+        Set<String> singleApp = new HashSet<>();
+        singleApp.add(APP_NAME1);
+        when(mapping.getAndListenServices(any(), any(), any())).thenReturn(singleApp);
+        try {
+            serviceDiscoveryRegistry.doSubscribe(checkURL, testServiceListener);
+        } finally {
+            spiedMetadataService.unsubscribeURL(checkURL);
         }
     }
 
     /**
      * Test instance listener registration
-     *  - one app
-     *  - multi apps
-     *  - repeat same multi apps, instance listener shared
-     *  - protocol included in key
-     *  - instance listener gets notified
-     *  - instance listener and service listener rightly mapped
+     * - one app
+     * - multi apps
+     * - repeat same multi apps, instance listener shared
+     * - protocol included in key
+     * - instance listener gets notified
+     * - instance listener and service listener rightly mapped
      */
     @Test
     public void testSubscribeURLs() {
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMappingTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMappingTest.java
index f710e56..353c93b 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMappingTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/MetadataServiceNameMappingTest.java
@@ -18,15 +18,17 @@ package org.apache.dubbo.registry.client.metadata;
 
 import org.apache.dubbo.common.URL;
 import org.apache.dubbo.common.config.configcenter.ConfigItem;
+import org.apache.dubbo.config.ApplicationConfig;
 import org.apache.dubbo.config.MetadataReportConfig;
 import org.apache.dubbo.config.context.ConfigManager;
 import org.apache.dubbo.metadata.report.MetadataReport;
 import org.apache.dubbo.metadata.report.MetadataReportInstance;
 import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.FrameworkModel;
 
+import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
-import org.mockito.MockedStatic;
 import org.mockito.Mockito;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
@@ -42,6 +44,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
 public class MetadataServiceNameMappingTest {
@@ -50,61 +53,73 @@ public class MetadataServiceNameMappingTest {
     private URL url;
     private ConfigManager configManager;
     private MetadataReport metadataReport;
+    private ApplicationModel applicationModel;
 
     @BeforeEach
     public void setUp() {
-        mapping = new MetadataServiceNameMapping();
-        url = URL.valueOf("dubbo://127.0.0.1:20880/TestService?version=1.0.0");
+        applicationModel = new ApplicationModel(FrameworkModel.defaultModel());
         configManager = mock(ConfigManager.class);
         metadataReport = mock(MetadataReport.class);
+        mapping = new MetadataServiceNameMapping();
+        mapping.setApplicationModel(applicationModel);
+        url = URL.valueOf("dubbo://127.0.0.1:20880/TestService?version=1.0.0");
+    }
+
+    @AfterEach
+    public void teardown() {
+        applicationModel.destroy();
     }
 
     @Test
     public void testMap() {
-        try (MockedStatic<ApplicationModel> mockedApplicationModel = Mockito.mockStatic(ApplicationModel.class)) {
-            when(configManager.getMetadataConfigs()).thenReturn(Collections.emptyList());
-            mockedApplicationModel.when(ApplicationModel::getConfigManager).thenReturn(configManager);
-
-            // metadata report config not found
-            boolean result = mapping.map(url);
-            assertFalse(result);
-
-            try (MockedStatic<MetadataReportInstance> mockedMetadataHolder = Mockito.mockStatic(MetadataReportInstance.class)) {
-                when(configManager.getMetadataConfigs()).thenReturn(Arrays.asList(new MetadataReportConfig()));
-                mockedMetadataHolder.when(() -> ApplicationModel.defaultModel().getBeanFactory().getBean(MetadataReportInstance.class).getMetadataReport(any())).thenReturn(metadataReport);
-                when(metadataReport.registerServiceAppMapping(any(), any(), any())).thenReturn(true);
-
-                // metadata report directly
-                result = mapping.map(url);
-                assertTrue(result);
-
-                // metadata report using cas and retry, succeeded after retried 5 times
-                when(metadataReport.registerServiceAppMapping(any(), any(), any())).thenReturn(false);
-                when(metadataReport.getConfigItem(any(), any())).thenReturn(new ConfigItem());
-                when(metadataReport.registerServiceAppMapping(any(), any(), any(), any())).thenAnswer(new Answer<Boolean>() {
-                    private int counter = 0;
-                    @Override
-                    public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable {
-                        if (++counter == 5) {
-                            return true;
-                        }
-                        return false;
-                    }
-                });
-                assertTrue(mapping.map(url));
-
-                // metadata report using cas and retry, failed after 6 times retry
-                when(metadataReport.registerServiceAppMapping(any(), any(), any(), any())).thenReturn(false);
-                Exception exceptionExpected = null;
-                try {
-                    mapping.map(url);
-                } catch (RuntimeException e) {
-                    exceptionExpected = e;
-                }
-                if (exceptionExpected == null) {
-                    fail();
+        ApplicationModel mockedApplicationModel = spy(ApplicationModel.defaultModel());
+
+        when(configManager.getMetadataConfigs()).thenReturn(Collections.emptyList());
+        Mockito.when(mockedApplicationModel.getApplicationConfigManager()).thenReturn(configManager);
+        Mockito.when(mockedApplicationModel.getCurrentConfig()).thenReturn(new ApplicationConfig("test"));
+
+        // metadata report config not found
+        mapping.setApplicationModel(mockedApplicationModel);
+        boolean result = mapping.map(url);
+        assertFalse(result);
+
+        when(configManager.getMetadataConfigs()).thenReturn(Arrays.asList(new MetadataReportConfig()));
+        MetadataReportInstance reportInstance = mock(MetadataReportInstance.class);
+        Mockito.when(reportInstance.getMetadataReport(any())).thenReturn(metadataReport);
+        mapping.metadataReportInstance = reportInstance;
+
+        when(metadataReport.registerServiceAppMapping(any(), any(), any())).thenReturn(true);
+
+        // metadata report directly
+        result = mapping.map(url);
+        assertTrue(result);
+
+        // metadata report using cas and retry, succeeded after retried 5 times
+        when(metadataReport.registerServiceAppMapping(any(), any(), any())).thenReturn(false);
+        when(metadataReport.getConfigItem(any(), any())).thenReturn(new ConfigItem());
+        when(metadataReport.registerServiceAppMapping(any(), any(), any(), any())).thenAnswer(new Answer<Boolean>() {
+            private int counter = 0;
+
+            @Override
+            public Boolean answer(InvocationOnMock invocationOnMock) throws Throwable {
+                if (++counter == 5) {
+                    return true;
                 }
+                return false;
             }
+        });
+        assertTrue(mapping.map(url));
+
+        // metadata report using cas and retry, failed after 6 times retry
+        when(metadataReport.registerServiceAppMapping(any(), any(), any(), any())).thenReturn(false);
+        Exception exceptionExpected = null;
+        try {
+            mapping.map(url);
+        } catch (RuntimeException e) {
+            exceptionExpected = e;
+        }
+        if (exceptionExpected == null) {
+            fail();
         }
     }
 
@@ -115,13 +130,14 @@ public class MetadataServiceNameMappingTest {
     public void testGet() {
         Set<String> set = new HashSet<>();
         set.add("app1");
-        try (MockedStatic<MetadataReportInstance> mockedMetadataHolder = Mockito.mockStatic(MetadataReportInstance.class)) {
-            mockedMetadataHolder.when(() -> ApplicationModel.defaultModel().getBeanFactory().getBean(MetadataReportInstance.class).getMetadataReport(any())).thenReturn(metadataReport);
-            when(metadataReport.getServiceAppMapping(any(), any())).thenReturn(set);
 
-            Set<String> result = mapping.get(url);
-            assertEquals(set, result);
-        }
+        MetadataReportInstance reportInstance = mock(MetadataReportInstance.class);
+        Mockito.when(reportInstance.getMetadataReport(any())).thenReturn(metadataReport);
+        when(metadataReport.getServiceAppMapping(any(), any())).thenReturn(set);
+
+        mapping.metadataReportInstance = reportInstance;
+        Set<String> result = mapping.get(url);
+        assertEquals(set, result);
     }
 
     /**
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizerTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizerTest.java
index 08e7c72..a33831f 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizerTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/ServiceInstanceMetadataCustomizerTest.java
@@ -82,7 +82,7 @@ public class ServiceInstanceMetadataCustomizerTest {
         try (MockedStatic<ConfigurationUtils> mockedUtils = Mockito.mockStatic(ConfigurationUtils.class)) {
             try (MockedStatic<WritableMetadataService> mockMetadataService = Mockito.mockStatic(WritableMetadataService.class)) {
                 mockMetadataService.when(() -> WritableMetadataService.getDefaultExtension(ApplicationModel.defaultModel())).thenReturn(metadataService);
-                mockedUtils.when(() -> ConfigurationUtils.getProperty(DUBBO_LABELS)).thenReturn("k1=v1;k2=v2");
+                mockedUtils.when(() -> ConfigurationUtils.getProperty(ApplicationModel.defaultModel(), DUBBO_LABELS)).thenReturn("k1=v1;k2=v2");
 //            mockedUtils.when(() -> ConfigurationUtils.getProperty(DUBBO_ENV_KEYS)).thenReturn("ENV_KEY1;ENV_KEY1");
 //            mockedUtils.when(() -> ConfigurationUtils.getProperty(ENV_KEY1)).thenReturn("");
 
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/store/InMemoryMetadataServiceTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/store/InMemoryMetadataServiceTest.java
index 76fcf84..f1ad1fb 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/store/InMemoryMetadataServiceTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/metadata/store/InMemoryMetadataServiceTest.java
@@ -69,6 +69,7 @@ public class InMemoryMetadataServiceTest {
     @Test
     public void testExport() {
         InMemoryWritableMetadataService metadataService = new InMemoryWritableMetadataService();
+        metadataService.setApplicationModel(ApplicationModel.defaultModel());
         // export normal url
         URL url = URL.valueOf("dubbo://30.225.21.30:20880/org.apache.dubbo.registry.service.DemoService?" +
             "REGISTRY_CLUSTER=registry1&anyhost=true&application=demo-provider2&delay=5000&deprecated=false&dubbo=2.0.2" +
@@ -155,6 +156,7 @@ public class InMemoryMetadataServiceTest {
     @Test
     public void testUnExport() {
         InMemoryWritableMetadataService metadataService = new InMemoryWritableMetadataService();
+        metadataService.setApplicationModel(ApplicationModel.defaultModel());
         // export normal url
         URL url = URL.valueOf("dubbo://30.225.21.30:20880/org.apache.dubbo.registry.service.DemoService?" +
             "REGISTRY_CLUSTER=registry1&anyhost=true&application=demo-provider2&delay=5000&deprecated=false&dubbo=2.0.2" +
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationRuleListenerTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationRuleListenerTest.java
index 406b85d..16395d9 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationRuleListenerTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/MigrationRuleListenerTest.java
@@ -126,6 +126,7 @@ public class MigrationRuleListenerTest {
         MigrationRuleHandler<?> handler = Mockito.mock(MigrationRuleHandler.class, Mockito.withSettings().verboseLogging());
 
         MigrationRuleListener migrationRuleListener = new MigrationRuleListener();
+        migrationRuleListener.setApplicationModel(ApplicationModel.defaultModel());
         MigrationInvoker<?> migrationInvoker = Mockito.mock(MigrationInvoker.class);
         migrationRuleListener.getHandlers().put(migrationInvoker, handler);
         migrationRuleListener.onRefer(null, migrationInvoker, consumerURL, null);
@@ -171,6 +172,7 @@ public class MigrationRuleListenerTest {
         // Both local rule and remote rule are here
         // Local rule with one delayed task started to apply
         MigrationRuleListener migrationRuleListener = new MigrationRuleListener();
+        migrationRuleListener.setApplicationModel(ApplicationModel.defaultModel());
         Assertions.assertNotNull(migrationRuleListener.localRuleMigrationFuture);
         Assertions.assertNull(migrationRuleListener.ruleMigrationFuture);
         MigrationInvoker<?> migrationInvoker = Mockito.mock(MigrationInvoker.class);
diff --git a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/model/MigrationRuleTest.java b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/model/MigrationRuleTest.java
index 2ea3be6..844ab38 100644
--- a/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/model/MigrationRuleTest.java
+++ b/dubbo-registry/dubbo-registry-api/src/test/java/org/apache/dubbo/registry/client/migration/model/MigrationRuleTest.java
@@ -24,7 +24,6 @@ import org.apache.dubbo.rpc.model.ModuleModel;
 
 import org.junit.jupiter.api.Test;
 import org.mockito.ArgumentMatchers;
-import org.mockito.MockedStatic;
 import org.mockito.Mockito;
 
 import java.util.Collections;
@@ -35,87 +34,84 @@ import static org.apache.dubbo.common.constants.RegistryConstants.REGISTRY_CLUST
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.Mockito.CALLS_REAL_METHODS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
-import static org.mockito.Mockito.withSettings;
 
 public class MigrationRuleTest {
     private static ServiceNameMapping mapping = mock(ServiceNameMapping.class);
 
     @Test
     public void test_parse() {
-        try (MockedStatic<ServiceNameMapping> mockStaticMapping = Mockito.mockStatic(ServiceNameMapping.class, withSettings().defaultAnswer(CALLS_REAL_METHODS))) {
-            mockStaticMapping.when(ServiceNameMapping::getDefaultExtension).thenReturn(mapping);
-            when(mapping.getServices(any())).thenReturn(Collections.emptySet());
+        when(mapping.getServices(any())).thenReturn(Collections.emptySet());
 
-            String rule = "key: demo-consumer\n" +
-                "step: APPLICATION_FIRST\n" +
-                "threshold: 1.0\n" +
-                "proportion: 60\n" +
-                "delay: 60\n" +
-                "force: false\n" +
-                "interfaces:\n" +
-                "  - serviceKey: DemoService:1.0.0\n" +
-                "    threshold: 0.5\n" +
-                "    proportion: 30\n" +
-                "    delay: 30\n" +
-                "    force: true\n" +
-                "    step: APPLICATION_FIRST\n" +
-                "  - serviceKey: GreetingService:1.0.0\n" +
-                "    step: FORCE_APPLICATION\n" +
-                "applications:\n" +
-                "  - serviceKey: TestApplication\n" +
-                "    threshold: 0.3\n" +
-                "    proportion: 20\n" +
-                "    delay: 10\n" +
-                "    force: false\n" +
-                "    step: FORCE_INTERFACE\n";
+        String rule = "key: demo-consumer\n" +
+            "step: APPLICATION_FIRST\n" +
+            "threshold: 1.0\n" +
+            "proportion: 60\n" +
+            "delay: 60\n" +
+            "force: false\n" +
+            "interfaces:\n" +
+            "  - serviceKey: DemoService:1.0.0\n" +
+            "    threshold: 0.5\n" +
+            "    proportion: 30\n" +
+            "    delay: 30\n" +
+            "    force: true\n" +
+            "    step: APPLICATION_FIRST\n" +
+            "  - serviceKey: GreetingService:1.0.0\n" +
+            "    step: FORCE_APPLICATION\n" +
+            "applications:\n" +
+            "  - serviceKey: TestApplication\n" +
+            "    threshold: 0.3\n" +
+            "    proportion: 20\n" +
+            "    delay: 10\n" +
+            "    force: false\n" +
+            "    step: FORCE_INTERFACE\n";
 
-            MigrationRule migrationRule = MigrationRule.parse(rule);
-            assertEquals("demo-consumer", migrationRule.getKey());
-            assertEquals(MigrationStep.APPLICATION_FIRST, migrationRule.getStep());
-            assertEquals(1.0f, migrationRule.getThreshold());
-            assertEquals(60, migrationRule.getProportion());
-            assertEquals(60, migrationRule.getDelay());
-            assertEquals(false, migrationRule.getForce());
+        MigrationRule migrationRule = MigrationRule.parse(rule);
+        assertEquals("demo-consumer", migrationRule.getKey());
+        assertEquals(MigrationStep.APPLICATION_FIRST, migrationRule.getStep());
+        assertEquals(1.0f, migrationRule.getThreshold());
+        assertEquals(60, migrationRule.getProportion());
+        assertEquals(60, migrationRule.getDelay());
+        assertEquals(false, migrationRule.getForce());
 
-            URL url = Mockito.mock(URL.class);
-            ModuleModel defaultModule = ApplicationModel.defaultModel().getDefaultModule();
-            url.setScopeModel(defaultModule);
-            Mockito.when(url.getDisplayServiceKey()).thenReturn("DemoService:1.0.0");
-            Mockito.when(url.getParameter(ArgumentMatchers.eq(REGISTRY_CLUSTER_TYPE_KEY), anyString())).thenReturn("default");
-            Mockito.when(url.getParameter(ArgumentMatchers.eq(REGISTRY_CLUSTER_TYPE_KEY), anyString())).thenReturn("default");
+        URL url = Mockito.mock(URL.class);
+        ModuleModel defaultModule = Mockito.spy(ApplicationModel.defaultModel().getDefaultModule());
+        Mockito.when(defaultModule.getDefaultExtension(ServiceNameMapping.class)).thenReturn(mapping);
 
-            assertEquals(migrationRule.getInterfaces().size(), 2);
+        Mockito.when(url.getScopeModel()).thenReturn(defaultModule);
+        Mockito.when(url.getDisplayServiceKey()).thenReturn("DemoService:1.0.0");
+        Mockito.when(url.getParameter(ArgumentMatchers.eq(REGISTRY_CLUSTER_TYPE_KEY), anyString())).thenReturn("default");
+        Mockito.when(url.getParameter(ArgumentMatchers.eq(REGISTRY_CLUSTER_TYPE_KEY), anyString())).thenReturn("default");
 
-            assertEquals(0.5f, migrationRule.getThreshold(url));
-            assertEquals(30, migrationRule.getProportion(url));
-            assertEquals(30, migrationRule.getDelay(url));
-            assertEquals(true, migrationRule.getForce(url));
-            assertEquals(MigrationStep.APPLICATION_FIRST, migrationRule.getStep(url));
+        assertEquals(migrationRule.getInterfaces().size(), 2);
 
-            Mockito.when(url.getDisplayServiceKey()).thenReturn("GreetingService:1.0.0");
-            assertEquals(1.0f, migrationRule.getThreshold(url));
-            assertEquals(60, migrationRule.getProportion(url));
-            assertEquals(60, migrationRule.getDelay(url));
-            assertEquals(false, migrationRule.getForce(url));
-            assertEquals(MigrationStep.FORCE_APPLICATION, migrationRule.getStep(url));
+        assertEquals(0.5f, migrationRule.getThreshold(url));
+        assertEquals(30, migrationRule.getProportion(url));
+        assertEquals(30, migrationRule.getDelay(url));
+        assertEquals(true, migrationRule.getForce(url));
+        assertEquals(MigrationStep.APPLICATION_FIRST, migrationRule.getStep(url));
 
-            Mockito.when(url.getDisplayServiceKey()).thenReturn("GreetingService:1.0.1");
-            Mockito.when(url.getServiceInterface()).thenReturn("GreetingService");
-            WritableMetadataService metadataService = WritableMetadataService.getDefaultExtension(defaultModule);
-            metadataService.putCachedMapping(ServiceNameMapping.buildMappingKey(url), Collections.singleton("TestApplication"));
+        Mockito.when(url.getDisplayServiceKey()).thenReturn("GreetingService:1.0.0");
+        assertEquals(1.0f, migrationRule.getThreshold(url));
+        assertEquals(60, migrationRule.getProportion(url));
+        assertEquals(60, migrationRule.getDelay(url));
+        assertEquals(false, migrationRule.getForce(url));
+        assertEquals(MigrationStep.FORCE_APPLICATION, migrationRule.getStep(url));
 
-            Set<String> services = new HashSet<>();
-            services.add("TestApplication");
-            when(mapping.getServices(any())).thenReturn(services);
-            assertEquals(0.3f, migrationRule.getThreshold(url));
-            assertEquals(20, migrationRule.getProportion(url));
-            assertEquals(10, migrationRule.getDelay(url));
-            assertEquals(false, migrationRule.getForce(url));
-            assertEquals(MigrationStep.FORCE_INTERFACE, migrationRule.getStep(url));
-            metadataService.removeCachedMapping("GreetingService");
-        }
+        Mockito.when(url.getDisplayServiceKey()).thenReturn("GreetingService:1.0.1");
+        Mockito.when(url.getServiceInterface()).thenReturn("GreetingService");
+        WritableMetadataService metadataService = WritableMetadataService.getDefaultExtension(defaultModule);
+        metadataService.putCachedMapping(ServiceNameMapping.buildMappingKey(url), Collections.singleton("TestApplication"));
+
+        Set<String> services = new HashSet<>();
+        services.add("TestApplication");
+        when(mapping.getServices(any())).thenReturn(services);
+        assertEquals(0.3f, migrationRule.getThreshold(url));
+        assertEquals(20, migrationRule.getProportion(url));
+        assertEquals(10, migrationRule.getDelay(url));
+        assertEquals(false, migrationRule.getForce(url));
+        assertEquals(MigrationStep.FORCE_INTERFACE, migrationRule.getStep(url));
+        metadataService.removeCachedMapping("GreetingService");
     }
 }