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