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

lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/master by this push:
     new 8be2376  CAMEL-15006: Allow to configure camel-main's properties 
locations using system properties and env vars
8be2376 is described below

commit 8be2376ba1ff984a20fbc5bfefa762c3508289dd
Author: lburgazzoli <lburgazz...@gmail.com>
AuthorDate: Mon May 4 15:23:03 2020 +0200

    CAMEL-15006: Allow to configure camel-main's properties locations using 
system properties and env vars
---
 core/camel-main/pom.xml                            |  18 ++
 .../org/apache/camel/main/BaseMainSupport.java     |  82 ++++-----
 .../java/org/apache/camel/main/MainHelper.java     |  63 +++++++
 ...sTest.java => MainPropertyPlaceholderTest.java} |   2 +-
 .../main/MainPropertyPlaceholderWithEnvTest.java   | 193 +++++++++++++++++++++
 .../MainPropertyPlaceholderWithSystemTest.java     | 119 +++++++++++++
 .../src/test/resources/default.properties          |   3 +-
 .../{default.properties => initial.properties}     |   3 +-
 .../{default.properties => override.properties}    |   2 +-
 .../{default.properties => user.properties}        |   3 +-
 parent/pom.xml                                     |   1 +
 11 files changed, 445 insertions(+), 44 deletions(-)

diff --git a/core/camel-main/pom.xml b/core/camel-main/pom.xml
index d4b464d..6393811 100644
--- a/core/camel-main/pom.xml
+++ b/core/camel-main/pom.xml
@@ -116,6 +116,24 @@
             <artifactId>junit</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <version>${mockito-version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-module-junit4</artifactId>
+            <version>${powermock-version}</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.powermock</groupId>
+            <artifactId>powermock-api-mockito2</artifactId>
+            <version>${powermock-version}</version>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git 
a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java 
b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
index bcd9481..460e05f 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
@@ -29,6 +29,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
@@ -61,6 +62,7 @@ import org.apache.camel.spi.RestConfiguration;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.LifecycleStrategySupport;
 import org.apache.camel.support.PropertyBindingSupport;
+import org.apache.camel.support.ResourceHelper;
 import org.apache.camel.support.service.BaseService;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.FileUtil;
@@ -73,7 +75,8 @@ import 
org.apache.camel.util.concurrent.ThreadPoolRejectedPolicy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
+import static org.apache.camel.main.MainHelper.lookupPropertyFromSysOrEnv;
+import static 
org.apache.camel.main.MainHelper.loadEnvironmentVariablesAsProperties;
 import static org.apache.camel.support.ObjectHelper.invokeMethod;
 import static org.apache.camel.util.ReflectionHelper.findMethod;
 import static org.apache.camel.util.StringHelper.matches;
@@ -82,6 +85,10 @@ import static org.apache.camel.util.StringHelper.matches;
  * Base class for main implementations to allow bootstrapping Camel in 
standalone mode.
  */
 public abstract class BaseMainSupport extends BaseService {
+    public static final String DEFAULT_PROPERTY_PLACEHOLDER_LOCATION = 
"classpath:application.properties;optional=true";
+    public static final String INITIAL_PROPERTIES_LOCATION = 
"camel.main.initial-properties-location";
+    public static final String OVERRIDE_PROPERTIES_LOCATION = 
"camel.main.override-properties-location";
+    public static final String PROPERTY_PLACEHOLDER_LOCATION = 
"camel.main.property-placeholder-location";
 
     private static final Logger LOG = 
LoggerFactory.getLogger(BaseMainSupport.class);
 
@@ -103,31 +110,10 @@ public abstract class BaseMainSupport extends BaseService 
{
     protected List<Object> configurations = new ArrayList<>();
     protected String configurationClasses;
     protected String propertyPlaceholderLocations;
-    protected String defaultPropertyPlaceholderLocation = 
"classpath:application.properties;optional=true";
+    protected String defaultPropertyPlaceholderLocation = 
DEFAULT_PROPERTY_PLACEHOLDER_LOCATION;
     protected Properties initialProperties;
     protected Properties overrideProperties;
 
-    protected static Properties loadEnvironmentVariablesAsProperties(String[] 
prefixes) {
-        Properties answer = new OrderedProperties();
-        if (prefixes == null || prefixes.length == 0) {
-            return answer;
-        }
-
-        for (String prefix : prefixes) {
-            final String pk = 
prefix.toUpperCase(Locale.US).replaceAll("[^\\w]", "-");
-            final String pk2 = pk.replace('-', '_');
-            System.getenv().forEach((k, v) -> {
-                k = k.toUpperCase(Locale.US);
-                if (k.startsWith(pk) || k.startsWith(pk2)) {
-                    String key = k.toLowerCase(Locale.ENGLISH).replace('_', 
'.');
-                    answer.put(key, v);
-                }
-            });
-        }
-
-        return answer;
-    }
-
     protected static String optionKey(String key) {
         // as we ignore case for property names we should use keys in same 
case and without dashes
         key = StringHelper.dashToCamelCase(key);
@@ -515,26 +501,44 @@ public abstract class BaseMainSupport extends BaseService 
{
     }
 
     protected void configurePropertiesService(CamelContext camelContext) 
throws Exception {
-        if (propertyPlaceholderLocations != null) {
-            PropertiesComponent pc = camelContext.getPropertiesComponent();
-            pc.addLocation(propertyPlaceholderLocations);
-            LOG.info("Using properties from: {}", 
propertyPlaceholderLocations);
-        } else if (ObjectHelper.isNotEmpty(defaultPropertyPlaceholderLocation) 
&& !ObjectHelper.equal("false", defaultPropertyPlaceholderLocation)) {
-            // lets default to defaultPropertyPlaceholderLocation if
-            // there are no existing locations configured
-            PropertiesComponent pc = camelContext.getPropertiesComponent();
-            if (pc.getLocations().isEmpty()) {
-                pc.addLocation(defaultPropertyPlaceholderLocation);
+        PropertiesComponent pc = camelContext.getPropertiesComponent();
+        if (pc.getLocations().isEmpty()) {
+            String locations = propertyPlaceholderLocations;
+            if (locations == null) {
+                locations = 
lookupPropertyFromSysOrEnv(PROPERTY_PLACEHOLDER_LOCATION).orElse(defaultPropertyPlaceholderLocation);
+            }
+            if (!Objects.equals(locations, "false")) {
+                pc.addLocation(locations);
+                LOG.info("Using properties from: {}", 
propertyPlaceholderLocations);
             }
-            LOG.info("Using properties from {}", 
defaultPropertyPlaceholderLocation);
         }
 
-        PropertiesComponent pc = camelContext.getPropertiesComponent();
-        if (initialProperties != null) {
-            pc.setInitialProperties(initialProperties);
+        Properties ip = initialProperties;
+        if (ip == null || ip.isEmpty()) {
+            Optional<String> location = 
lookupPropertyFromSysOrEnv(INITIAL_PROPERTIES_LOCATION);
+            if (location.isPresent()) {
+                try (InputStream is = 
ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext, 
location.get())) {
+                    ip = new Properties();
+                    ip.load(is);
+                }
+            }
+        }
+        if (ip != null) {
+            pc.setInitialProperties(ip);
+        }
+
+        Properties op = overrideProperties;
+        if (op == null || op.isEmpty()) {
+            Optional<String> location = 
lookupPropertyFromSysOrEnv(OVERRIDE_PROPERTIES_LOCATION);
+            if (location.isPresent()) {
+                try (InputStream is = 
ResourceHelper.resolveMandatoryResourceAsInputStream(camelContext, 
location.get())) {
+                    op = new Properties();
+                    op.load(is);
+                }
+            }
         }
-        if (overrideProperties != null) {
-            pc.setOverrideProperties(overrideProperties);
+        if (op != null) {
+            pc.setOverrideProperties(op);
         }
     }
 
diff --git 
a/core/camel-main/src/main/java/org/apache/camel/main/MainHelper.java 
b/core/camel-main/src/main/java/org/apache/camel/main/MainHelper.java
new file mode 100644
index 0000000..a8ff18e
--- /dev/null
+++ b/core/camel-main/src/main/java/org/apache/camel/main/MainHelper.java
@@ -0,0 +1,63 @@
+/*
+ * 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.camel.main;
+
+import java.util.Locale;
+import java.util.Optional;
+import java.util.Properties;
+
+import org.apache.camel.util.OrderedProperties;
+
+public final class MainHelper {
+    private MainHelper() {
+    }
+
+    public static String toEnvVar(String name) {
+        return name.toUpperCase(Locale.US).replaceAll("[^\\w]", 
"-").replace('-', '_');
+    }
+
+    public static Optional<String> lookupPropertyFromSysOrEnv(String name) {
+        String answer = System.getProperty(name);
+        if (answer == null) {
+            answer = System.getenv(toEnvVar(name));
+        }
+
+        return Optional.ofNullable(answer);
+    }
+
+    public static Properties loadEnvironmentVariablesAsProperties(String[] 
prefixes) {
+        Properties answer = new OrderedProperties();
+        if (prefixes == null || prefixes.length == 0) {
+            return answer;
+        }
+
+        for (String prefix : prefixes) {
+            final String pk = 
prefix.toUpperCase(Locale.US).replaceAll("[^\\w]", "-");
+            final String pk2 = pk.replace('-', '_');
+            System.getenv().forEach((k, v) -> {
+                k = k.toUpperCase(Locale.US);
+                if (k.startsWith(pk) || k.startsWith(pk2)) {
+                    String key = k.toLowerCase(Locale.ENGLISH).replace('_', 
'.');
+                    answer.put(key, v);
+                }
+            });
+        }
+
+        return answer;
+    }
+
+}
diff --git 
a/core/camel-main/src/test/java/org/apache/camel/main/MainPropertyPlaceholderLocationsTest.java
 
b/core/camel-main/src/test/java/org/apache/camel/main/MainPropertyPlaceholderTest.java
similarity index 96%
rename from 
core/camel-main/src/test/java/org/apache/camel/main/MainPropertyPlaceholderLocationsTest.java
rename to 
core/camel-main/src/test/java/org/apache/camel/main/MainPropertyPlaceholderTest.java
index fb74aee..a065a49 100644
--- 
a/core/camel-main/src/test/java/org/apache/camel/main/MainPropertyPlaceholderLocationsTest.java
+++ 
b/core/camel-main/src/test/java/org/apache/camel/main/MainPropertyPlaceholderTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.main;
 import org.junit.Assert;
 import org.junit.Test;
 
-public class MainPropertyPlaceholderLocationsTest extends Assert {
+public class MainPropertyPlaceholderTest extends Assert {
     @Test(expected = IllegalArgumentException.class)
     public void testDefaultPropertyPlaceholderLocationDisabled() {
         Main main = new Main();
diff --git 
a/core/camel-main/src/test/java/org/apache/camel/main/MainPropertyPlaceholderWithEnvTest.java
 
b/core/camel-main/src/test/java/org/apache/camel/main/MainPropertyPlaceholderWithEnvTest.java
new file mode 100644
index 0000000..9f1b6a6
--- /dev/null
+++ 
b/core/camel-main/src/test/java/org/apache/camel/main/MainPropertyPlaceholderWithEnvTest.java
@@ -0,0 +1,193 @@
+/*
+ * 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.camel.main;
+
+import java.util.Properties;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PowerMockIgnore;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.when;
+
+@RunWith(PowerMockRunner.class)
+@PowerMockIgnore({"javax.management.*", "javax.script.*"})
+@PrepareForTest(MainHelper.class)
+public class MainPropertyPlaceholderWithEnvTest {
+    public static final String ENV_PROPERTY_PLACEHOLDER_LOCATION = 
MainHelper.toEnvVar(Main.PROPERTY_PLACEHOLDER_LOCATION);
+    public static final String ENV_INITIAL_PROPERTIES_LOCATION = 
MainHelper.toEnvVar(Main.INITIAL_PROPERTIES_LOCATION);
+    public static final String ENV_OVERRIDE_PROPERTIES_LOCATION = 
MainHelper.toEnvVar(Main.OVERRIDE_PROPERTIES_LOCATION);
+
+    @Before
+    public void setUp() {
+        PowerMockito.mockStatic(System.class);
+    }
+
+    @Test
+    public void testPropertyPlaceholderLocation() {
+        when(System.getenv(ENV_PROPERTY_PLACEHOLDER_LOCATION))
+            .thenReturn("classpath:default.properties");
+
+        Main main = new Main();
+        try {
+            main.start();
+            assertEquals("default", 
main.getCamelContext().resolvePropertyPlaceholders("{{hello}}"));
+        } finally {
+            main.stop();
+        }
+    }
+
+    @Test
+    public void testPropertyPlaceholderOrdering() {
+        
when(System.getenv(MainHelper.toEnvVar(Main.PROPERTY_PLACEHOLDER_LOCATION)))
+            .thenReturn("classpath:default.properties");
+        when(System.getProperty(Main.PROPERTY_PLACEHOLDER_LOCATION))
+            .thenReturn("classpath:user.properties");
+
+        Main main = new Main();
+        try {
+            main.start();
+            assertEquals("user", 
main.getCamelContext().resolvePropertyPlaceholders("{{type}}"));
+        } finally {
+            main.stop();
+        }
+    }
+
+    @Test
+    public void testInitialProperties() {
+        when(System.getenv(ENV_INITIAL_PROPERTIES_LOCATION))
+            .thenReturn("classpath:initial.properties");
+
+        Main main = new Main();
+        try {
+            main.start();
+            assertEquals("initial", 
main.getCamelContext().resolvePropertyPlaceholders("{{type}}"));
+        } finally {
+            main.stop();
+        }
+    }
+
+    @Test
+    public void testInitialPropertiesOrdering() {
+        when(System.getenv(ENV_INITIAL_PROPERTIES_LOCATION))
+            .thenReturn("classpath:default.properties");
+        when(System.getProperty(Main.INITIAL_PROPERTIES_LOCATION))
+            .thenReturn("classpath:user.properties");
+
+        Main main = new Main();
+        try {
+            main.start();
+            assertEquals("user", 
main.getCamelContext().resolvePropertyPlaceholders("{{type}}"));
+        } finally {
+            main.stop();
+        }
+    }
+
+    @Test
+    public void testInstanceInitialPropertiesOrdering() {
+        when(System.getenv(ENV_INITIAL_PROPERTIES_LOCATION))
+            .thenReturn("classpath:initial.properties");
+
+        Main main = new Main();
+        try {
+            Properties properties = new Properties();
+            properties.setProperty("type", "custom");
+
+            main.setInitialProperties(properties);
+            main.start();
+            assertEquals("custom", 
main.getCamelContext().resolvePropertyPlaceholders("{{type}}"));
+        } finally {
+            main.stop();
+        }
+    }
+
+    @Test
+    public void testOverrideProperties() {
+        when(System.getenv(ENV_OVERRIDE_PROPERTIES_LOCATION))
+            .thenReturn("classpath:override.properties");
+
+        Main main = new Main();
+        try {
+            main.start();
+            assertEquals("override", 
main.getCamelContext().resolvePropertyPlaceholders("{{type}}"));
+        } finally {
+            main.stop();
+        }
+    }
+
+    @Test
+    public void testInstanceOverridePropertiesOrdering() {
+        when(System.getenv(ENV_OVERRIDE_PROPERTIES_LOCATION))
+            .thenReturn("classpath:override.properties");
+
+        Main main = new Main();
+        try {
+            Properties properties = new Properties();
+            properties.setProperty("type", "custom");
+
+            main.setOverrideProperties(properties);
+            main.start();
+            assertEquals("custom", 
main.getCamelContext().resolvePropertyPlaceholders("{{type}}"));
+        } finally {
+            main.stop();
+        }
+    }
+
+    @Test
+    public void testOverridePropertiesOrdering() {
+        when(System.getenv(ENV_OVERRIDE_PROPERTIES_LOCATION))
+            .thenReturn("classpath:default.properties");
+        when(System.getProperty(Main.OVERRIDE_PROPERTIES_LOCATION))
+            .thenReturn("classpath:user.properties");
+
+        Main main = new Main();
+        try {
+            main.start();
+            assertEquals("user", 
main.getCamelContext().resolvePropertyPlaceholders("{{type}}"));
+        } finally {
+            main.stop();
+        }
+    }
+
+
+    @Test
+    public void testAll() {
+        when(System.getenv(ENV_INITIAL_PROPERTIES_LOCATION))
+            .thenReturn("classpath:initial.properties");
+        when(System.getenv(ENV_OVERRIDE_PROPERTIES_LOCATION))
+            .thenReturn("classpath:override.properties");
+        when(System.getenv(ENV_PROPERTY_PLACEHOLDER_LOCATION))
+            
.thenReturn("classpath:default.properties,classpath:user.properties");
+
+        Main main = new Main();
+        try {
+            main.start();
+
+            assertEquals("default", 
main.getCamelContext().resolvePropertyPlaceholders("{{hello}}"));
+            assertEquals("override", 
main.getCamelContext().resolvePropertyPlaceholders("{{type}}"));
+            assertEquals("user-value", 
main.getCamelContext().resolvePropertyPlaceholders("{{user-key}}"));
+            assertEquals("initial-value", 
main.getCamelContext().resolvePropertyPlaceholders("{{initial-key}}"));
+        } finally {
+            main.stop();
+        }
+    }
+}
diff --git 
a/core/camel-main/src/test/java/org/apache/camel/main/MainPropertyPlaceholderWithSystemTest.java
 
b/core/camel-main/src/test/java/org/apache/camel/main/MainPropertyPlaceholderWithSystemTest.java
new file mode 100644
index 0000000..98365d7
--- /dev/null
+++ 
b/core/camel-main/src/test/java/org/apache/camel/main/MainPropertyPlaceholderWithSystemTest.java
@@ -0,0 +1,119 @@
+/*
+ * 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.camel.main;
+
+import java.util.Properties;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MainPropertyPlaceholderWithSystemTest extends Assert {
+    @Test
+    public void testCustomPropertyPlaceholderLocation() {
+        Main main = new Main();
+        try {
+            System.setProperty(Main.PROPERTY_PLACEHOLDER_LOCATION, 
"classpath:default.properties");
+            main.start();
+            assertEquals("default", 
main.getCamelContext().resolvePropertyPlaceholders("{{hello}}"));
+        } finally {
+            System.clearProperty(Main.PROPERTY_PLACEHOLDER_LOCATION);
+            main.stop();
+        }
+    }
+
+    @Test
+    public void testInitialProperties() {
+        Main main = new Main();
+        try {
+            System.setProperty(Main.INITIAL_PROPERTIES_LOCATION, 
"classpath:initial.properties");
+            main.start();
+            assertEquals("initial", 
main.getCamelContext().resolvePropertyPlaceholders("{{type}}"));
+        } finally {
+            System.clearProperty(Main.INITIAL_PROPERTIES_LOCATION);
+            main.stop();
+        }
+    }
+
+    @Test
+    public void testInstanceInitialPropertiesOrdering() {
+        Main main = new Main();
+        try {
+            Properties properties = new Properties();
+            properties.setProperty("type", "custom");
+
+            System.setProperty(Main.INITIAL_PROPERTIES_LOCATION, 
"classpath:initial.properties");
+            main.setInitialProperties(properties);
+            main.start();
+            assertEquals("custom", 
main.getCamelContext().resolvePropertyPlaceholders("{{type}}"));
+        } finally {
+            System.clearProperty(Main.INITIAL_PROPERTIES_LOCATION);
+            main.stop();
+        }
+    }
+
+    @Test
+    public void testOverrideProperties() {
+        Main main = new Main();
+        try {
+            System.setProperty(Main.OVERRIDE_PROPERTIES_LOCATION, 
"classpath:override.properties");
+            main.start();
+            assertEquals("override", 
main.getCamelContext().resolvePropertyPlaceholders("{{type}}"));
+        } finally {
+            System.clearProperty(Main.OVERRIDE_PROPERTIES_LOCATION);
+            main.stop();
+        }
+    }
+
+    @Test
+    public void testInstanceOverridePropertiesOrdering() {
+        Main main = new Main();
+        try {
+            Properties properties = new Properties();
+            properties.setProperty("type", "custom");
+
+            System.setProperty(Main.OVERRIDE_PROPERTIES_LOCATION, 
"classpath:override.properties");
+            main.setOverrideProperties(properties);
+            main.start();
+            assertEquals("custom", 
main.getCamelContext().resolvePropertyPlaceholders("{{type}}"));
+        } finally {
+            System.clearProperty(Main.OVERRIDE_PROPERTIES_LOCATION);
+            main.stop();
+        }
+    }
+
+    @Test
+    public void testAll() {
+        Main main = new Main();
+        try {
+            System.setProperty(Main.INITIAL_PROPERTIES_LOCATION, 
"classpath:initial.properties");
+            System.setProperty(Main.OVERRIDE_PROPERTIES_LOCATION, 
"classpath:override.properties");
+            System.setProperty(Main.PROPERTY_PLACEHOLDER_LOCATION, 
"classpath:default.properties,classpath:user.properties");
+
+            main.start();
+
+            assertEquals("default", 
main.getCamelContext().resolvePropertyPlaceholders("{{hello}}"));
+            assertEquals("override", 
main.getCamelContext().resolvePropertyPlaceholders("{{type}}"));
+            assertEquals("user-value", 
main.getCamelContext().resolvePropertyPlaceholders("{{user-key}}"));
+            assertEquals("initial-value", 
main.getCamelContext().resolvePropertyPlaceholders("{{initial-key}}"));
+        } finally {
+            System.clearProperty(Main.INITIAL_PROPERTIES_LOCATION);
+            System.clearProperty(Main.OVERRIDE_PROPERTIES_LOCATION);
+            System.clearProperty(Main.PROPERTY_PLACEHOLDER_LOCATION);
+            main.stop();
+        }
+    }
+}
diff --git a/core/camel-main/src/test/resources/default.properties 
b/core/camel-main/src/test/resources/default.properties
index 02cf755..b92a205 100644
--- a/core/camel-main/src/test/resources/default.properties
+++ b/core/camel-main/src/test/resources/default.properties
@@ -14,4 +14,5 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
-hello=default
\ No newline at end of file
+hello=default
+type=default
\ No newline at end of file
diff --git a/core/camel-main/src/test/resources/default.properties 
b/core/camel-main/src/test/resources/initial.properties
similarity index 96%
copy from core/camel-main/src/test/resources/default.properties
copy to core/camel-main/src/test/resources/initial.properties
index 02cf755..c280a0f 100644
--- a/core/camel-main/src/test/resources/default.properties
+++ b/core/camel-main/src/test/resources/initial.properties
@@ -14,4 +14,5 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
-hello=default
\ No newline at end of file
+type=initial
+initial-key=initial-value
\ No newline at end of file
diff --git a/core/camel-main/src/test/resources/default.properties 
b/core/camel-main/src/test/resources/override.properties
similarity index 98%
copy from core/camel-main/src/test/resources/default.properties
copy to core/camel-main/src/test/resources/override.properties
index 02cf755..ef3582a 100644
--- a/core/camel-main/src/test/resources/default.properties
+++ b/core/camel-main/src/test/resources/override.properties
@@ -14,4 +14,4 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
-hello=default
\ No newline at end of file
+type=override
\ No newline at end of file
diff --git a/core/camel-main/src/test/resources/default.properties 
b/core/camel-main/src/test/resources/user.properties
similarity index 97%
copy from core/camel-main/src/test/resources/default.properties
copy to core/camel-main/src/test/resources/user.properties
index 02cf755..8711a73 100644
--- a/core/camel-main/src/test/resources/default.properties
+++ b/core/camel-main/src/test/resources/user.properties
@@ -14,4 +14,5 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
-hello=default
\ No newline at end of file
+type=user
+user-key=user-value
\ No newline at end of file
diff --git a/parent/pom.xml b/parent/pom.xml
index ea47917..eba8ae7 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -450,6 +450,7 @@
         <pdfbox-version>2.0.19</pdfbox-version>
         <pgjdbc-driver-version>42.2.6</pgjdbc-driver-version>
         <pgjdbc-ng-driver-version>0.8.3</pgjdbc-ng-driver-version>
+        <powermock-version>2.0.7</powermock-version>
         
<properties-maven-plugin-version>1.0-alpha-2</properties-maven-plugin-version>
         <protobuf-version>3.11.1</protobuf-version>
         <protobuf-maven-plugin-version>0.6.1</protobuf-maven-plugin-version>

Reply via email to