aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgahissy <titus@sillaps.com>2017-05-03 00:10:13 +0100
committergahissy <titus@sillaps.com>2017-05-03 00:10:13 +0100
commitfa6548a7b613b5bd3919cbf0269d58b2d8ebb999 (patch)
treefa5b6a248ece0abdf2774902f7c183ef35a67edd
parentaa6b11f88085a149b70b3f55fbae7928280c2b74 (diff)
downloadtrackermap-server-fa6548a7b613b5bd3919cbf0269d58b2d8ebb999.tar.gz
trackermap-server-fa6548a7b613b5bd3919cbf0269d58b2d8ebb999.tar.bz2
trackermap-server-fa6548a7b613b5bd3919cbf0269d58b2d8ebb999.zip
Unit Test for ENV_VAR interpolation. config.useEnv introduced
-rw-r--r--src/org/traccar/Config.java48
-rw-r--r--test/org/traccar/config/EnvVarTest.java18
2 files changed, 47 insertions, 19 deletions
diff --git a/src/org/traccar/Config.java b/src/org/traccar/Config.java
index e9b17a33b..c52c1bd81 100644
--- a/src/org/traccar/Config.java
+++ b/src/org/traccar/Config.java
@@ -18,44 +18,50 @@ package org.traccar;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.util.Enumeration;
import java.util.Properties;
public class Config {
private final Properties properties = new Properties();
- void load(String file) throws IOException {
- try (InputStream inputStream = new FileInputStream(file)) {
- properties.loadFromXML(inputStream);
- }
+ private boolean useEnvVars = false;
+ void load(String file) throws IOException {
+ // First we load default config (if any)
String defaultConfigFile = properties.getProperty("config.default");
if (defaultConfigFile != null) {
try (InputStream inputStream = new FileInputStream(defaultConfigFile)) {
- Properties defaultProperties = new Properties();
- defaultProperties.loadFromXML(inputStream);
-
- Enumeration props = defaultProperties.propertyNames();
- while (props.hasMoreElements()) {
- String key = (String) props.nextElement();
- if (!properties.containsKey(key)) {
- properties.setProperty(key, defaultProperties.getProperty(key));
- }
- }
+ properties.loadFromXML(inputStream);
}
}
+ // Then we override by loading <code>file</code>
+ try (InputStream inputStream = new FileInputStream(file)) {
+ Properties props = new Properties();
+ props.loadFromXML(inputStream);
+ properties.putAll(props);
+ }
+ // Environment variables interpolation support
+ if ("true".equals(System.getenv("CONFIG_USE_ENV"))) {
+ useEnvVars = true;
+ } else {
+ useEnvVars = properties.getProperty("config.useEnv", "false").equalsIgnoreCase("true");
+ }
}
+
public boolean hasKey(String key) {
+ if (useEnvVars && System.getenv().containsKey(getEnvVarName(key))) {
+ return true;
+ }
return properties.containsKey(key);
}
public String getString(String key) {
- String envName = key.toUpperCase().replaceAll("\\.", "_");
- String envValue = System.getenv(envName);
- if (envValue != null && !envValue.isEmpty()) {
- return envValue;
+ if (useEnvVars) {
+ String envValue = System.getenv(getEnvVarName(key));
+ if (envValue != null && !envValue.isEmpty()) {
+ return envValue;
+ }
}
return properties.getProperty(key);
}
@@ -92,4 +98,8 @@ public class Config {
return hasKey(key) ? Double.parseDouble(getString(key)) : defaultValue;
}
+ public static String getEnvVarName(String key) {
+ return key.replaceAll("\\.", "_").replaceAll("(.)(\\p{Lu})", "$1_$2").toUpperCase();
+ }
+
}
diff --git a/test/org/traccar/config/EnvVarTest.java b/test/org/traccar/config/EnvVarTest.java
new file mode 100644
index 000000000..b90fd485c
--- /dev/null
+++ b/test/org/traccar/config/EnvVarTest.java
@@ -0,0 +1,18 @@
+package org.traccar.config;
+
+import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import org.traccar.Config;
+
+public class EnvVarTest {
+
+ @Test
+ public void testFormat() {
+ assertEquals("DATABASE_URL", Config.getEnvVarName("database.url"));
+ assertEquals("DATABASE_CHECK_CONNECTION", Config.getEnvVarName("database.checkConnection"));
+ assertEquals("DATABASE_MAX_POOL_SIZE", Config.getEnvVarName("database.maxPoolSize"));
+ assertEquals("DEVICE_MANAGER_LOOKUP_GROUPS_ATTRIBUTE", Config.getEnvVarName("deviceManager.lookupGroupsAttribute"));
+ assertEquals("COMMAND_FALLBACK_TO_SMS", Config.getEnvVarName("command.fallbackToSms"));
+ assertEquals("STATUS_TIMEOUT", Config.getEnvVarName("status.timeout"));
+ }
+}