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 + "]");

Reply via email to