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

liujun pushed a commit to branch dev-metadata
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git

commit b9ce4a490c642c15f70ee4f19c00af8ef1423c40
Author: ken.lj <ken.lj...@gmail.com>
AuthorDate: Sat Nov 24 15:21:50 2018 +0800

    Add UT for Configuration
---
 .../apache/dubbo/common/config/Environment.java    |  18 +-
 .../dubbo/common/config/InmemoryConfiguration.java |  13 +-
 .../org/apache/dubbo/common/utils/ConfigUtils.java |  15 +-
 .../org/apache/dubbo/config/AbstractConfig.java    |   5 +-
 .../org/apache/dubbo/config/ApplicationConfig.java |   2 +-
 .../apache/dubbo/config/ConfigCenterConfig.java    |  49 ++---
 .../org/apache/dubbo/config/support/Parameter.java |   2 +-
 .../apache/dubbo/config/AbstractConfigTest.java    | 241 +++++++++++++++++++++
 .../apache/dubbo/config/RegistryConfigTest.java    |   1 +
 .../src/test/resources/dubbo.properties            |   2 +
 10 files changed, 312 insertions(+), 36 deletions(-)

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 bc58ec9..11aabd5 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
@@ -61,7 +61,7 @@ public class Environment {
     public InmemoryConfiguration getExternalConfig(String prefix, String id) {
         return externalConfigs.computeIfAbsent(toKey(prefix, id), k -> {
             InmemoryConfiguration configuration = new 
InmemoryConfiguration(prefix, id);
-            configuration.addProperties(externalConfigurationMap);
+            configuration.setProperties(externalConfigurationMap);
             return configuration;
         });
     }
@@ -69,7 +69,7 @@ public class Environment {
     public InmemoryConfiguration getAppExternalConfig(String prefix, String 
id) {
         return appExternalConfigs.computeIfAbsent(toKey(prefix, id), k -> {
             InmemoryConfiguration configuration = new 
InmemoryConfiguration(prefix, id);
-            configuration.addProperties(appExternalConfigurationMap);
+            configuration.setProperties(appExternalConfigurationMap);
             return configuration;
         });
     }
@@ -82,11 +82,11 @@ public class Environment {
         return appConfigs.get(toKey(prefix, id));
     }
 
-    public synchronized void setExternalConfig(Map<String, String> 
externalConfiguration) {
+    public void setExternalConfig(Map<String, String> externalConfiguration) {
         this.externalConfigurationMap = externalConfiguration;
     }
 
-    public synchronized void setAppExternalConfig(Map<String, String> 
appExternalConfiguration) {
+    public void setAppExternalConfig(Map<String, String> 
appExternalConfiguration) {
         this.appExternalConfigurationMap = appExternalConfiguration;
     }
 
@@ -168,4 +168,14 @@ public class Environment {
     public void setDynamicConfiguration(Configuration dynamicConfiguration) {
         this.dynamicConfiguration = dynamicConfiguration;
     }
+
+    // For test
+    public void clearExternalConfigs() {
+        this.externalConfigs.clear();
+    }
+
+    // For test
+    public void clearAppExternalConfigs() {
+        this.appExternalConfigs.clear();
+    }
 }
diff --git 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java
 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java
index b4a9c48..76b6062 100644
--- 
a/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java
+++ 
b/dubbo-common/src/main/java/org/apache/dubbo/common/config/InmemoryConfiguration.java
@@ -51,6 +51,17 @@ public class InmemoryConfiguration extends 
AbstractPrefixConfiguration {
      * Add a set of properties into the store
      */
     public void addProperties(Map<String, String> properties) {
-        store.putAll(properties);
+        if (properties != null) {
+            this.store.putAll(properties);
+        }
+    }
+
+    /**
+     * set store
+     */
+    public void setProperties(Map<String, String> properties) {
+        if (properties != null) {
+            this.store = properties;
+        }
     }
 }
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 fbab5ea..a67c8f5 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
@@ -21,6 +21,7 @@ import org.apache.dubbo.common.extension.ExtensionLoader;
 import org.apache.dubbo.common.logger.Logger;
 import org.apache.dubbo.common.logger.LoggerFactory;
 
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.InputStream;
 import java.lang.management.ManagementFactory;
@@ -218,7 +219,7 @@ public class ConfigUtils {
     public static Properties loadProperties(String fileName, boolean 
allowMultiFile, boolean optional) {
         Properties properties = new Properties();
         // add scene judgement in windows environment Fix 2557
-        if (fileName.startsWith("/") || fileName.matches("^[A-z]:\\\\\\S+$")) {
+        if (checkFileNameExist(fileName)) {
             try {
                 FileInputStream input = new FileInputStream(fileName);
                 try {
@@ -292,6 +293,18 @@ public class ConfigUtils {
         return properties;
     }
 
+    /**
+     * check if the fileName can be found in filesystem
+     *
+     * @param fileName
+     * @return
+     */
+    private static boolean checkFileNameExist(String fileName) {
+        File file = new File(fileName);
+        return file.exists();
+    }
+
+
     public static int getPid() {
         if (PID < 0) {
             try {
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
index 8dfe27e..d9b7da4 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/AbstractConfig.java
@@ -406,6 +406,7 @@ public abstract class AbstractConfig implements 
Serializable {
      * // FIXME: this method should be completely replaced by appendParameters
      * @see AbstractConfig#appendParameters(Map, Object, String)
      *
+     * Notice! This method should include all properties in the returning map, 
treat @Parameter differently compared to appendParameters.
      * @return
      */
     public Map<String, String> getMetaData() {
@@ -423,7 +424,7 @@ public abstract class AbstractConfig implements 
Serializable {
                     String prop = calculatePropertyFromGetter(name);
                     String key;
                     Parameter parameter = 
method.getAnnotation(Parameter.class);
-                    if (parameter != null && parameter.key().length() > 0 && 
parameter.propertyKey()) {
+                    if (parameter != null && parameter.key().length() > 0 && 
parameter.useKeyAsProperty()) {
                         key = parameter.key();
                     } else {
                         key = prop;
@@ -532,7 +533,7 @@ public abstract class AbstractConfig implements 
Serializable {
             getter = clazz.getMethod("is" + propertyName);
         }
         Parameter parameter = getter.getAnnotation(Parameter.class);
-        if (parameter != null && StringUtils.isNotEmpty(parameter.key()) && 
parameter.propertyKey()) {
+        if (parameter != null && StringUtils.isNotEmpty(parameter.key()) && 
parameter.useKeyAsProperty()) {
             propertyName = parameter.key();
         } else {
             propertyName = propertyName.toLowerCase();
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
index d14d78e..a8404a4 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ApplicationConfig.java
@@ -95,7 +95,7 @@ public class ApplicationConfig extends AbstractConfig {
         setName(name);
     }
 
-    @Parameter(key = Constants.APPLICATION_KEY, required = true, propertyKey = 
false)
+    @Parameter(key = Constants.APPLICATION_KEY, required = true, 
useKeyAsProperty = false)
     public String getName() {
         return name;
     }
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
index 1cb5a00..4c699f9 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/ConfigCenterConfig.java
@@ -57,36 +57,11 @@ public class ConfigCenterConfig extends AbstractConfig {
     // customized parameters
     private Map<String, String> parameters;
 
-//    private RegistryConfig registry;
-
     public ConfigCenterConfig() {
     }
 
     public void init() {
-        DynamicConfiguration dynamicConfiguration = 
startDynamicConfiguration();
-        String configContent = dynamicConfiguration.getConfig(configfile, 
group);
-
-        String appGroup = getApplicationName();
-        String appConfigContent = null;
-        if (StringUtils.isNotEmpty(appGroup)) {
-            appConfigContent = dynamicConfiguration.getConfig
-                    (
-                            StringUtils.isNotEmpty(localconfigfile) ? 
localconfigfile : configfile,
-                            appGroup
-                    );
-        }
-        try {
-            Environment.getInstance().setConfigCenterFirst(priority);
-            
Environment.getInstance().updateExternalConfigurationMap(parseProperties(configContent));
-            
Environment.getInstance().updateAppExternalConfigurationMap(parseProperties(appConfigContent));
-        } catch (IOException e) {
-            throw new IllegalStateException("Failed to parse configurations 
from Config Center.", e);
-        }
-    }
-
-    private DynamicConfiguration startDynamicConfiguration() {
         // give jvm properties the chance to override local configs, e.g., 
-Ddubbo.configcenter.config.priority
-
         refresh();
         // try to use registryConfig as the default configcenter, only applies 
to zookeeper.
         if (!isValid() && registry != null && registry.isZookeeperProtocol()) {
@@ -95,8 +70,30 @@ public class ConfigCenterConfig extends AbstractConfig {
         }
 //        checkConfigCenter();
 
-        URL url = toConfigUrl();
+        if (isValid()) {
+            DynamicConfiguration dynamicConfiguration = 
startDynamicConfiguration(toConfigUrl());
+            String configContent = dynamicConfiguration.getConfig(configfile, 
group);
+
+            String appGroup = getApplicationName();
+            String appConfigContent = null;
+            if (StringUtils.isNotEmpty(appGroup)) {
+                appConfigContent = dynamicConfiguration.getConfig
+                        (
+                                StringUtils.isNotEmpty(localconfigfile) ? 
localconfigfile : configfile,
+                                appGroup
+                        );
+            }
+            try {
+                Environment.getInstance().setConfigCenterFirst(priority);
+                
Environment.getInstance().updateExternalConfigurationMap(parseProperties(configContent));
+                
Environment.getInstance().updateAppExternalConfigurationMap(parseProperties(appConfigContent));
+            } catch (IOException e) {
+                throw new IllegalStateException("Failed to parse 
configurations from Config Center.", e);
+            }
+        }
+    }
 
+    private DynamicConfiguration startDynamicConfiguration(URL url) {
         DynamicConfiguration dynamicConfiguration = 
ExtensionLoader.getExtensionLoader(DynamicConfiguration.class).getExtension(url.getProtocol());
         // TODO, maybe we need a factory to do this?
         dynamicConfiguration.initWith(url);
diff --git 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/support/Parameter.java
 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/support/Parameter.java
index 56336aa..029a491 100644
--- 
a/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/support/Parameter.java
+++ 
b/dubbo-config/dubbo-config-api/src/main/java/org/apache/dubbo/config/support/Parameter.java
@@ -42,6 +42,6 @@ public @interface Parameter {
 
     boolean append() default false;
 
-    boolean propertyKey() default true;
+    boolean useKeyAsProperty() default true;
 
 }
\ No newline at end of file
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
index 959780c..e407864 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/AbstractConfigTest.java
@@ -17,9 +17,11 @@
 package org.apache.dubbo.config;
 
 import junit.framework.TestCase;
+import org.apache.dubbo.common.config.Environment;
 import org.apache.dubbo.config.api.Greeting;
 import org.apache.dubbo.config.support.Parameter;
 import org.hamcrest.Matchers;
+import org.junit.Assert;
 import org.junit.Test;
 
 import java.lang.annotation.ElementType;
@@ -273,6 +275,245 @@ public class AbstractConfigTest {
         assertThat(annotationConfig.toString(), 
Matchers.containsString("listener=\"l1, l2\" "));
     }
 
+    @Test
+    public void testRefreshAll() {
+        try {
+            OverrideConfig overrideConfig = new OverrideConfig();
+            overrideConfig.setAddress("override-config://127.0.0.1:2181");
+            overrideConfig.setProtocol("override-config");
+            overrideConfig.setEscape("override-config://");
+            overrideConfig.setExclude("override-config");
+
+            Map<String, String> external = new HashMap<>();
+            external.put("dubbo.override.address", 
"external://127.0.0.1:2181");
+            // @Parameter(exclude=true)
+            external.put("dubbo.override.exclude", "external");
+            // @Parameter(key="key1", useKeyAsProperty=false)
+            external.put("dubbo.override.key", "external");
+            // @Parameter(key="key2", useKeyAsProperty=true)
+            external.put("dubbo.override.key2", "external");
+            Environment.getInstance().setExternalConfig(external);
+
+            System.setProperty("dubbo.override.address", 
"system://127.0.0.1:2181");
+            System.setProperty("dubbo.override.protocol", "system");
+            // this will not override, use 'key' instread, 
@Parameter(key="key1", useKeyAsProperty=false)
+            System.setProperty("dubbo.override.key1", "system");
+            System.setProperty("dubbo.override.key2", "system");
+
+            // Load configuration from  system properties -> 
externalConfiguration -> RegistryConfig -> dubbo.properties
+            overrideConfig.refresh();
+
+            Assert.assertEquals("system://127.0.0.1:2181", 
overrideConfig.getAddress());
+            Assert.assertEquals("system", overrideConfig.getProtocol());
+            Assert.assertEquals("override-config://", 
overrideConfig.getEscape());
+            Assert.assertEquals("external", overrideConfig.getKey());
+            Assert.assertEquals("system", 
overrideConfig.getUseKeyAsProperty());
+        } finally {
+            System.clearProperty("dubbo.override.address");
+            System.clearProperty("dubbo.override.protocol");
+            System.clearProperty("dubbo.override.key1");
+            System.clearProperty("dubbo.override.key2");
+            Environment.getInstance().clearExternalConfigs();
+        }
+    }
+
+    @Test
+    public void testRefreshSystem() {
+        try {
+            OverrideConfig overrideConfig = new OverrideConfig();
+            overrideConfig.setAddress("override-config://127.0.0.1:2181");
+            overrideConfig.setProtocol("override-config");
+            overrideConfig.setEscape("override-config://");
+            overrideConfig.setExclude("override-config");
+
+            System.setProperty("dubbo.override.address", 
"system://127.0.0.1:2181");
+            System.setProperty("dubbo.override.protocol", "system");
+            System.setProperty("dubbo.override.key", "system");
+
+            overrideConfig.refresh();
+
+            Assert.assertEquals("system://127.0.0.1:2181", 
overrideConfig.getAddress());
+            Assert.assertEquals("system", overrideConfig.getProtocol());
+            Assert.assertEquals("override-config://", 
overrideConfig.getEscape());
+            Assert.assertEquals("system", overrideConfig.getKey());
+        } finally {
+            System.clearProperty("dubbo.override.address");
+            System.clearProperty("dubbo.override.protocol");
+            System.clearProperty("dubbo.override.key1");
+            Environment.getInstance().clearExternalConfigs();
+        }
+    }
+
+    @Test
+    public void testRefreshProperties() {
+        try {
+            Environment.getInstance().setExternalConfig(new HashMap<>());
+            OverrideConfig overrideConfig = new OverrideConfig();
+            overrideConfig.setAddress("override-config://127.0.0.1:2181");
+            overrideConfig.setProtocol("override-config");
+            overrideConfig.setEscape("override-config://");
+
+            overrideConfig.refresh();
+
+            Assert.assertEquals("override-config://127.0.0.1:2181", 
overrideConfig.getAddress());
+            Assert.assertEquals("override-config", 
overrideConfig.getProtocol());
+            Assert.assertEquals("override-config://", 
overrideConfig.getEscape());
+            Assert.assertEquals("properties", 
overrideConfig.getUseKeyAsProperty());
+        } finally {
+            Environment.getInstance().clearExternalConfigs();
+        }
+    }
+
+    @Test
+    public void testRefreshExternal() {
+        try {
+            OverrideConfig overrideConfig = new OverrideConfig();
+            overrideConfig.setAddress("override-config://127.0.0.1:2181");
+            overrideConfig.setProtocol("override-config");
+            overrideConfig.setEscape("override-config://");
+            overrideConfig.setExclude("override-config");
+
+            Map<String, String> external = new HashMap<>();
+            external.put("dubbo.override.address", 
"external://127.0.0.1:2181");
+            external.put("dubbo.override.protocol", "external");
+            external.put("dubbo.override.escape", "external://");
+            // @Parameter(exclude=true)
+            external.put("dubbo.override.exclude", "external");
+            // @Parameter(key="key1", useKeyAsProperty=false)
+            external.put("dubbo.override.key", "external");
+            // @Parameter(key="key2", useKeyAsProperty=true)
+            external.put("dubbo.override.key2", "external");
+            Environment.getInstance().setExternalConfig(external);
+
+            overrideConfig.refresh();
+
+            Assert.assertEquals("external://127.0.0.1:2181", 
overrideConfig.getAddress());
+            Assert.assertEquals("external", overrideConfig.getProtocol());
+            Assert.assertEquals("external://", overrideConfig.getEscape());
+            Assert.assertEquals("external", overrideConfig.getExclude());
+            Assert.assertEquals("external", overrideConfig.getKey());
+            Assert.assertEquals("external", 
overrideConfig.getUseKeyAsProperty());
+        } finally {
+            Environment.getInstance().clearExternalConfigs();
+        }
+    }
+
+    @Test
+    public void testRefreshId() {
+        try {
+            OverrideConfig overrideConfig = new OverrideConfig();
+            overrideConfig.setId("override-id");
+            overrideConfig.setAddress("override-config://127.0.0.1:2181");
+            overrideConfig.setProtocol("override-config");
+            overrideConfig.setEscape("override-config://");
+            overrideConfig.setExclude("override-config");
+
+            Map<String, String> external = new HashMap<>();
+            external.put("dubbo.override.override-id.address", 
"external-override-id://127.0.0.1:2181");
+            external.put("dubbo.override.address", 
"external://127.0.0.1:2181");
+            // @Parameter(exclude=true)
+            external.put("dubbo.override.exclude", "external");
+            // @Parameter(key="key1", useKeyAsProperty=false)
+            external.put("dubbo.override.key", "external");
+            // @Parameter(key="key2", useKeyAsProperty=true)
+            external.put("dubbo.override.key2", "external");
+            Environment.getInstance().setExternalConfig(external);
+
+            ConfigCenterConfig configCenter = new ConfigCenterConfig();
+            configCenter.init();
+
+            // Load configuration from  system properties -> 
externalConfiguration -> RegistryConfig -> dubbo.properties
+            overrideConfig.refresh();
+
+            Assert.assertEquals("external-override-id://127.0.0.1:2181", 
overrideConfig.getAddress());
+            Assert.assertEquals("override-config", 
overrideConfig.getProtocol());
+            Assert.assertEquals("override-config://", 
overrideConfig.getEscape());
+            Assert.assertEquals("external", overrideConfig.getKey());
+            Assert.assertEquals("external", 
overrideConfig.getUseKeyAsProperty());
+        } finally {
+            Environment.getInstance().clearExternalConfigs();
+        }
+    }
+
+    @Test
+    public void tetMetaData() {
+        OverrideConfig overrideConfig = new OverrideConfig();
+        overrideConfig.setId("override-id");
+        overrideConfig.setAddress("override-config://127.0.0.1:2181");
+        overrideConfig.setProtocol("override-config");
+        overrideConfig.setEscape("override-config://");
+        overrideConfig.setExclude("override-config");
+
+        Map<String, String> metaData = overrideConfig.getMetaData();
+        Assert.assertEquals("override-config://127.0.0.1:2181", 
metaData.get("address"));
+        Assert.assertEquals("override-config", metaData.get("protocol"));
+        Assert.assertEquals("override-config://", metaData.get("escape"));
+        Assert.assertEquals("override-config", metaData.get("exclude"));
+        Assert.assertNull(metaData.get("key"));
+        Assert.assertNull(metaData.get("key2"));
+    }
+
+    private static class OverrideConfig extends AbstractConfig {
+        public String address;
+        public String protocol;
+        public String exclude;
+        public String key;
+        public String useKeyAsProperty;
+        public String escape;
+
+        public String getAddress() {
+            return address;
+        }
+
+        public void setAddress(String address) {
+            this.address = address;
+        }
+
+        public String getProtocol() {
+            return protocol;
+        }
+
+        public void setProtocol(String protocol) {
+            this.protocol = protocol;
+        }
+
+        @Parameter(excluded = true)
+        public String getExclude() {
+            return exclude;
+        }
+
+        public void setExclude(String exclude) {
+            this.exclude = exclude;
+        }
+
+        @Parameter(key = "key1", useKeyAsProperty = false)
+        public String getKey() {
+            return key;
+        }
+
+        public void setKey(String key) {
+            this.key = key;
+        }
+
+        @Parameter(key = "key2", useKeyAsProperty = true)
+        public String getUseKeyAsProperty() {
+            return useKeyAsProperty;
+        }
+
+        public void setUseKeyAsProperty(String useKeyAsProperty) {
+            this.useKeyAsProperty = useKeyAsProperty;
+        }
+
+        @Parameter(escaped = true)
+        public String getEscape() {
+            return escape;
+        }
+
+        public void setEscape(String escape) {
+            this.escape = escape;
+        }
+    }
+
     private static class PropertiesConfig extends AbstractConfig {
         private char c;
         private boolean bool;
diff --git 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java
 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java
index 75c99b1..2210847 100644
--- 
a/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java
+++ 
b/dubbo-config/dubbo-config-api/src/test/java/org/apache/dubbo/config/RegistryConfigTest.java
@@ -175,4 +175,5 @@ public class RegistryConfigTest {
         registry.setDefault(true);
         assertThat(registry.isDefault(), is(true));
     }
+
 }
diff --git a/dubbo-config/dubbo-config-api/src/test/resources/dubbo.properties 
b/dubbo-config/dubbo-config-api/src/test/resources/dubbo.properties
new file mode 100644
index 0000000..fb4bee8
--- /dev/null
+++ b/dubbo-config/dubbo-config-api/src/test/resources/dubbo.properties
@@ -0,0 +1,2 @@
+dubbo.override.key2=properties
+dubbo.override.protocol=properties
\ No newline at end of file

Reply via email to