This is an automated email from the ASF dual-hosted git repository. pauls pushed a commit to branch issues/SLING-9926-final in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git
commit 2f608cd61a6da8e6f3e4bd33ce3609121a783fc7 Author: Karl Pauls <[email protected]> AuthorDate: Mon Dec 7 09:11:49 2020 +0100 SLING-9926: allow nested folders for config folders --- .../AbstractConfigurationEntryHandler.java | 6 ++++- .../handlers/ConfigEntryHandlerTest.java | 29 ++++++++++++++++++++ .../handlers/ConfigurationEntryHandlerTest.java | 31 +++++++++++----------- 3 files changed, 49 insertions(+), 17 deletions(-) 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 1b71d29..571ca89 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 @@ -45,7 +45,11 @@ abstract class AbstractConfigurationEntryHandler extends AbstractRegexEntryHandl if (matcher.matches()) { String pid = matcher.group("pid"); - + + int idx = pid.lastIndexOf('/'); + if (idx != -1) { + pid = pid.substring(idx + 1); + } String factoryPid = null; String id; int n = pid.indexOf('~'); 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 580df66..400b4fe 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 @@ -28,9 +28,12 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import java.util.Dictionary; +import java.util.Hashtable; import org.apache.jackrabbit.vault.fs.io.Archive; import org.apache.jackrabbit.vault.fs.io.Archive.Entry; @@ -43,6 +46,7 @@ import org.apache.sling.feature.cpconverter.features.FeaturesManager; import org.apache.sling.feature.io.json.FeatureJSONReader; import org.apache.sling.feature.io.json.FeatureJSONWriter; import org.junit.Test; +import org.mockito.Mockito; public class ConfigEntryHandlerTest { @@ -90,4 +94,29 @@ public class ConfigEntryHandlerTest { assertTrue((boolean) configurationProperties.get("user.disableMissing")); } + + + @Test + public void testConfigPathWithFolders() throws Exception { + Archive archive = mock(Archive.class); + Entry entry = mock(Entry.class); + FeaturesManager manager = mock(FeaturesManager.class); + ContentPackage2FeatureModelConverter converter = mock(ContentPackage2FeatureModelConverter.class); + when(converter.getFeaturesManager()).thenReturn(manager); + + when(entry.getName()).thenReturn("/jcr_root/apps/foo/bar/config/baz/blub.cfg"); + when(archive.openInputStream(entry)).thenReturn(new ByteArrayInputStream("{}".getBytes())); + + AbstractConfigurationEntryHandler handler = new AbstractConfigurationEntryHandler("cfg") { + @Override + protected Dictionary<String, Object> parseConfiguration(String name, InputStream input) throws Exception { + return new Hashtable(){{put("foo", "bar");}}; + } + }; + handler.handle("/jcr_root/apps/foo/bar/config/baz/blub.cfg", archive, entry, converter); + + Mockito.verify(manager).addConfiguration(null, "blub", new Hashtable(){{put("foo","bar");}}); + Mockito.verify(manager).addConfiguration(Mockito.any(), Mockito.anyString(), Mockito.any()); + } + } 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 38d95b9..ae5c08a 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 @@ -134,24 +134,23 @@ public class ConfigurationEntryHandlerTest { } if (expectedConfigurationsSize != 0) { - Configuration configuration = configurations.get(0); - - assertTrue(configuration.getPid(), configuration.getPid().startsWith(EXPECTED_PID)); - - if (configuration.getPid().contains(".empty")) { - assertTrue(configuration.getProperties().isEmpty()); - } else { - assertEquals("Unmatching size: " + configuration.getProperties().size(), expectedConfigurationsEntrySize, configuration.getProperties().size()); - } - // type & value check for typed configuration - if (this.resourceConfiguration.equals(TYPED_TESTCONFIG_PATH)) { - Writer writer = new StringWriter(); - ConfigurationJSONWriter.write(writer, configurations); - assertEquals(EXPECTED_TYPED_CONFIG, writer.toString()); + Configuration configuration = configurations.get(0); + + assertTrue(configuration.getPid(), configuration.getPid().startsWith(EXPECTED_PID)); + + if (configuration.getPid().contains(".empty")) { + assertTrue(configuration.getProperties().isEmpty()); + } else { + assertEquals("Unmatching size: " + configuration.getProperties().size(), expectedConfigurationsEntrySize, configuration.getProperties().size()); + } + // type & value check for typed configuration + if (this.resourceConfiguration.equals(TYPED_TESTCONFIG_PATH)) { + Writer writer = new StringWriter(); + ConfigurationJSONWriter.write(writer, configurations); + assertEquals(EXPECTED_TYPED_CONFIG, writer.toString()); + } } - } -} @Parameters public static Collection<Object[]> data() {
