This is an automated email from the ASF dual-hosted git repository.
cziegeler pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/felix-dev.git
The following commit(s) were added to refs/heads/master by this push:
new 1bdd64eff5 FELIX-6590 : cascading defaults error
1bdd64eff5 is described below
commit 1bdd64eff5cd818f31953e193f49014c3124d968
Author: Carsten Ziegeler <[email protected]>
AuthorDate: Fri Feb 3 14:05:23 2023 +0100
FELIX-6590 : cascading defaults error
---
configadmin-plugins/interpolation/pom.xml | 2 +-
.../plugin/interpolation/Interpolator.java | 2 +-
.../plugin/interpolation/InterpolatorTest.java | 31 ++++++++++++++++++++++
.../interpolation/StandaloneInterpolatorTest.java | 2 +-
4 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/configadmin-plugins/interpolation/pom.xml
b/configadmin-plugins/interpolation/pom.xml
index b6ec0b820d..cfac1ded83 100644
--- a/configadmin-plugins/interpolation/pom.xml
+++ b/configadmin-plugins/interpolation/pom.xml
@@ -52,7 +52,7 @@
<plugin>
<groupId>biz.aQute.bnd</groupId>
<artifactId>bnd-maven-plugin</artifactId>
- <version>4.2.0</version>
+ <version>5.1.1</version>
<executions>
<execution>
<goals>
diff --git
a/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Interpolator.java
b/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Interpolator.java
index 9e8c9f03e2..8fd727869f 100755
---
a/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Interpolator.java
+++
b/configadmin-plugins/interpolation/src/main/java/org/apache/felix/configadmin/plugin/interpolation/Interpolator.java
@@ -136,7 +136,7 @@ public class Interpolator {
final Map<String, String> directives;
final String name;
if (dirPos != -1) {
- directives = parseDirectives(postfix.substring(dirPos + 1));
+ directives = parseDirectives(replace(postfix.substring(dirPos
+ 1), provider).toString());
name = postfix.substring(0, dirPos);
} else {
directives = Collections.emptyMap();
diff --git
a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolatorTest.java
b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolatorTest.java
index 05132a9167..b2132cad33 100755
---
a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolatorTest.java
+++
b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/InterpolatorTest.java
@@ -19,6 +19,7 @@ package org.apache.felix.configadmin.plugin.interpolation;
import static org.junit.Assert.assertEquals;
import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
import org.apache.felix.configadmin.plugin.interpolation.Interpolator.Provider;
import org.junit.Test;
@@ -89,4 +90,34 @@ public class InterpolatorTest {
assertEquals(1, directives.size());
assertEquals("1;b=2", directives.get("a"));
}
+
+
+ @Test
+ public void testNestedDefaults() {
+ final AtomicInteger usecase = new AtomicInteger();
+ final Provider p = new Provider() {
+
+ @Override
+ public Object provide(String type, String name, Map<String,
String> directives) {
+ if ( usecase.get() == 1 && "env".equals(type) ) {
+ return "env.host";
+ }
+ if ( usecase.get() == 2 && "prop".equals(type) ) {
+ return "prop.host";
+ }
+ return directives.getOrDefault("default", null);
+ }
+ };
+
+ final String test =
"$[env:MQTT_WRITE_HOST;default=$[prop:MQTT_WRITE_HOST;default=some.host]]";
+ // usecase 1 : env provides the value
+ usecase.set(1);
+ assertEquals("env.host", Interpolator.replace(test, p));
+ // usecase 2 : prop provides the value
+ usecase.set(2);
+ assertEquals("prop.host", Interpolator.replace(test, p));
+ // usecase 3 : default is used
+ usecase.set(3);
+ assertEquals("some.host", Interpolator.replace(test, p));
+ }
}
diff --git
a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/StandaloneInterpolatorTest.java
b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/StandaloneInterpolatorTest.java
index 6566de1f38..be250b318e 100644
---
a/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/StandaloneInterpolatorTest.java
+++
b/configadmin-plugins/interpolation/src/test/java/org/apache/felix/configadmin/plugin/interpolation/StandaloneInterpolatorTest.java
@@ -62,7 +62,7 @@ public class StandaloneInterpolatorTest {
userVar = "USER";
}
- StandaloneInterpolator interpolator = new
StandaloneInterpolator(Collections.emptyMap(), null);
+ StandaloneInterpolator interpolator = new
StandaloneInterpolator(Collections.emptyMap());
Dictionary<String, Object> dict = new Hashtable<>();
dict.put("someuser", "$[env:" + userVar + "]");