You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2021/09/18 10:58:28 UTC

[sling-org-apache-sling-feature-cpconverter] branch master updated: SLING-10822 : Avoid duplicate parsing of configuration pid

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/sling-org-apache-sling-feature-cpconverter.git


The following commit(s) were added to refs/heads/master by this push:
     new a3523f4  SLING-10822 : Avoid duplicate parsing of configuration pid
a3523f4 is described below

commit a3523f47ce9bfbd5bb347b6c90d07abdea725603
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Sat Sep 18 12:58:20 2021 +0200

    SLING-10822 : Avoid duplicate parsing of configuration pid
---
 .../features/DefaultFeaturesManager.java           | 41 ++++++++++------------
 .../cpconverter/features/FeaturesManager.java      | 12 ++++++-
 .../AbstractConfigurationEntryHandler.java         |  4 ++-
 .../ContentPackage2FeatureModelConverterTest.java  | 14 ++++----
 .../accesscontrol/EnforcePrincipalBasedTest.java   |  4 +--
 .../BundleEntryHandleSlingInitialContentTest.java  | 13 +++++--
 .../handlers/ConfigEntryHandlerTest.java           | 13 ++++---
 .../handlers/ConfigurationEntryHandlerTest.java    |  2 +-
 .../feature/cpconverter/handlers/RepoInitTest.java |  2 +-
 9 files changed, 62 insertions(+), 43 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java b/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
index e6df73f..26d301c 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/features/DefaultFeaturesManager.java
@@ -269,7 +269,7 @@ public class DefaultFeaturesManager implements FeaturesManager, PackagesEventsEm
 
     public void addSeed(@NotNull Feature seed) throws IOException, ConverterException {
         for (Configuration conf : seed.getConfigurations()) {
-            handleRepoinitAndMappings("seed", conf.isFactoryConfiguration() ? conf.getFactoryPid() : conf.getPid(), conf.getPid(), conf.getConfigurationProperties(), false);
+            handleRepoinitAndMappings("seed", conf, conf.getConfigurationProperties(), false);
         }
         if (seed.getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT) != null) {
             String repoInitText = seed.getExtensions().getByName(Extension.EXTENSION_NAME_REPOINIT).getText();
@@ -308,23 +308,23 @@ public class DefaultFeaturesManager implements FeaturesManager, PackagesEventsEm
         this.aclManager = aclManager;
     }
 
-    private boolean handleRepoinitAndMappings(String runMode, String configId, final String pid, Dictionary<String, Object> configurationProperties, boolean enforceServiceMappingByPrincipal)
+    private boolean handleRepoinitAndMappings(String runMode, Configuration cfg, Dictionary<String, Object> configurationProperties, boolean enforceServiceMappingByPrincipal)
             throws IOException, ConverterException {
-        if (REPOINIT_FACTORY_PID.equals(configId)) {
+        if (REPOINIT_FACTORY_PID.equals(cfg.getFactoryPid())) {
             final String[] scripts = Converters.standardConverter().convert(configurationProperties.get("scripts")).to(String[].class);
             if (scripts != null && scripts.length > 0) {
                 for (final String text : scripts) {
-                    getAclManager().addRepoinitExtention(pid, text, runMode, this);
+                    getAclManager().addRepoinitExtention(cfg.getPid(), text, runMode, this);
                 }
             }
-            checkReferences(configurationProperties, configId);
+            checkReferences(configurationProperties, cfg.getPid());
             return true;
-        } else if (REPOINIT_PID.equals(configId)) {
-            checkReferences(configurationProperties, configId);
+        } else if (REPOINIT_PID.equals(cfg.getPid())) {
+            checkReferences(configurationProperties, cfg.getPid());
             return true;
-        } else if (configId.startsWith(SERVICE_USER_MAPPING_PID)) {
+        } else if (cfg.getPid().startsWith(SERVICE_USER_MAPPING_PID)) {
             String[] mappings = Converters.standardConverter().convert(configurationProperties.get("user.mapping")).to(String[].class);
-            List<String> newMappings = convertMappings(mappings, configId, enforceServiceMappingByPrincipal);
+            List<String> newMappings = convertMappings(mappings, cfg.getPid(), enforceServiceMappingByPrincipal);
             // replace 'user.mapping' property by the new mappings, which may have been refactored
             if (!newMappings.isEmpty()) {
                 configurationProperties.put("user.mapping", newMappings.toArray(new String[0]));
@@ -357,40 +357,35 @@ public class DefaultFeaturesManager implements FeaturesManager, PackagesEventsEm
 
     @Override
     public void addConfiguration(@Nullable String runMode,
-                                 @NotNull String pid,
+                                 @NotNull Configuration cfg,
                                  @NotNull String path,
                                  @NotNull Dictionary<String, Object> configurationProperties)
             throws IOException, ConverterException {
-        String factoryPid = null;
-        int n = pid.indexOf('~');
-        if (n > 0) {
-            factoryPid = pid.substring(0, n);
-        }
-        if (handleRepoinitAndMappings(runMode, factoryPid != null ? factoryPid : pid, pid, configurationProperties, enforceServiceMappingByPrincipal)) {
+        if (handleRepoinitAndMappings(runMode, cfg, configurationProperties, enforceServiceMappingByPrincipal)) {
             return;
         }
 
         Feature feature = getRunMode(runMode);
-        Configuration configuration = feature.getConfigurations().getConfiguration(pid);
+        Configuration configuration = feature.getConfigurations().getConfiguration(cfg.getPid());
 
         if (configuration == null) {
-            configuration = new Configuration(pid);
+            configuration = new Configuration(cfg.getPid());
             feature.getConfigurations().add(configuration);
-            this.pidToPathMapping.put(pid, path);
+            this.pidToPathMapping.put(cfg.getPid(), path);
         } else {
             switch (this.configurationHandling) {
                 case STRICT:
                     throw new ConverterException("Configuration '"
-                            + pid
+                            + cfg.getPid()
                             + "' already defined in Feature Model '"
                             + feature.getId().toMvnId()
                             + "', set the 'mergeConfigurations' flag to 'true' if you want to merge multiple configurations with same PID");
                 case ORDERED:
-                    final String oldPath = this.pidToPathMapping.get(pid);
+                    final String oldPath = this.pidToPathMapping.get(cfg.getPid());
                     if (oldPath == null || oldPath.compareTo(path) > 0) {
-                        this.pidToPathMapping.put(pid, path);
+                        this.pidToPathMapping.put(cfg.getPid(), path);
                         feature.getConfigurations().remove(configuration);
-                        configuration = new Configuration(pid);
+                        configuration = new Configuration(cfg.getPid());
                         feature.getConfigurations().add(configuration);
                     } else {
                         return;
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java b/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java
index 2d1ac99..4bb25a7 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/features/FeaturesManager.java
@@ -21,6 +21,7 @@ import java.util.Dictionary;
 import java.util.Map;
 
 import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Configuration;
 import org.apache.sling.feature.Feature;
 import org.apache.sling.feature.cpconverter.ConverterException;
 import org.jetbrains.annotations.NotNull;
@@ -40,8 +41,17 @@ public interface FeaturesManager {
 
     void addAPIRegionExport(@Nullable String runMode, @NotNull String exportedPackage);
 
+    /**
+     * Add a configuration
+     * @param runMode Optional runmode
+     * @param cfg The configuration object for the pid and factory pid, name - no properties
+     * @param path The path for the configuration
+     * @param configurationProperties The configuration properties
+     * @throws IOException if an error occurs
+     * @throws ConverterException if conversion fails
+     */
     void addConfiguration(@Nullable String runMode,
-                          @NotNull String pid,
+                          @NotNull Configuration cfg,
                           @NotNull String path,
                           @NotNull Dictionary<String, Object> configurationProperties)
             throws IOException, ConverterException;
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java
index 4b61ecc..398c57d 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractConfigurationEntryHandler.java
@@ -24,6 +24,7 @@ import java.util.regex.Matcher;
 
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
+import org.apache.sling.feature.Configuration;
 import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter;
 import org.apache.sling.feature.cpconverter.ConverterException;
 import org.apache.sling.feature.cpconverter.features.FeaturesManager;
@@ -77,7 +78,8 @@ abstract class AbstractConfigurationEntryHandler extends AbstractRegexEntryHandl
                 runMode = matcher.group("runmode");
     
                 FeaturesManager featuresManager = Objects.requireNonNull(converter.getFeaturesManager());
-                featuresManager.addConfiguration(runMode, id, path, configurationProperties);
+                final Configuration cfg = new Configuration(id);
+                featuresManager.addConfiguration(runMode, cfg, path, configurationProperties);
             }
         } else {
             throw new IllegalStateException("Something went terribly wrong: pattern '"
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
index 6cef58c..b573b07 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
@@ -562,8 +562,8 @@ public class ContentPackage2FeatureModelConverterTest extends AbstractConverterT
                      .convert(packageFile);
     
             String pid = "this.is.just.a.pid";
-            converter.getFeaturesManager().addConfiguration(runmodeA, pid, "/a", new Hashtable<>());
-            converter.getFeaturesManager().addConfiguration(runmodeB, pid, "/b", new Hashtable<>());
+            converter.getFeaturesManager().addConfiguration(runmodeA, new Configuration(pid), "/a", new Hashtable<>());
+            converter.getFeaturesManager().addConfiguration(runmodeB, new Configuration(pid), "/b", new Hashtable<>());
     
         } finally {
             deleteDirTree(outputDirectory);
@@ -583,8 +583,8 @@ public class ContentPackage2FeatureModelConverterTest extends AbstractConverterT
                      .convert(packageFile);
     
             String pid = "this.is.just.a.pid";
-            converter.getFeaturesManager().addConfiguration(null, pid, "/apps/a/config/pid.json", new Hashtable<String, Object>(){{put("foo", "a");}});
-            converter.getFeaturesManager().addConfiguration(null, pid, "/apps/b/config/pid.json", new Hashtable<String, Object>(){{put("foo", "b");}});
+            converter.getFeaturesManager().addConfiguration(null, new Configuration(pid), "/apps/a/config/pid.json", new Hashtable<String, Object>(){{put("foo", "a");}});
+            converter.getFeaturesManager().addConfiguration(null, new Configuration(pid), "/apps/b/config/pid.json", new Hashtable<String, Object>(){{put("foo", "b");}});
     
             Configuration c = converter.getFeaturesManager().getTargetFeature().getConfigurations().getConfiguration(pid);
             assertNotNull(c);
@@ -607,9 +607,9 @@ public class ContentPackage2FeatureModelConverterTest extends AbstractConverterT
                      .convert(packageFile);
     
             String pid = "this.is.just.a.pid";
-            converter.getFeaturesManager().addConfiguration(null, pid, "/apps/b/config/pid.json", new Hashtable<String, Object>(){{put("foo", "b");}});
-            converter.getFeaturesManager().addConfiguration(null, pid, "/apps/a/config/pid.json", new Hashtable<String, Object>(){{put("foo", "a");}});
-            converter.getFeaturesManager().addConfiguration(null, pid, "/apps/c/config/pid.json", new Hashtable<String, Object>(){{put("foo", "c");}});
+            converter.getFeaturesManager().addConfiguration(null, new Configuration(pid), "/apps/b/config/pid.json", new Hashtable<String, Object>(){{put("foo", "b");}});
+            converter.getFeaturesManager().addConfiguration(null, new Configuration(pid), "/apps/a/config/pid.json", new Hashtable<String, Object>(){{put("foo", "a");}});
+            converter.getFeaturesManager().addConfiguration(null, new Configuration(pid), "/apps/c/config/pid.json", new Hashtable<String, Object>(){{put("foo", "c");}});
     
             Configuration c = converter.getFeaturesManager().getTargetFeature().getConfigurations().getConfiguration(pid);
             assertNotNull(c);
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/EnforcePrincipalBasedTest.java b/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/EnforcePrincipalBasedTest.java
index dcf311b..3c26e66 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/EnforcePrincipalBasedTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/EnforcePrincipalBasedTest.java
@@ -286,7 +286,7 @@ public class EnforcePrincipalBasedTest {
         seed.getConfigurations().add(foo);
 
         fm.init(ArtifactId.parse("groupId:artifactId:version1.0"));
-        fm.addConfiguration("author", foo.getPid(), "/path", props);
+        fm.addConfiguration("author", foo, "/path", props);
         
         // verify that invalid empty mapping has been stripped (without Exception)
         String[] result = (String[]) foo.getProperties().get("user.mapping");
@@ -303,7 +303,7 @@ public class EnforcePrincipalBasedTest {
         props.put("user.mapping", new String[]{"serviceName:subservice=[user1]","","serviceName2:subservice2=[user2]"});
 
         fm.init(ArtifactId.parse("groupId:artifactId:version1.0"));
-        fm.addConfiguration("author", foo.getPid(), "/path", props);
+        fm.addConfiguration("author", foo, "/path", props);
 
         // verify that invalid empty mapping has been stripped (without Exception)
         String[] result = (String[]) foo.getProperties().get("user.mapping");
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandleSlingInitialContentTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandleSlingInitialContentTest.java
index 657d643..ae0068e 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandleSlingInitialContentTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/BundleEntryHandleSlingInitialContentTest.java
@@ -20,7 +20,6 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.when;
 
 import java.io.File;
@@ -37,6 +36,7 @@ import org.apache.jackrabbit.vault.packaging.PackageProperties;
 import org.apache.jackrabbit.vault.packaging.VaultPackage;
 import org.apache.jackrabbit.vault.packaging.impl.PackageManagerImpl;
 import org.apache.sling.feature.ArtifactId;
+import org.apache.sling.feature.Configuration;
 import org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter.SlingInitialContentPolicy;
 import org.apache.sling.feature.cpconverter.artifacts.SimpleFolderArtifactsDeployer;
 import org.apache.sling.feature.cpconverter.vltpkg.VaultPackageAssembler;
@@ -56,6 +56,9 @@ public class BundleEntryHandleSlingInitialContentTest extends AbstractBundleEntr
     @Captor
     ArgumentCaptor<Dictionary<String, Object>> dictionaryCaptor;
 
+    @Captor
+    ArgumentCaptor<Configuration> cfgCaptor;
+
     @Test
     public void testSlingInitialContent() throws Exception {
         setUpArchive("/jcr_root/apps/gav/install/io.wcm.handler.media-1.11.6.jar", "io.wcm.handler.media-1.11.6.jar");
@@ -122,8 +125,9 @@ public class BundleEntryHandleSlingInitialContentTest extends AbstractBundleEntr
         // modified bundle
         Mockito.verify(featuresManager).addArtifact(null, ArtifactId.fromMvnId("com.composum.nodes:composum-nodes-config:2.5.3-cp2fm-converted"), null);
         // need to use ArgumentCaptur to properly compare string arrays
-        Mockito.verify(featuresManager).addConfiguration(ArgumentMatchers.isNull(), ArgumentMatchers.eq("org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment~composum_core_v2"), ArgumentMatchers.eq("/jcr_root/libs/composum/nodes/install/org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment-composum_core_v2.config"), dictionaryCaptor.capture());
+        Mockito.verify(featuresManager).addConfiguration(ArgumentMatchers.isNull(), cfgCaptor.capture(), ArgumentMatchers.eq("/jcr_root/libs/composum/nodes/install/org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment-composum_core_v2.config"), dictionaryCaptor.capture());
         assertEquals("composum_core", dictionaryCaptor.getValue().get("whitelist.name"));
+        assertEquals("org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment~composum_core_v2", cfgCaptor.getValue().getPid());
         assertArrayEquals(new String[] {
                 "com.composum.nodes.commons",
                 "com.composum.nodes.pckgmgr",
@@ -148,8 +152,11 @@ public class BundleEntryHandleSlingInitialContentTest extends AbstractBundleEntr
         // original bundle
         Mockito.verify(featuresManager).addArtifact(null, ArtifactId.fromMvnId("com.composum.nodes:composum-nodes-config:2.5.3"), null);
         // need to use ArgumentCaptur to properly compare string arrays
-        Mockito.verify(featuresManager).addConfiguration(ArgumentMatchers.isNull(), ArgumentMatchers.eq("org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment~composum_core_v2"), ArgumentMatchers.eq("/jcr_root/libs/composum/nodes/install/org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment-composum_core_v2.config"), dictionaryCaptor.capture());
+        Mockito.verify(featuresManager).addConfiguration(ArgumentMatchers.isNull(),
+             cfgCaptor.capture(),
+             ArgumentMatchers.eq("/jcr_root/libs/composum/nodes/install/org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment-composum_core_v2.config"), dictionaryCaptor.capture());
         assertEquals("composum_core", dictionaryCaptor.getValue().get("whitelist.name"));
+        assertEquals("org.apache.sling.jcr.base.internal.LoginAdminWhitelist.fragment~composum_core_v2", cfgCaptor.getValue().getPid());
         assertArrayEquals(new String[] {
                 "com.composum.nodes.commons",
                 "com.composum.nodes.pckgmgr",
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java
index ba877df..ff61978 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigEntryHandlerTest.java
@@ -51,6 +51,7 @@ import org.apache.sling.feature.io.json.FeatureJSONReader;
 import org.apache.sling.feature.io.json.FeatureJSONWriter;
 import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
+import org.mockito.ArgumentCaptor;
 import org.mockito.Mockito;
 
 public class ConfigEntryHandlerTest {
@@ -68,7 +69,7 @@ public class ConfigEntryHandlerTest {
         Feature expected = new Feature(new ArtifactId("org.apache.sling", "org.apache.sling.cp2fm", "0.0.1", null, null));
         FeaturesManager featuresManager = spy(DefaultFeaturesManager.class);
         when(featuresManager.getTargetFeature()).thenReturn(expected);
-        doCallRealMethod().when(featuresManager).addConfiguration(anyString(), anyString(), anyString(), any());
+        doCallRealMethod().when(featuresManager).addConfiguration(anyString(), any(), anyString(), any());
 
         ContentPackage2FeatureModelConverter converter = mock(ContentPackage2FeatureModelConverter.class);
         when(converter.getFeaturesManager()).thenReturn(featuresManager);
@@ -115,13 +116,17 @@ public class ConfigEntryHandlerTest {
         AbstractConfigurationEntryHandler handler = new AbstractConfigurationEntryHandler("cfg") {
             @Override
             protected @NotNull Dictionary<String, Object> parseConfiguration(@NotNull String name, @NotNull InputStream input) throws IOException {
-                return new Hashtable(){{put("foo", "bar");}};
+                return new Hashtable<String, Object>(){{put("foo", "bar");}};
             }
         };
         handler.handle("/jcr_root/apps/foo/bar/config/baz/blub.cfg", archive, entry, converter);
 
-        Mockito.verify(manager).addConfiguration(null, "blub", "/jcr_root/apps/foo/bar/config/baz/blub.cfg", new Hashtable(){{put("foo","bar");}});
-        Mockito.verify(manager).addConfiguration(Mockito.any(), Mockito.anyString(), Mockito.anyString(), Mockito.any());
+        ArgumentCaptor<Configuration> cfgCaptor = ArgumentCaptor.forClass(Configuration.class);
+
+        Mockito.verify(manager).addConfiguration(Mockito.isNull(), cfgCaptor.capture(), Mockito.eq("/jcr_root/apps/foo/bar/config/baz/blub.cfg"), 
+                Mockito.eq(new Hashtable<String, Object>(){{put("foo","bar");}}));
+        assertEquals("blub", cfgCaptor.getValue().getPid());
+        Mockito.verify(manager).addConfiguration(Mockito.any(), Mockito.any(), Mockito.anyString(), Mockito.any());
     }
 
     @Test
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigurationEntryHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigurationEntryHandlerTest.java
index dcf357c..ea83ac9 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigurationEntryHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/ConfigurationEntryHandlerTest.java
@@ -156,7 +156,7 @@ public class ConfigurationEntryHandlerTest {
         FeaturesManager featuresManager = spy(DefaultFeaturesManager.class);
         ((DefaultFeaturesManager) featuresManager).setEnforceServiceMappingByPrincipal(enforceServiceMappingByPrincipal);
         when(featuresManager.getTargetFeature()).thenReturn(feature);
-        doCallRealMethod().when(featuresManager).addConfiguration(anyString(), anyString(), anyString(), any());
+        doCallRealMethod().when(featuresManager).addConfiguration(anyString(), any(), anyString(), any());
         when(featuresManager.getRunMode(anyString())).thenReturn(feature);
         ContentPackage2FeatureModelConverter converter = mock(ContentPackage2FeatureModelConverter.class);
         when(converter.getFeaturesManager()).thenReturn(featuresManager);
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepoInitTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepoInitTest.java
index 92b5be1..5fbce0d 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepoInitTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepoInitTest.java
@@ -163,7 +163,7 @@ public class RepoInitTest {
         Feature feature = new Feature(new ArtifactId("org.apache.sling", "org.apache.sling.cp2fm", "0.0.1", null, null));
         FeaturesManager featuresManager = spy(DefaultFeaturesManager.class);
         when(featuresManager.getTargetFeature()).thenReturn(feature);
-        doCallRealMethod().when(featuresManager).addConfiguration(anyString(), anyString(), anyString(), any());
+        doCallRealMethod().when(featuresManager).addConfiguration(anyString(), any(), anyString(), any());
         when(featuresManager.getRunMode(anyString())).thenReturn(feature);
 
         AclManager aclManager = spy(new DefaultAclManager((enforcePrincipalBasedAcSetup) ? enforcedPath : null, "system"));