From 183933db16e3d6e043bbe4f078c68d5a34488efc Mon Sep 17 00:00:00 2001 From: Robert Munteanu Date: Mon, 8 May 2023 16:16:50 +0200 Subject: [PATCH] SLING-11865 - Conversion fails when initial content document does not include namespace declaration Added failing test --- ...dleEntryHandleSlingInitialContentTest.java | 44 ++++++++++++++++++ .../handlers/mysite.core-1.0.0-SNAPSHOT.jar | Bin 0 -> 19946 bytes 2 files changed, 44 insertions(+) create mode 100644 src/test/resources/org/apache/sling/feature/cpconverter/handlers/mysite.core-1.0.0-SNAPSHOT.jar 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 3af8484d..383d7f8d 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 @@ -48,6 +48,7 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.SystemUtils; +import org.apache.jackrabbit.vault.fs.api.VaultInputSource; import org.apache.jackrabbit.vault.fs.io.Archive; import org.apache.jackrabbit.vault.fs.io.Archive.Entry; import org.apache.jackrabbit.vault.packaging.PackageId; @@ -63,6 +64,8 @@ import org.apache.sling.feature.cpconverter.handlers.slinginitialcontent.BundleSlingInitialContentExtractor; import org.apache.sling.feature.cpconverter.shared.ConverterConstants; import org.apache.sling.feature.cpconverter.vltpkg.VaultPackageAssembler; +import org.hamcrest.CoreMatchers; +import org.hamcrest.MatcherAssert; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; @@ -606,6 +609,47 @@ public void testSlingInitialContentContainingConfigurationExtractAndKeep() throw "com.composum.nodes.pckgmgr", "com.composum.nodes.pckginstall" }, (String[])dictionaryCaptor.getValue().get("whitelist.bundles")); } + + @Test + public void testSlingInitialContentWithMissingNamespaceDeclaration() throws Exception { + String embeddedEntryPath = "/jcr_root/apps/mysite-packages/application/install/mysite.core-1.0.0-SNAPSHOT.jar"; + + setUpArchive(embeddedEntryPath, "mysite.core-1.0.0-SNAPSHOT.jar"); + + DefaultEntryHandlersManager handlersManager = new DefaultEntryHandlersManager(); + File targetFolder = tmpFolder.newFolder(); + when(converter.getArtifactsDeployer()).thenReturn(new SimpleFolderArtifactsDeployer(targetFolder)); + converter.setEntryHandlersManager(handlersManager); + when(converter.isSubContentPackageIncluded(embeddedEntryPath+"-APPLICATION")).thenReturn(true); + VaultPackageAssembler assembler = Mockito.mock(VaultPackageAssembler.class); + Properties props = new Properties(); + props.setProperty(PackageProperties.NAME_GROUP, "org.apache.sling"); + props.setProperty(PackageProperties.NAME_NAME, "testSlingInitialContentWithMissingNamespaceDeclaration"); + props.setProperty(PackageProperties.NAME_VERSION, "1.0-SNAPSHOT"); + when(assembler.getPackageProperties()).thenReturn(props); + converter.setMainPackageAssembler(assembler); + converter.setAclManager(new DefaultAclManager()); + BundleSlingInitialContentExtractor extractor = new BundleSlingInitialContentExtractor(); + + handler.setBundleSlingInitialContentExtractor(extractor); + handler.setSlingInitialContentPolicy(SlingInitialContentPolicy.EXTRACT_AND_KEEP); + handler.handle(embeddedEntryPath, archive, entry, converter); + + converter.deployPackages(); + + // original bundle + ArgumentCaptor captor = ArgumentCaptor.forClass(Artifact.class); + verify(featuresManager).addArtifact(Mockito.isNull(), captor.capture(), Mockito.isNull()); + + // verify generated package + try (VaultPackage vaultPackage = new PackageManagerImpl().open(new File(targetFolder, "mysite.core-apps-1.0.0-SNAPSHOT-cp2fm-converted.zip")); + Archive archive = vaultPackage.getArchive()) { + archive.open(true); + + VaultInputSource inputSource = archive.getInputSource(archive.getEntry("jcr_root/apps/myinitialcontentest/test/my-first-node/.content.xml")); + MatcherAssert.assertThat(inputSource, CoreMatchers.notNullValue()); + } + } @Test public void testSlingInitialContentEscapingPropertyValues() throws Exception { diff --git a/src/test/resources/org/apache/sling/feature/cpconverter/handlers/mysite.core-1.0.0-SNAPSHOT.jar b/src/test/resources/org/apache/sling/feature/cpconverter/handlers/mysite.core-1.0.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..53639d5b2cd57ad94b4ba70ddc6dd02609a88060 GIT binary patch literal 19946 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 E2d8_eOaK4? literal 0 HcmV?d00001