diff --git a/CHANGES.md b/CHANGES.md index 27c28a785e1b275d676c864abc8027cd2918f8a8..b0d4f85147733e3c1414008c4e0095a501e34f03 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -42,6 +42,7 @@ Release Notes. * Fix TimeBucket missing in ElasticSearch and provide compatible `storage2Entity` for previous versions. * Fix ElasticSearch implementation of `queryMetricsValues` and `readLabeledMetricsValues` doesn't fill default values when no available data in the ElasticSearch server. +* Fix config yaml data type conversion bug when meets special character like !. #### UI diff --git a/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java b/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java index 7fcf620e7ef7efefdb7482f26974eb489ad24ff3..3bccd303a94cb629662397b655b284ac3e304940 100644 --- a/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java +++ b/oap-server/server-starter/src/main/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoader.java @@ -20,6 +20,7 @@ package org.apache.skywalking.oap.server.starter.config; import java.io.FileNotFoundException; import java.io.Reader; +import java.util.ArrayList; import java.util.Iterator; import java.util.Map; import java.util.Properties; @@ -111,7 +112,7 @@ public class ApplicationConfigLoader implements ConfigLoader prop : System.getProperties().entrySet()) { overrideModuleSettings(configuration, prop.getKey().toString(), prop.getValue().toString()); diff --git a/oap-server/server-starter/src/test/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoaderTestCase.java b/oap-server/server-starter/src/test/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoaderTestCase.java index 52b61c5eb1ed9298684ea1bc1d8eccc151600aca..09f7871c77ebfad19eaa147178c1f2a04e69265c 100644 --- a/oap-server/server-starter/src/test/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoaderTestCase.java +++ b/oap-server/server-starter/src/test/java/org/apache/skywalking/oap/server/starter/config/ApplicationConfigLoaderTestCase.java @@ -38,6 +38,7 @@ public class ApplicationConfigLoaderTestCase { public void setUp() throws ConfigFileNotFoundException { System.setProperty("SW_STORAGE", "mysql"); System.setProperty("SW_RECEIVER_ZIPKIN", "default"); + System.setProperty("SW_DATA_SOURCE_PASSWORD", "!AI!3B"); ApplicationConfigLoader configLoader = new ApplicationConfigLoader(); applicationConfiguration = configLoader.load(); } @@ -60,4 +61,37 @@ public class ApplicationConfigLoaderTestCase { assertEquals(2, instanceNameRule.size()); } + @Test + public void testLoadStringTypeConfig() { + Properties providerConfig = applicationConfiguration.getModuleConfiguration("receiver_zipkin") + .getProviderConfiguration("default"); + String host = (String) providerConfig.get("host"); + assertEquals("0.0.0.0", host); + } + + @Test + public void testLoadIntegerTypeConfig() { + Properties providerConfig = applicationConfiguration.getModuleConfiguration("receiver_zipkin") + .getProviderConfiguration("default"); + Integer port = (Integer) providerConfig.get("port"); + assertEquals(Integer.valueOf(9411), port); + } + + @Test + public void testLoadBooleanTypeConfig() { + Properties providerConfig = applicationConfiguration.getModuleConfiguration("core") + .getProviderConfiguration("default"); + Boolean enableDataKeeperExecutor = (Boolean) providerConfig.get("enableDataKeeperExecutor"); + assertEquals(Boolean.TRUE, enableDataKeeperExecutor); + } + + @Test + public void testLoadSpecialStringTypeConfig() { + Properties providerConfig = applicationConfiguration.getModuleConfiguration("storage") + .getProviderConfiguration("mysql"); + Properties properties = (Properties) providerConfig.get("properties"); + String password = (String) properties.get("dataSource.password"); + assertEquals("!AI!3B", password); + } + }