Repository: karaf Updated Branches: refs/heads/master 47414d989 -> 9ecba38a4
[KARAF-3527] Appending config from feature doesn't work Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/9ecba38a Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/9ecba38a Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/9ecba38a Branch: refs/heads/master Commit: 9ecba38a4569fad00fc7a454b05bd486d8e63ae3 Parents: 47414d9 Author: Guillaume Nodet <[email protected]> Authored: Fri Feb 20 13:15:47 2015 +0100 Committer: Guillaume Nodet <[email protected]> Committed: Fri Feb 20 13:15:47 2015 +0100 ---------------------------------------------------------------------- .../service/FeatureConfigInstaller.java | 31 +++++++--------- .../org/apache/karaf/features/AppendTest.java | 38 ++++++++++++++++++-- 2 files changed, 48 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/9ecba38a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java ---------------------------------------------------------------------- diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java index aa5c21e..1940868 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/service/FeatureConfigInstaller.java @@ -89,41 +89,34 @@ public class FeatureConfigInstaller { return null; } - void installFeatureConfigs(Feature feature) throws IOException, InvalidSyntaxException { + public void installFeatureConfigs(Feature feature) throws IOException, InvalidSyntaxException { for (ConfigInfo config : feature.getConfigurations()) { - String name = config.getName(); Properties props = config.getProperties(); String[] pid = parsePid(config.getName()); - Configuration cfg = findExistingConfiguration(configAdmin, pid[0], - pid[1]); + Configuration cfg = findExistingConfiguration(configAdmin, pid[0], pid[1]); if (cfg == null) { Dictionary<String, String> cfgProps = convertToDict(props); - cfg = createConfiguration(configAdmin, pid[0], pid[1]); String key = createConfigurationKey(pid[0], pid[1]); cfgProps.put(CONFIG_KEY, key); cfg.update(cfgProps); } else if (config.isAppend()) { + boolean update = false; Dictionary<String,Object> properties = cfg.getProperties(); - for (Enumeration<String> propKeys = properties.keys(); propKeys - .hasMoreElements();) { - String key = propKeys.nextElement(); - // remove existing entry, since it's about appending. - if (props.containsKey(key)) { - props.remove(key); - } - } - if (props.size() > 0) { - // convert props to dictionary - Dictionary<String, String> cfgProps = convertToDict(props); - cfg.update(cfgProps); - } + for (String key : props.stringPropertyNames()) { + if (properties.get(key) == null) { + properties.put(key, props.getProperty(key)); + update = true; + } + } + if (update) { + cfg.update(properties); + } } } for (ConfigFileInfo configFile : feature.getConfigurationFiles()) { installConfigurationFile(configFile.getLocation(), configFile.getFinalname(), configFile.isOverride()); } - } private Dictionary<String, String> convertToDict(Properties props) { http://git-wip-us.apache.org/repos/asf/karaf/blob/9ecba38a/features/core/src/test/java/org/apache/karaf/features/AppendTest.java ---------------------------------------------------------------------- diff --git a/features/core/src/test/java/org/apache/karaf/features/AppendTest.java b/features/core/src/test/java/org/apache/karaf/features/AppendTest.java index da7e3cc..f0fb326 100644 --- a/features/core/src/test/java/org/apache/karaf/features/AppendTest.java +++ b/features/core/src/test/java/org/apache/karaf/features/AppendTest.java @@ -16,10 +16,15 @@ */ package org.apache.karaf.features; +import java.util.Hashtable; import java.util.Properties; import junit.framework.TestCase; +import org.apache.karaf.features.internal.service.FeatureConfigInstaller; import org.apache.karaf.features.internal.service.RepositoryImpl; +import org.easymock.EasyMock; +import org.osgi.service.cm.Configuration; +import org.osgi.service.cm.ConfigurationAdmin; public class AppendTest extends TestCase { @@ -39,10 +44,39 @@ public class AppendTest extends TestCase { Properties properties = configInfo.getProperties(); assertNotNull(properties); - String property = properties - .getProperty("javax.servlet.context.tempdir"); + String property = properties.getProperty("javax.servlet.context.tempdir"); assertNotNull(property); assertFalse(property.contains("${")); + ConfigurationAdmin admin = EasyMock.createMock(ConfigurationAdmin.class); + Configuration config = EasyMock.createMock(Configuration.class); + EasyMock.expect(admin.listConfigurations(EasyMock.eq("(service.pid=org.ops4j.pax.web)"))) + .andReturn(new Configuration[] { config }); + Hashtable<String, Object> original = new Hashtable<>(); + original.put("org.apache.karaf.features.configKey", "org.ops4j.pax.web"); + original.put("foo", "bar"); + EasyMock.expect(config.getProperties()).andReturn(original); + Hashtable<String, Object> expected = new Hashtable<>(); + expected.put("org.apache.karaf.features.configKey", "org.ops4j.pax.web"); + expected.put("javax.servlet.context.tempdir", "data/pax-web-jsp"); + expected.put("foo", "bar"); + config.update(EasyMock.eq(expected)); + EasyMock.expectLastCall(); + EasyMock.replay(admin, config); + FeatureConfigInstaller installer = new FeatureConfigInstaller(admin); + installer.installFeatureConfigs(feature); + EasyMock.verify(admin, config); + + EasyMock.reset(admin, config); + EasyMock.expect(admin.listConfigurations(EasyMock.eq("(service.pid=org.ops4j.pax.web)"))) + .andReturn(new Configuration[]{config}); + original = new Hashtable<>(); + original.put("org.apache.karaf.features.configKey", "org.ops4j.pax.web"); + original.put("javax.servlet.context.tempdir", "value"); + original.put("foo", "bar"); + EasyMock.expect(config.getProperties()).andReturn(original); + EasyMock.replay(admin, config); + installer.installFeatureConfigs(feature); + EasyMock.verify(admin, config); } }
