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

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


The following commit(s) were added to refs/heads/3.0 by this push:
     new f459584  Add unit test for common-module (#9304)
f459584 is described below

commit f459584838422fa1aed94b2fcf04ef731cec2bff
Author: 灼华 <[email protected]>
AuthorDate: Sun Nov 28 16:44:22 2021 +0800

    Add unit test for common-module (#9304)
---
 .../common/beans/ScopeBeanExtensionInjector.java   |   1 +
 .../common/config/CompositeConfiguration.java      |   6 +-
 .../apache/dubbo/common/config/Environment.java    |   9 +-
 .../config/OrderedPropertiesConfiguration.java     |  10 +-
 .../extension/inject/SpiExtensionInjector.java     |   1 +
 .../reporter/FrameworkStatusReportService.java     |  12 +--
 .../org/apache/dubbo/common/utils/ConfigUtils.java |  10 +-
 .../common/config/CompositeConfigurationTest.java  |  21 +++-
 .../dubbo/common/config/EnvironmentTest.java       |  63 +++++++++++-
 ...ava => OrderedPropertiesConfigurationTest.java} |   5 +-
 .../common/config/PropertiesConfigurationTest.java |  26 +++--
 .../inject/AdaptiveExtensionInjectorTest.java      |  58 +++++++++++
 .../reporter/FrameworkStatusReportServiceTest.java | 106 +++++++++++++++++++++
 .../reporter/MockFrameworkStatusReporter.java}     |  20 +++-
 .../apache/dubbo/common/utils/ConfigUtilsTest.java |  10 ++
 .../context/ConfigConfigurationAdapterTest.java}   |  25 +++--
 ....common.status.reporter.FrameworkStatusReporter |   1 +
 .../src/test/resources/dubbo-migration.yaml        |  22 +++++
 18 files changed, 356 insertions(+), 50 deletions(-)

diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/beans/ScopeBeanExtensionInjector.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/beans/ScopeBeanExtensionInjector.java
index 05dc985..0b691c0 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/beans/ScopeBeanExtensionInjector.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/beans/ScopeBeanExtensionInjector.java
@@ -25,6 +25,7 @@ import org.apache.dubbo.rpc.model.ScopeModelAware;
  * Inject scope bean to SPI extension instance
  */
 public class ScopeBeanExtensionInjector implements ExtensionInjector, 
ScopeModelAware {
+    public static final String NAME = "scopeBean";
     private ScopeModel scopeModel;
     private ScopeBeanFactory beanFactory;
 
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
index dbb49de..887591b 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/CompositeConfiguration.java
@@ -18,6 +18,7 @@ package org.apache.dubbo.common.config;
 
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
+import org.apache.dubbo.common.utils.ArrayUtils;
 
 import java.util.Arrays;
 import java.util.LinkedList;
@@ -32,7 +33,7 @@ public class CompositeConfiguration implements Configuration {
     /**
      * List holding all the configuration
      */
-    private List<Configuration> configList = new LinkedList<Configuration>();
+    private List<Configuration> configList = new LinkedList<>();
 
     //FIXME, consider change configList to SortedMap to replace this boolean 
status.
     private boolean dynamicIncluded;
@@ -41,8 +42,7 @@ public class CompositeConfiguration implements Configuration {
     }
 
     public CompositeConfiguration(Configuration... configurations) {
-        this();
-        if (configurations != null && configurations.length > 0) {
+        if (ArrayUtils.isNotEmpty(configurations)) {
             Arrays.stream(configurations).filter(config -> 
!configList.contains(config)).forEach(configList::add);
         }
     }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
index d5dd632..b3bbbf1 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/config/Environment.java
@@ -24,6 +24,7 @@ import org.apache.dubbo.common.extension.DisableInject;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 import org.apache.dubbo.common.utils.ConfigUtils;
+import org.apache.dubbo.common.utils.StringUtils;
 import org.apache.dubbo.config.AbstractConfig;
 import org.apache.dubbo.config.context.ConfigConfigurationAdapter;
 import org.apache.dubbo.rpc.model.ScopeModel;
@@ -90,9 +91,9 @@ public class Environment extends LifecycleAdapter implements 
ApplicationExt {
 
     private void loadMigrationRule() {
         String path = System.getProperty(CommonConstants.DUBBO_MIGRATION_KEY);
-        if (path == null || path.length() == 0) {
+        if (StringUtils.isEmpty(path)) {
             path = System.getenv(CommonConstants.DUBBO_MIGRATION_KEY);
-            if (path == null || path.length() == 0) {
+            if (StringUtils.isEmpty(path)) {
                 path = CommonConstants.DEFAULT_DUBBO_MIGRATION_FILE;
             }
         }
@@ -169,7 +170,7 @@ public class Environment extends LifecycleAdapter 
implements ApplicationExt {
      */
     public Configuration getPrefixedConfiguration(AbstractConfig config, 
String prefix) {
 
-        // The sequence would be: SystemConfiguration -> 
AppExternalConfiguration -> ExternalConfiguration  -> AppConfiguration -> 
AbstractConfig -> PropertiesConfiguration
+        // The sequence would be: SystemConfiguration -> 
EnvironmentConfiguration -> AppExternalConfiguration -> ExternalConfiguration  
-> AppConfiguration -> AbstractConfig -> PropertiesConfiguration
         Configuration instanceConfiguration = new 
ConfigConfigurationAdapter(config, prefix);
         CompositeConfiguration compositeConfiguration = new 
CompositeConfiguration();
         compositeConfiguration.addConfiguration(systemConfiguration);
@@ -210,7 +211,7 @@ public class Environment extends LifecycleAdapter 
implements ApplicationExt {
      * @return
      */
     public List<Map<String, String>> getConfigurationMaps(AbstractConfig 
config, String prefix) {
-        // The sequence would be: SystemConfiguration -> 
AppExternalConfiguration -> ExternalConfiguration  -> AppConfiguration -> 
AbstractConfig -> PropertiesConfiguration
+        // The sequence would be: SystemConfiguration -> 
EnvironmentConfiguration -> AppExternalConfiguration -> ExternalConfiguration  
-> AppConfiguration -> AbstractConfig -> PropertiesConfiguration
 
         List<Map<String, String>> maps = new ArrayList<>();
         maps.add(systemConfiguration.getProperties());
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java
index 734eda5..f16fa7b 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/OrderedPropertiesConfiguration.java
@@ -17,6 +17,7 @@
 package org.apache.dubbo.common.config;
 
 import org.apache.dubbo.common.extension.ExtensionLoader;
+import org.apache.dubbo.common.utils.CollectionUtils;
 import org.apache.dubbo.rpc.model.ModuleModel;
 
 import java.util.ArrayList;
@@ -38,7 +39,7 @@ public class OrderedPropertiesConfiguration implements 
Configuration{
         properties = new Properties();
         ExtensionLoader<OrderedPropertiesProvider> 
propertiesProviderExtensionLoader = 
moduleModel.getExtensionLoader(OrderedPropertiesProvider.class);
         Set<String> propertiesProviderNames = 
propertiesProviderExtensionLoader.getSupportedExtensions();
-        if (propertiesProviderNames == null || 
propertiesProviderNames.isEmpty()) {
+        if (CollectionUtils.isEmpty(propertiesProviderNames)) {
             return;
         }
         List<OrderedPropertiesProvider> orderedPropertiesProviders = new 
ArrayList<>();
@@ -47,14 +48,11 @@ public class OrderedPropertiesConfiguration implements 
Configuration{
         }
 
         //order the propertiesProvider according the priority descending
-        orderedPropertiesProviders.sort((OrderedPropertiesProvider a, 
OrderedPropertiesProvider b) -> {
-            return b.priority() - a.priority();
-        });
+        orderedPropertiesProviders.sort((a, b) -> b.priority() - a.priority());
 
 
         //override the properties.
-        for (OrderedPropertiesProvider orderedPropertiesProvider :
-            orderedPropertiesProviders) {
+        for (OrderedPropertiesProvider orderedPropertiesProvider : 
orderedPropertiesProviders) {
             properties.putAll(orderedPropertiesProvider.initProperties());
         }
 
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/inject/SpiExtensionInjector.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/inject/SpiExtensionInjector.java
index d45cc7b..d30ec85 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/extension/inject/SpiExtensionInjector.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/extension/inject/SpiExtensionInjector.java
@@ -25,6 +25,7 @@ import org.apache.dubbo.common.extension.SPI;
  * SpiExtensionInjector
  */
 public class SpiExtensionInjector implements ExtensionInjector {
+    public static final String NAME = "spi";
 
     private ExtensionAccessor extensionAccessor;
 
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportService.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportService.java
index 2dacee5..31b4fba 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportService.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportService.java
@@ -27,9 +27,6 @@ import com.google.gson.Gson;
 import java.util.HashMap;
 import java.util.Set;
 
-/**
- *
- */
 public class FrameworkStatusReportService implements ScopeModelAware {
 
     private static final Logger logger = 
LoggerFactory.getLogger(FrameworkStatusReporter.class);
@@ -76,11 +73,10 @@ public class FrameworkStatusReportService implements 
ScopeModelAware {
     }
 
     public String createRegistrationReport(String status) {
-        return "{\"application\":\"" +
-            applicationModel.getApplicationName() +
-            "\",\"status\":\"" +
-            status +
-            "\"}";
+        HashMap<String, String> registration = new HashMap<>();
+        registration.put("application", applicationModel.getApplicationName());
+        registration.put("status", status);
+        return gson.toJson(registration);
     }
 
     public String createConsumptionReport(String interfaceName, String 
version, String group, String status) {
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ConfigUtils.java 
b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ConfigUtils.java
index 57923fb..1a5bf8b 100644
--- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ConfigUtils.java
+++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ConfigUtils.java
@@ -136,7 +136,7 @@ public class ConfigUtils {
     }
 
     public static String replaceProperty(String expression, Configuration 
configuration) {
-        if (expression == null || expression.length() == 0 || 
expression.indexOf('$') < 0) {
+        if (StringUtils.isEmpty(expression)|| expression.indexOf('$') < 0) {
             return expression;
         }
         Matcher matcher = VARIABLE_PATTERN.matcher(expression);
@@ -160,15 +160,15 @@ public class ConfigUtils {
 
     /**
      * Get dubbo properties.
-     * It is not recommended to use this method to modify dubbo properties.
+     * It is not recommended using this method to modify dubbo properties.
      *
      * @return
      */
     public static Properties getProperties(Set<ClassLoader> classLoaders) {
         String path = System.getProperty(CommonConstants.DUBBO_PROPERTIES_KEY);
-        if (path == null || path.length() == 0) {
+        if (StringUtils.isEmpty(path)) {
             path = System.getenv(CommonConstants.DUBBO_PROPERTIES_KEY);
-            if (path == null || path.length() == 0) {
+            if (StringUtils.isEmpty(path)) {
                 path = CommonConstants.DEFAULT_DUBBO_PROPERTIES;
             }
         }
@@ -249,7 +249,7 @@ public class ConfigUtils {
         if (!allowMultiFile) {
             if (set.size() > 1) {
                 String errMsg = String.format("only 1 %s file is expected, but 
%d dubbo.properties files found on class path: %s",
-                    fileName, set.size(), set.toString());
+                    fileName, set.size(), set);
                 logger.warn(errMsg);
             }
 
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/CompositeConfigurationTest.java
 
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/CompositeConfigurationTest.java
index fd96ab7..1022f97 100644
--- 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/CompositeConfigurationTest.java
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/CompositeConfigurationTest.java
@@ -16,8 +16,27 @@
  */
 package org.apache.dubbo.common.config;
 
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
 /**
- *
+ * {@link CompositeConfiguration}
  */
 public class CompositeConfigurationTest {
+
+    @Test
+    public void test() {
+        InmemoryConfiguration inmemoryConfiguration1 = new 
InmemoryConfiguration();
+        InmemoryConfiguration inmemoryConfiguration2 = new 
InmemoryConfiguration();
+        InmemoryConfiguration inmemoryConfiguration3 = new 
InmemoryConfiguration();
+        CompositeConfiguration configuration = new CompositeConfiguration(new 
Configuration[]{inmemoryConfiguration1});
+        configuration.addConfiguration(inmemoryConfiguration2);
+        configuration.addConfigurationFirst(inmemoryConfiguration3);
+
+        inmemoryConfiguration1.addProperty("k", "v1");
+        inmemoryConfiguration2.addProperty("k", "v2");
+        inmemoryConfiguration3.addProperty("k", "v3");
+
+        Assertions.assertEquals(configuration.getInternalProperty("k"), "v3");
+    }
 }
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/EnvironmentTest.java
 
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/EnvironmentTest.java
index 1ee3586..699edef 100644
--- 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/EnvironmentTest.java
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/EnvironmentTest.java
@@ -16,22 +16,29 @@
  */
 package org.apache.dubbo.common.config;
 
+import org.apache.dubbo.common.config.configcenter.DynamicConfiguration;
+import 
org.apache.dubbo.common.config.configcenter.wrapper.CompositeDynamicConfiguration;
+import org.apache.dubbo.config.RegistryConfig;
 import org.apache.dubbo.rpc.model.ApplicationModel;
 
+import org.apache.dubbo.rpc.model.FrameworkModel;
+import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
 import java.util.LinkedHashMap;
+import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 /**
- *
+ * {@link Environment}
  */
 public class EnvironmentTest {
 
     @Test
-    public void testResolvePlaceholders1() {
+    public void testResolvePlaceholders() {
         Environment environment = 
ApplicationModel.defaultModel().getModelEnvironment();
 
         Map<String, String> externalMap = new LinkedHashMap<>();
@@ -53,4 +60,56 @@ public class EnvironmentTest {
         }
 
     }
+
+    @Test
+    public void test() {
+        FrameworkModel frameworkModel = new FrameworkModel();
+        ApplicationModel applicationModel = new 
ApplicationModel(frameworkModel);
+        Environment environment = applicationModel.getModelEnvironment();
+
+        // test getPrefixedConfiguration
+        RegistryConfig registryConfig = new RegistryConfig();
+        registryConfig.setAddress("127.0.0.1");
+        registryConfig.setPort(2181);
+        String prefix = "dubbo.registry";
+        Configuration prefixedConfiguration = 
environment.getPrefixedConfiguration(registryConfig, prefix);
+        Assertions.assertTrue(prefixedConfiguration instanceof 
PrefixedConfiguration);
+
+        // test getConfigurationMaps(AbstractConfig config, String prefix)
+        List<Map<String, String>> configurationMaps = 
environment.getConfigurationMaps(registryConfig, prefix);
+        Assertions.assertEquals(configurationMaps.size(), 7);
+
+        // test getConfigurationMaps()
+        configurationMaps = environment.getConfigurationMaps();
+        Assertions.assertEquals(configurationMaps.size(), 6);
+
+        CompositeConfiguration configuration1 = environment.getConfiguration();
+        CompositeConfiguration configuration2 = environment.getConfiguration();
+        Assertions.assertEquals(configuration1, configuration2);
+
+        // test getDynamicConfiguration
+        Optional<DynamicConfiguration> dynamicConfiguration = 
environment.getDynamicConfiguration();
+        Assertions.assertFalse(dynamicConfiguration.isPresent());
+        // test getDynamicGlobalConfiguration
+        Configuration dynamicGlobalConfiguration = 
environment.getDynamicGlobalConfiguration();
+        Assertions.assertEquals(dynamicGlobalConfiguration, configuration1);
+
+        CompositeDynamicConfiguration compositeDynamicConfiguration = new 
CompositeDynamicConfiguration();
+        environment.setDynamicConfiguration(compositeDynamicConfiguration);
+        dynamicConfiguration = environment.getDynamicConfiguration();
+        Assertions.assertEquals(dynamicConfiguration.get(), 
compositeDynamicConfiguration);
+
+        dynamicGlobalConfiguration = 
environment.getDynamicGlobalConfiguration();
+        Assertions.assertNotEquals(dynamicGlobalConfiguration, configuration1);
+
+        // test destroy
+        environment.destroy();
+        Assertions.assertNull(environment.getSystemConfiguration());
+        Assertions.assertNull(environment.getEnvironmentConfiguration());
+        Assertions.assertNull(environment.getAppExternalConfiguration());
+        Assertions.assertNull(environment.getExternalConfiguration());
+        Assertions.assertNull(environment.getAppConfiguration());
+
+        frameworkModel.destroy();
+    }
 }
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/PropertiesConfigurationTest.java
 
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/OrderedPropertiesConfigurationTest.java
similarity index 92%
copy from 
dubbo-common/src/test/java/org/apache/dubbo/common/config/PropertiesConfigurationTest.java
copy to 
dubbo-common/src/test/java/org/apache/dubbo/common/config/OrderedPropertiesConfigurationTest.java
index 4291676..64578bf 100644
--- 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/PropertiesConfigurationTest.java
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/OrderedPropertiesConfigurationTest.java
@@ -22,7 +22,10 @@ import org.apache.dubbo.rpc.model.ApplicationModel;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-public class PropertiesConfigurationTest {
+/**
+ * {@link OrderedPropertiesConfiguration}
+ */
+public class OrderedPropertiesConfigurationTest {
 
     @Test
     public void testOrderPropertiesProviders() {
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/PropertiesConfigurationTest.java
 
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/PropertiesConfigurationTest.java
index 4291676..55afe86 100644
--- 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/PropertiesConfigurationTest.java
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/common/config/PropertiesConfigurationTest.java
@@ -16,18 +16,32 @@
  */
 package org.apache.dubbo.common.config;
 
-
 import org.apache.dubbo.rpc.model.ApplicationModel;
-
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+import java.util.Map;
+
+/**
+ * {@link PropertiesConfiguration}
+ */
 public class PropertiesConfigurationTest {
 
     @Test
-    public void testOrderPropertiesProviders() {
-        OrderedPropertiesConfiguration configuration = new 
OrderedPropertiesConfiguration(ApplicationModel.defaultModel().getDefaultModule());
-        Assertions.assertEquals("999", 
configuration.getInternalProperty("testKey"));
-    }
+    public void test() {
+        PropertiesConfiguration propertiesConfiguration = new 
PropertiesConfiguration(ApplicationModel.defaultModel());
+
+        Map<String, String> properties = 
propertiesConfiguration.getProperties();
+        Assertions.assertEquals(properties.get("dubbo"), "properties");
+        
Assertions.assertEquals(properties.get("dubbo.application.enable-file-cache"), 
"false");
+        Assertions.assertEquals(properties.get("dubbo.service.shutdown.wait"), 
"200");
 
+        Assertions.assertEquals(propertiesConfiguration.getProperty("dubbo"), 
"properties");
+        
Assertions.assertEquals(propertiesConfiguration.getInternalProperty("dubbo"), 
"properties");
+
+        propertiesConfiguration.setProperty("k1", "v1");
+        Assertions.assertEquals(propertiesConfiguration.getProperty("k1"), 
"v1");
+        propertiesConfiguration.remove("k1");
+        Assertions.assertNull(propertiesConfiguration.getProperty("k1"));
+    }
 }
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjectorTest.java
 
b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjectorTest.java
new file mode 100644
index 0000000..cf40f50
--- /dev/null
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/common/extension/inject/AdaptiveExtensionInjectorTest.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.common.extension.inject;
+
+import org.apache.dubbo.common.beans.ScopeBeanExtensionInjector;
+import org.apache.dubbo.common.beans.factory.ScopeBeanFactory;
+import org.apache.dubbo.common.extension.ExtensionInjector;
+import org.apache.dubbo.common.extension.ExtensionLoader;
+import org.apache.dubbo.common.extension.director.FooFrameworkProvider;
+import org.apache.dubbo.rpc.model.FrameworkModel;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+/**
+ * {@link AdaptiveExtensionInjector}
+ * {@link ScopeBeanExtensionInjector}
+ * {@link SpiExtensionInjector}
+ */
+public class AdaptiveExtensionInjectorTest {
+
+    @Test
+    public void test() {
+        FrameworkModel frameworkModel = new FrameworkModel();
+        ExtensionLoader<ExtensionInjector> extensionLoader = 
frameworkModel.getExtensionLoader(ExtensionInjector.class);
+
+        ExtensionInjector adaptiveExtensionInjector = 
extensionLoader.getAdaptiveExtension();
+        ExtensionInjector scopeExtensionInjector = 
extensionLoader.getExtension(ScopeBeanExtensionInjector.NAME);
+        ExtensionInjector spiExtensionInjector = 
extensionLoader.getExtension(SpiExtensionInjector.NAME);
+
+        FooFrameworkProvider testFrameworkProvider = 
adaptiveExtensionInjector.getInstance(FooFrameworkProvider.class, 
"testFrameworkProvider");
+        Assertions.assertNotNull(testFrameworkProvider);
+        
Assertions.assertTrue(testFrameworkProvider.getClass().getName().endsWith("$Adaptive"));
+        
Assertions.assertEquals(spiExtensionInjector.getInstance(FooFrameworkProvider.class,
 "testFrameworkProvider"), testFrameworkProvider);
+
+        ScopeBeanFactory beanFactory = frameworkModel.getBeanFactory();
+        AdaptiveExtensionInjectorTest obj = new 
AdaptiveExtensionInjectorTest();
+        beanFactory.registerBean("bean", obj);
+        AdaptiveExtensionInjectorTest bean = 
adaptiveExtensionInjector.getInstance(AdaptiveExtensionInjectorTest.class, 
"bean");
+        Assertions.assertEquals(bean, obj);
+        
Assertions.assertEquals(scopeExtensionInjector.getInstance(AdaptiveExtensionInjectorTest.class,
 "bean"), bean);
+
+        frameworkModel.destroy();
+    }
+}
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportServiceTest.java
 
b/dubbo-common/src/test/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportServiceTest.java
new file mode 100644
index 0000000..a308ba3
--- /dev/null
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/common/status/reporter/FrameworkStatusReportServiceTest.java
@@ -0,0 +1,106 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.dubbo.common.status.reporter;
+
+import com.google.gson.Gson;
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.config.ApplicationConfig;
+import org.apache.dubbo.rpc.model.ApplicationModel;
+import org.apache.dubbo.rpc.model.FrameworkModel;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import java.util.Map;
+
+import static 
org.apache.dubbo.common.constants.RegistryConstants.DEFAULT_REGISTER_MODE_INSTANCE;
+import static 
org.apache.dubbo.common.status.reporter.FrameworkStatusReportService.ADDRESS_CONSUMPTION_STATUS;
+import static 
org.apache.dubbo.common.status.reporter.FrameworkStatusReportService.MIGRATION_STEP_STATUS;
+import static 
org.apache.dubbo.common.status.reporter.FrameworkStatusReportService.REGISTRATION_STATUS;
+
+/**
+ * {@link FrameworkStatusReportService}
+ */
+public class FrameworkStatusReportServiceTest {
+
+    @Test
+    public void test() {
+        FrameworkModel frameworkModel = new FrameworkModel();
+        ApplicationModel applicationModel = new 
ApplicationModel(frameworkModel);
+        ApplicationConfig app = new ApplicationConfig("APP");
+        applicationModel.getApplicationConfigManager().setApplication(app);
+        FrameworkStatusReportService reportService = 
applicationModel.getBeanFactory().getBean(FrameworkStatusReportService.class);
+
+        // 1. reportRegistrationStatus
+        
reportService.reportRegistrationStatus(reportService.createRegistrationReport(DEFAULT_REGISTER_MODE_INSTANCE));
+
+        // 2. createConsumptionReport
+        URL consumerURL = Mockito.mock(URL.class);
+        Mockito.when(consumerURL.getServiceInterface()).thenReturn("Test");
+        Mockito.when(consumerURL.getGroup()).thenReturn("Group");
+        Mockito.when(consumerURL.getVersion()).thenReturn("0.0.0");
+        
Mockito.when(consumerURL.getServiceKey()).thenReturn("Group/Test:0.0.0");
+        
Mockito.when(consumerURL.getDisplayServiceKey()).thenReturn("Test:0.0.0");
+        reportService.reportConsumptionStatus(
+            
reportService.createConsumptionReport(consumerURL.getServiceInterface(), 
consumerURL.getVersion(), consumerURL.getGroup(), "status")
+        );
+
+        // 3. reportMigrationStepStatus
+        reportService.reportMigrationStepStatus(
+            
reportService.createMigrationStepReport(consumerURL.getServiceInterface(), 
consumerURL.getVersion(),
+                consumerURL.getGroup(), "FORCE_INTERFACE", 
"FORCE_APPLICATION", "ture"));
+
+        MockFrameworkStatusReporter statusReporter = 
(MockFrameworkStatusReporter) 
applicationModel.getExtension(FrameworkStatusReporter.class, "mock");
+
+        //"migrationStepStatus" -> 
"{"originStep":"FORCE_INTERFACE","application":"APP","service":"Test","success":"ture","newStep":"FORCE_APPLICATION","type":"migrationStepStatus","version":"0.0.0","group":"Group"}"
+        //"registration" -> "{"application":"APP","status":"instance"}"
+        //"consumption" -> 
"{"application":"APP","service":"Test","type":"consumption","version":"0.0.0","group":"Group","status":"status"}"
+        Map<String, Object> reportContent = statusReporter.getReportContent();
+        Assertions.assertEquals(reportContent.size(), 3);
+
+        // verify registrationStatus
+        Gson gson = new Gson();
+        Object registrationStatus = reportContent.get(REGISTRATION_STATUS);
+        Map<String, String> registrationMap = 
gson.fromJson(String.valueOf(registrationStatus), Map.class);
+        Assertions.assertEquals(registrationMap.get("application"), "APP");
+        Assertions.assertEquals(registrationMap.get("status"), "instance");
+
+        // verify addressConsumptionStatus
+        Object addressConsumptionStatus = 
reportContent.get(ADDRESS_CONSUMPTION_STATUS);
+        Map<String, String> consumptionMap = 
gson.fromJson(String.valueOf(addressConsumptionStatus), Map.class);
+        Assertions.assertEquals(consumptionMap.get("application"), "APP");
+        Assertions.assertEquals(consumptionMap.get("service"), "Test");
+        Assertions.assertEquals(consumptionMap.get("status"), "status");
+        Assertions.assertEquals(consumptionMap.get("type"), "consumption");
+        Assertions.assertEquals(consumptionMap.get("version"), "0.0.0");
+        Assertions.assertEquals(consumptionMap.get("group"), "Group");
+
+        // verify migrationStepStatus
+        Object migrationStepStatus = reportContent.get(MIGRATION_STEP_STATUS);
+        Map<String, String> migrationStepStatusMap = 
gson.fromJson(String.valueOf(migrationStepStatus), Map.class);
+        Assertions.assertEquals(migrationStepStatusMap.get("originStep"), 
"FORCE_INTERFACE");
+        Assertions.assertEquals(migrationStepStatusMap.get("application"), 
"APP");
+        Assertions.assertEquals(migrationStepStatusMap.get("service"), "Test");
+        Assertions.assertEquals(migrationStepStatusMap.get("success"), "ture");
+        Assertions.assertEquals(migrationStepStatusMap.get("newStep"), 
"FORCE_APPLICATION");
+        Assertions.assertEquals(migrationStepStatusMap.get("type"), 
"migrationStepStatus");
+        Assertions.assertEquals(migrationStepStatusMap.get("version"), 
"0.0.0");
+        Assertions.assertEquals(migrationStepStatusMap.get("group"), "Group");
+
+        frameworkModel.destroy();
+    }
+}
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/CompositeConfigurationTest.java
 
b/dubbo-common/src/test/java/org/apache/dubbo/common/status/reporter/MockFrameworkStatusReporter.java
similarity index 65%
copy from 
dubbo-common/src/test/java/org/apache/dubbo/common/config/CompositeConfigurationTest.java
copy to 
dubbo-common/src/test/java/org/apache/dubbo/common/status/reporter/MockFrameworkStatusReporter.java
index fd96ab7..5e2af5f 100644
--- 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/CompositeConfigurationTest.java
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/common/status/reporter/MockFrameworkStatusReporter.java
@@ -14,10 +14,20 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.common.config;
+package org.apache.dubbo.common.status.reporter;
 
-/**
- *
- */
-public class CompositeConfigurationTest {
+import java.util.HashMap;
+import java.util.Map;
+
+public class MockFrameworkStatusReporter implements FrameworkStatusReporter {
+    Map<String, Object> reportContent = new HashMap<>();
+
+    @Override
+    public void report(String type, Object obj) {
+        reportContent.put(type, obj);
+    }
+
+    public Map<String, Object> getReportContent() {
+        return reportContent;
+    }
 }
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ConfigUtilsTest.java 
b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ConfigUtilsTest.java
index 5fda7ff..b042167 100644
--- 
a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ConfigUtilsTest.java
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ConfigUtilsTest.java
@@ -28,8 +28,10 @@ import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Properties;
+import java.util.Set;
 
 import static java.util.Arrays.asList;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -274,4 +276,12 @@ public class ConfigUtilsTest {
 
         assertEquals(expected, p);
     }
+
+    @Test
+    public void testLoadMigrationRule() {
+        Set<ClassLoader> classLoaderSet = new HashSet<>();
+        classLoaderSet.add(ClassUtils.getClassLoader());
+        String rule = ConfigUtils.loadMigrationRule(classLoaderSet, 
"dubbo-migration.yaml");
+        Assertions.assertNotNull(rule);
+    }
 }
diff --git 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/PropertiesConfigurationTest.java
 
b/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigConfigurationAdapterTest.java
similarity index 54%
copy from 
dubbo-common/src/test/java/org/apache/dubbo/common/config/PropertiesConfigurationTest.java
copy to 
dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigConfigurationAdapterTest.java
index 4291676..05a9fe7 100644
--- 
a/dubbo-common/src/test/java/org/apache/dubbo/common/config/PropertiesConfigurationTest.java
+++ 
b/dubbo-common/src/test/java/org/apache/dubbo/config/context/ConfigConfigurationAdapterTest.java
@@ -14,20 +14,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.dubbo.common.config;
-
-
-import org.apache.dubbo.rpc.model.ApplicationModel;
+package org.apache.dubbo.config.context;
 
+import org.apache.dubbo.config.RegistryConfig;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-public class PropertiesConfigurationTest {
+/**
+ * {@link ConfigConfigurationAdapter}
+ */
+public class ConfigConfigurationAdapterTest {
 
     @Test
-    public void testOrderPropertiesProviders() {
-        OrderedPropertiesConfiguration configuration = new 
OrderedPropertiesConfiguration(ApplicationModel.defaultModel().getDefaultModule());
-        Assertions.assertEquals("999", 
configuration.getInternalProperty("testKey"));
-    }
+    public void test() {
+        RegistryConfig registryConfig = new RegistryConfig();
+        registryConfig.setAddress("127.0.0.1");
+        registryConfig.setPort(2181);
+
+        String prefix = "dubbo.registry";
+        ConfigConfigurationAdapter configConfigurationAdapter = new 
ConfigConfigurationAdapter(registryConfig, prefix);
 
+        
Assertions.assertEquals(configConfigurationAdapter.getInternalProperty(prefix + 
"." + "address"), "127.0.0.1");
+        
Assertions.assertEquals(configConfigurationAdapter.getInternalProperty(prefix + 
"." + "port"), "2181");
+    }
 }
diff --git 
a/dubbo-common/src/test/resources/META-INF/dubbo/internal/org.apache.dubbo.common.status.reporter.FrameworkStatusReporter
 
b/dubbo-common/src/test/resources/META-INF/dubbo/internal/org.apache.dubbo.common.status.reporter.FrameworkStatusReporter
new file mode 100644
index 0000000..73b6b31
--- /dev/null
+++ 
b/dubbo-common/src/test/resources/META-INF/dubbo/internal/org.apache.dubbo.common.status.reporter.FrameworkStatusReporter
@@ -0,0 +1 @@
+mock=org.apache.dubbo.common.status.reporter.MockFrameworkStatusReporter
diff --git a/dubbo-common/src/test/resources/dubbo-migration.yaml 
b/dubbo-common/src/test/resources/dubbo-migration.yaml
new file mode 100644
index 0000000..9ed760d
--- /dev/null
+++ b/dubbo-common/src/test/resources/dubbo-migration.yaml
@@ -0,0 +1,22 @@
+#
+#
+#   Licensed to the Apache Software Foundation (ASF) under one or more
+#   contributor license agreements.  See the NOTICE file distributed with
+#   this work for additional information regarding copyright ownership.
+#   The ASF licenses this file to You under the Apache License, Version 2.0
+#   (the "License"); you may not use this file except in compliance with
+#   the License.  You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+#
+
+key: demo-consumer
+step: APPLICATION_FIRST
+threshold: 0.1

Reply via email to