This is an automated email from the ASF dual-hosted git repository.
pauls 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 1b7246b SLING-10579: fix package types in emitter events (#95)
1b7246b is described below
commit 1b7246b876076b6c0e41356a310eb1e02929724c
Author: Karl Pauls <[email protected]>
AuthorDate: Fri Jul 2 14:42:17 2021 +0200
SLING-10579: fix package types in emitter events (#95)
Co-authored-by: angela <[email protected]>
---
.../ContentPackage2FeatureModelConverter.java | 115 +++++++++++----------
.../features/DefaultFeaturesManager.java | 44 +++-----
.../AbstractConfigurationEntryHandler.java | 2 +-
.../handlers/AbstractUserEntryHandler.java | 11 +-
.../vltpkg/DefaultPackagesEventsEmitter.java | 46 +++++----
.../cpconverter/vltpkg/PackagesEventsEmitter.java | 40 ++++++-
.../ContentPackage2FeatureModelConverterTest.java | 29 ++++++
.../ConverterUserAndPermissionTest.java | 2 +
.../vltpkg/PackagesEventsEmitterTest.java | 10 +-
.../apache/sling/feature/cpconverter/demo-cp2.zip | Bin 14913 -> 14902 bytes
10 files changed, 173 insertions(+), 126 deletions(-)
diff --git
a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
index cbc994c..a02f1a5 100644
---
a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
+++
b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
@@ -195,12 +195,17 @@ public class ContentPackage2FeatureModelConverter extends
BaseVaultPackageScanne
this.aclManager = aclManager;
return this;
}
+
+ public boolean hasMainPackageAssembler() {
+ return mainPackageAssembler != null;
+ }
- public @Nullable VaultPackageAssembler getMainPackageAssembler() {
- return mainPackageAssembler;
+ public @NotNull VaultPackageAssembler getMainPackageAssembler() {
+ // verify that mainPackageAssembler has been set before retrieving it
+ return Objects.requireNonNull(mainPackageAssembler);
}
- public @NotNull ContentPackage2FeatureModelConverter
setMainPackageAssembler(@Nullable VaultPackageAssembler assembler) {
+ public @NotNull ContentPackage2FeatureModelConverter
setMainPackageAssembler(@NotNull VaultPackageAssembler assembler) {
this.mainPackageAssembler = assembler;
return this;
}
@@ -292,22 +297,20 @@ public class ContentPackage2FeatureModelConverter extends
BaseVaultPackageScanne
logger.info("Converting content-package '{}'...",
vaultPackage.getId());
traverse(vaultPackage);
- // attach all unmatched resources as new content-package
- File contentPackageArchive =
getMainPackageAssembler().createPackage();
+ // retrieve the resulting zip-content-package and deploy it to
the local mvn bundles dir.
+ try (VaultPackage result =
processContentPackageArchive(getMainPackageAssembler(), null)) {
- // deploy the new zip content-package to the local mvn bundles
dir
+ // finally serialize the Feature Model(s) file(s)
- processContentPackageArchive(contentPackageArchive,
getMainPackageAssembler(), null);
+ aclManager.addRepoinitExtension(assemblers,
featuresManager);
- // finally serialize the Feature Model(s) file(s)
+ logger.info("Conversion complete!");
- aclManager.addRepoinitExtension(assemblers, featuresManager);
+ featuresManager.serialize();
- logger.info("Conversion complete!");
-
- featuresManager.serialize();
- emitters.stream().forEach(PackagesEventsEmitter::endPackage);
+ emitters.stream().forEach(e ->
e.endPackage(vaultPackage.getId(), result));
+ }
} finally {
aclManager.reset();
assemblers.clear();
@@ -379,57 +382,58 @@ public class ContentPackage2FeatureModelConverter extends
BaseVaultPackageScanne
clonedPackage.addDependency(new Dependency(parentId));
}
- File contentPackageArchive = clonedPackage.createPackage();
-
// deploy the new content-package to the local mvn bundles dir and
attach it to the feature
- processContentPackageArchive(contentPackageArchive, clonedPackage,
runMode);
+ try (VaultPackage result = processContentPackageArchive(clonedPackage,
runMode)) {
+ emitters.stream().forEach(e -> e.endSubPackage(path,
vaultPackage.getId(), result));
+ }
// restore the previous assembler
setMainPackageAssembler(handler);
-
- emitters.stream().forEach(PackagesEventsEmitter::endSubPackage);
}
- public void processContentPackageArchive(@NotNull File
contentPackageArchive, @NotNull VaultPackageAssembler assembler,
+ private @NotNull VaultPackage processContentPackageArchive(@NotNull
VaultPackageAssembler assembler,
@Nullable String runMode) throws
Exception {
- try (VaultPackage vaultPackage = open(contentPackageArchive)) {
- PackageType packageType = detectPackageType(vaultPackage);
-
- // SLING-8608 - Fail the conversion if the resulting attached
content-package is MIXED type
- if (PackageType.MIXED == packageType && failOnMixedPackages) {
- throw new IllegalStateException("Generated content-package '"
- + vaultPackage.getId()
- + "' located in file "
- + contentPackageArchive
- + " is of MIXED type");
- }
+ File contentPackageArchive = assembler.createPackage();
- ArtifactId mvnPackageId = toArtifactId(vaultPackage.getId(),
contentPackageArchive);
- // special handling for converted packages of type content
- if (PackageType.CONTENT == packageType) {
- switch (contentTypePackagePolicy) {
- case DROP:
- mutableContentsIds.put(vaultPackage.getId(),
getDependencies(vaultPackage));
- logger.info("Dropping package of PackageType.CONTENT
{} (content-package id: {})",
- mvnPackageId.getArtifactId(),
vaultPackage.getId());
- break;
- case PUT_IN_DEDICATED_FOLDER:
- mutableContentsIds.put(vaultPackage.getId(),
getDependencies(vaultPackage));
- // deploy the new content-package to the unreferenced
artifacts deployer
- if (unreferencedArtifactsDeployer == null) {
- throw new
IllegalStateException("ContentTypePackagePolicy PUT_IN_DEDICATED_FOLDER
requires a valid deployer ");
- }
- unreferencedArtifactsDeployer.deploy(new
FileArtifactWriter(contentPackageArchive), mvnPackageId);
- logger.info("Put converted package of
PackageType.CONTENT {} (content-package id: {}) in {} (not referenced in
feature model)",
- mvnPackageId.getArtifactId(),
vaultPackage.getId(), unreferencedArtifactsDeployer.getBaseDirectory());
- break;
- case REFERENCE:
- deploy(assembler, mvnPackageId, runMode);
- }
- } else {
- deploy(assembler, mvnPackageId, runMode);
+ VaultPackage vaultPackage = open(contentPackageArchive);
+
+ PackageType packageType = detectPackageType(vaultPackage);
+
+ // SLING-8608 - Fail the conversion if the resulting attached
content-package is MIXED type
+ if (PackageType.MIXED == packageType && failOnMixedPackages) {
+ throw new IllegalStateException("Generated content-package '"
+ + vaultPackage.getId()
+ + "' located in file "
+ + contentPackageArchive
+ + " is of MIXED type");
+ }
+
+ ArtifactId mvnPackageId = toArtifactId(vaultPackage.getId(),
contentPackageArchive);
+ // special handling for converted packages of type content
+ if (PackageType.CONTENT == packageType) {
+ switch (contentTypePackagePolicy) {
+ case DROP:
+ mutableContentsIds.put(vaultPackage.getId(),
getDependencies(vaultPackage));
+ logger.info("Dropping package of PackageType.CONTENT {}
(content-package id: {})",
+ mvnPackageId.getArtifactId(),
vaultPackage.getId());
+ break;
+ case PUT_IN_DEDICATED_FOLDER:
+ mutableContentsIds.put(vaultPackage.getId(),
getDependencies(vaultPackage));
+ // deploy the new content-package to the unreferenced
artifacts deployer
+ if (unreferencedArtifactsDeployer == null) {
+ throw new
IllegalStateException("ContentTypePackagePolicy PUT_IN_DEDICATED_FOLDER
requires a valid deployer ");
+ }
+ unreferencedArtifactsDeployer.deploy(new
FileArtifactWriter(contentPackageArchive), mvnPackageId);
+ logger.info("Put converted package of PackageType.CONTENT
{} (content-package id: {}) in {} (not referenced in feature model)",
+ mvnPackageId.getArtifactId(),
vaultPackage.getId(), unreferencedArtifactsDeployer.getBaseDirectory());
+ break;
+ case REFERENCE:
+ deploy(assembler, mvnPackageId, runMode);
}
+ } else {
+ deploy(assembler, mvnPackageId, runMode);
}
+ return vaultPackage;
}
public void deployPackages() {
@@ -466,7 +470,7 @@ public class ContentPackage2FeatureModelConverter extends
BaseVaultPackageScanne
return subContentPackages.containsValue(path);
}
- private boolean process(@NotNull String entryPath, @NotNull Archive
archive, @Nullable Entry entry) throws Exception {
+ private void process(@NotNull String entryPath, @NotNull Archive archive,
@Nullable Entry entry) throws Exception {
if (resourceFilter != null && resourceFilter.isFilteredOut(entryPath))
{
throw new IllegalArgumentException("Path '"
+ entryPath
@@ -490,7 +494,6 @@ public class ContentPackage2FeatureModelConverter extends
BaseVaultPackageScanne
if (!getMainPackageAssembler().recordEntryPath(entryPath)) {
logger.warn("Duplicate entry path {}", entryPath);
}
- return true;
}
@Override
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 29452ba..bd6e66c 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
@@ -36,6 +36,7 @@ import java.util.Map.Entry;
import java.util.Objects;
import java.util.Stack;
+import org.apache.jackrabbit.vault.packaging.PackageId;
import org.apache.jackrabbit.vault.packaging.VaultPackage;
import org.apache.sling.feature.Artifact;
import org.apache.sling.feature.ArtifactId;
@@ -73,7 +74,7 @@ public class DefaultFeaturesManager implements
FeaturesManager, PackagesEventsEm
ORDERED,
MERGE,
STRICT
- };
+ }
private static final String CONTENT_PACKAGES = "content-packages";
@@ -538,49 +539,34 @@ public class DefaultFeaturesManager implements
FeaturesManager, PackagesEventsEm
}
}
}
-
- /**
- * Package converter starts
- */
+
+ @Override
public void start() {
// nothing to do
}
- /**
- * Package converter ends
- */
+ @Override
public void end() {
// nothing to do
}
- /**
- * Package starts
- * @param vaultPackage the package
- */
- public void startPackage(final @NotNull VaultPackage vaultPackage) {
- packageIds.push(vaultPackage.getId().toString());
+ @Override
+ public void startPackage(@NotNull VaultPackage originalPackage) {
+ packageIds.push(originalPackage.getId().toString());
}
- /**
- * Package ends
- */
- public void endPackage() {
+ @Override
+ public void endPackage(@NotNull PackageId originalPackageId, @NotNull
VaultPackage convertedPackage) {
packageIds.pop();
}
- /**
- * Sub package starts
- * @param path The path
- * @param vaultPackage the package
- */
- public void startSubPackage(final @NotNull String path, final @NotNull
VaultPackage vaultPackage) {
- packageIds.push(vaultPackage.getId().toString());
+ @Override
+ public void startSubPackage(@NotNull String path, @NotNull VaultPackage
originalPackage) {
+ packageIds.push(originalPackage.getId().toString());
}
- /**
- * Sub package ends
- */
- public void endSubPackage() {
+ @Override
+ public void endSubPackage(@NotNull String path, @NotNull PackageId
originalPackageId, @NotNull VaultPackage convertedPackage) {
packageIds.pop();
}
}
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 fa0b514..2d10caf 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
@@ -76,7 +76,7 @@ abstract class AbstractConfigurationEntryHandler extends
AbstractRegexEntryHandl
if (configurationProperties == null) {
logger.info("{} entry does not contain a valid OSGi
configuration, treating it as a regular resource", path);
-
Objects.requireNonNull(converter.getMainPackageAssembler()).addEntry(path,
archive, entry);
+ converter.getMainPackageAssembler().addEntry(path, archive,
entry);
return;
}
diff --git
a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractUserEntryHandler.java
b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractUserEntryHandler.java
index b34871d..f2ab658 100644
---
a/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractUserEntryHandler.java
+++
b/src/main/java/org/apache/sling/feature/cpconverter/handlers/AbstractUserEntryHandler.java
@@ -50,16 +50,13 @@ abstract class AbstractUserEntryHandler extends
AbstractRegexEntryHandler {
byte[] tmp = IOUtils.toByteArray((archive.openInputStream(entry)));
AbstractUserParser parser = createParser(converter, originalPath,
intermediatePath);
boolean converted = parser.parse(new ByteArrayInputStream(tmp));
- if (!converted && !path.contains(systemUserSegment)) {
+ if (!converted && !path.contains(systemUserSegment) &&
converter.hasMainPackageAssembler()) {
// write back regular users, groups and their intermediate
folders that did not get converted into
// repo-init statements to the content package
VaultPackageAssembler assembler =
converter.getMainPackageAssembler();
- // if we don't have an assembler we are in the firstPass and
are only collecting
- if (assembler != null) {
- try (InputStream input = new ByteArrayInputStream(tmp);
- OutputStream output = assembler.createEntry(path)) {
- IOUtils.copy(input, output);
- }
+ try (InputStream input = new ByteArrayInputStream(tmp);
+ OutputStream output = assembler.createEntry(path)) {
+ IOUtils.copy(input, output);
}
}
}
diff --git
a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/DefaultPackagesEventsEmitter.java
b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/DefaultPackagesEventsEmitter.java
index 3b2433c..ce54263 100644
---
a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/DefaultPackagesEventsEmitter.java
+++
b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/DefaultPackagesEventsEmitter.java
@@ -60,6 +60,10 @@ public final class DefaultPackagesEventsEmitter implements
PackagesEventsEmitter
private static final String FILENAME = "content-packages.csv";
private static final String PATH_SEPARATOR_CHAR = "!";
+ /**
+ * placeholder used in the idOutputLine for the package type until the
final package is given in the end call
+ */
+ private static final String PACKAGE_TYPE = "PACKAGE_TYPE";
public static @NotNull DefaultPackagesEventsEmitter open(@NotNull File
featureModelsOutputDirectory) throws IOException {
if (!featureModelsOutputDirectory.exists()) {
@@ -74,7 +78,7 @@ public final class DefaultPackagesEventsEmitter implements
PackagesEventsEmitter
private final Stack<PackageId> hierarchy = new Stack<>();
- private final Collection<VaultPackage> packages = new LinkedList<>();
+ private final Collection<VaultPackage> dependenciesOnly = new
LinkedList<>();
private final Map<PackageId, String> idOutputLine = new HashMap<>();
@@ -95,8 +99,8 @@ public final class DefaultPackagesEventsEmitter implements
PackagesEventsEmitter
@Override
public void end() {
try {
- DependencyUtil.sort(packages);
- for (VaultPackage pkg : packages) {
+ DependencyUtil.sort(dependenciesOnly);
+ for (VaultPackage pkg : dependenciesOnly) {
writer.printf(idOutputLine.get(pkg.getId()));
}
@@ -112,40 +116,38 @@ public final class DefaultPackagesEventsEmitter
implements PackagesEventsEmitter
}
@Override
- public void startPackage(@NotNull VaultPackage vaultPackage) {
- PackageId id = vaultPackage.getId();
- Dependency[] dependencies = vaultPackage.getDependencies();
- paths.add(vaultPackage.getFile().getAbsolutePath());
+ public void startPackage(@NotNull VaultPackage originalPackage) {
+ PackageId id = originalPackage.getId();
+ Dependency[] dependencies = originalPackage.getDependencies();
+ paths.add(originalPackage.getFile().getAbsolutePath());
hierarchy.add(id);
- current = vaultPackage;
+ current = originalPackage;
- packages.add(getDepOnlyPackage(id, dependencies));
+ dependenciesOnly.add(getDepOnlyPackage(id, dependencies));
idOutputLine.put(id, String.format("%s,%s,%s,,,\n",
paths.peek(),
hierarchy.peek(),
- detectPackageType(vaultPackage)));
+ PACKAGE_TYPE));
}
-
-
@Override
- public void endPackage() {
+ public void endPackage(@NotNull PackageId originalPackageId, @NotNull
VaultPackage convertedPackage) {
+ idOutputLine.computeIfPresent(originalPackageId, (key, value) ->
value.replace(PACKAGE_TYPE, detectPackageType(convertedPackage).toString()));
paths.pop();
hierarchy.pop();
}
@Override
- public void startSubPackage(@NotNull String path, @NotNull VaultPackage
vaultPackage) {
- PackageId id = vaultPackage.getId();
- Dependency[] dependencies = vaultPackage.getDependencies();
+ public void startSubPackage(@NotNull String path, @NotNull VaultPackage
originalPackage) {
+ Dependency[] dependencies = originalPackage.getDependencies();
paths.add(path);
String absolutePath =
paths.stream().collect(joining(PATH_SEPARATOR_CHAR));
- packages.add(getDepOnlyPackage(id, dependencies));
- idOutputLine.put(vaultPackage.getId(),
String.format("%s,%s,%s,%s,%s,%s\n",
+ PackageId id = originalPackage.getId();
+ dependenciesOnly.add(getDepOnlyPackage(id, dependencies));
+ idOutputLine.put(id, String.format("%s,%s,%s,%s,%s,%s\n",
current.getFile().getAbsolutePath(),
- id,
- detectPackageType(vaultPackage),
+ id, PACKAGE_TYPE,
hierarchy.peek(),
path,
absolutePath));
@@ -154,8 +156,8 @@ public final class DefaultPackagesEventsEmitter implements
PackagesEventsEmitter
}
@Override
- public void endSubPackage() {
- endPackage();
+ public void endSubPackage(@NotNull String path, @NotNull PackageId
originalPackageId, @NotNull VaultPackage convertedPackage) {
+ endPackage(originalPackageId,convertedPackage);
}
static @NotNull VaultPackage getDepOnlyPackage(@NotNull PackageId id,
diff --git
a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitter.java
b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitter.java
index b8488ca..00dbe2f 100644
---
a/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitter.java
+++
b/src/main/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitter.java
@@ -16,21 +16,51 @@
*/
package org.apache.sling.feature.cpconverter.vltpkg;
+import org.apache.jackrabbit.vault.packaging.PackageId;
import org.apache.jackrabbit.vault.packaging.VaultPackage;
import org.jetbrains.annotations.NotNull;
public interface PackagesEventsEmitter {
+ /**
+ * Package converter starts
+ */
void start();
+ /**
+ * Package converter ends
+ */
void end();
- void startPackage(@NotNull VaultPackage vaultPackage);
+ /**
+ * Marks the start of the given original package.
+ *
+ * @param originalPackage the package to be converted.
+ */
+ void startPackage(@NotNull VaultPackage originalPackage);
- void endPackage();
+ /**
+ * Marks the end of the conversion of the package with {@code
originalPackageId}.
+ *
+ * @param originalPackageId The id of the original package as passed to
{@link #startPackage(VaultPackage)}.
+ * @param convertedPackage the converted package.
+ */
+ void endPackage(@NotNull PackageId originalPackageId, @NotNull
VaultPackage convertedPackage);
- void startSubPackage(@NotNull String path, @NotNull VaultPackage
vaultPackage);
-
- void endSubPackage();
+ /**
+ * Marks the start of the given sub package.
+ *
+ * @param path The path of the sub package in the original parent package
+ * @param originalPackage the sub package to be converted.
+ */
+ void startSubPackage(@NotNull String path, @NotNull VaultPackage
originalPackage);
+ /**
+ * Marks the end of the conversion of the sub package with {@code
originalPackageId}.
+ *
+ * @param path The path of the original sub package in the parent package
+ * @param originalPackageId The id of the original sub package as passed
to {@link #startSubPackage(String, VaultPackage)}.
+ * @param convertedPackage the converted package
+ */
+ void endSubPackage(@NotNull String path, @NotNull PackageId
originalPackageId, @NotNull VaultPackage convertedPackage);
}
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 5bdd248..1f82f3a 100644
---
a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
+++
b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
@@ -52,6 +52,7 @@ import
org.apache.jackrabbit.vault.fs.spi.PrivilegeDefinitions;
import org.apache.jackrabbit.vault.packaging.CyclicDependencyException;
import org.apache.jackrabbit.vault.packaging.PackageId;
import org.apache.jackrabbit.vault.packaging.PackageProperties;
+import org.apache.jackrabbit.vault.packaging.PackageType;
import org.apache.jackrabbit.vault.packaging.VaultPackage;
import org.apache.jackrabbit.vault.packaging.impl.PackageManagerImpl;
import org.apache.jackrabbit.vault.util.Constants;
@@ -852,6 +853,34 @@ public class ContentPackage2FeatureModelConverterTest
extends AbstractConverterT
}
}
+ /**
+ * "demo-cp2.zip" contains no application content below /apps.
+ * The content package therefore gets type CONTENT assigned (and not
MIXED).
+ *
+ * @throws Exception
+ */
+ @Test
+ public void testConvertedCONTENTPackageHasTypeCalculatedCorrectly() throws
Exception {
+ URL packageUrl = getClass().getResource("demo-cp2.zip");
+ File packageFile = FileUtils.toFile(packageUrl);
+ File outputDirectory = new File(System.getProperty("java.io.tmpdir"),
getClass().getName() + '_' + System.currentTimeMillis());
+
+ File unrefOutputDir = new File(outputDirectory, "unref");
+
+ converter.setFeaturesManager(new DefaultFeaturesManager(true, 5,
outputDirectory, null, null, null, new DefaultAclManager()))
+ .setUnreferencedArtifactsDeployer(new
LocalMavenRepositoryArtifactsDeployer(unrefOutputDir))
+
.setContentTypePackagePolicy(PackagePolicy.PUT_IN_DEDICATED_FOLDER)
+ .setEmitter(DefaultPackagesEventsEmitter.open(outputDirectory))
+ .convert(packageFile);
+
+ File converted = new File(unrefOutputDir,
"my_packages/demo-cp/0.0.0/demo-cp-0.0.0-cp2fm-converted.zip");
+
+ assertEquals(PackageType.CONTENT,
converter.open(converted).getProperties().getPackageType());
+ try (FileReader reader = new FileReader(new File(outputDirectory,
"content-packages.csv"))){
+
assertTrue(IOUtils.readLines(reader).get(2).contains("my_packages:demo-cp,CONTENT"));
+ }
+ }
+
private File[] load(String...resources) {
File[] loadedResources = new File[resources.length];
diff --git
a/src/test/java/org/apache/sling/feature/cpconverter/ConverterUserAndPermissionTest.java
b/src/test/java/org/apache/sling/feature/cpconverter/ConverterUserAndPermissionTest.java
index 82f8d30..178f492 100644
---
a/src/test/java/org/apache/sling/feature/cpconverter/ConverterUserAndPermissionTest.java
+++
b/src/test/java/org/apache/sling/feature/cpconverter/ConverterUserAndPermissionTest.java
@@ -18,6 +18,7 @@ package org.apache.sling.feature.cpconverter;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.vault.packaging.PackageType;
import org.apache.sling.feature.Extension;
import org.apache.sling.feature.Feature;
import
org.apache.sling.feature.cpconverter.ContentPackage2FeatureModelConverter.PackagePolicy;
@@ -48,6 +49,7 @@ import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.io.File;
+import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
diff --git
a/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitterTest.java
b/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitterTest.java
index 97a2855..344fcb7 100644
---
a/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitterTest.java
+++
b/src/test/java/org/apache/sling/feature/cpconverter/vltpkg/PackagesEventsEmitterTest.java
@@ -54,31 +54,29 @@ public class PackagesEventsEmitterTest {
PackagesEventsEmitter emitter = new
DefaultPackagesEventsEmitter(stringWriter);
emitter.start();
emitter.startPackage(parent);
-
VaultPackage contentChild = mock(VaultPackage.class);
when(contentChild.getPackageType()).thenReturn(PackageType.CONTENT);
when(contentChild.getId()).thenReturn(ID_CONTENT_CHILD);
when(contentChild.getDependencies()).thenReturn(new Dependency[]{new
Dependency(ID_PARENT), new Dependency(ID_APPLICATION_CHILD)});
emitter.startSubPackage("/jcr_root/etc/packages/org/apache/sling/content-child-1.0.zip",
contentChild);
- emitter.endSubPackage();
+
emitter.endSubPackage("/jcr_root/etc/packages/org/apache/sling/content-child-1.0.zip",
contentChild.getId(), contentChild);
VaultPackage applicationChild = mock(VaultPackage.class);
when(applicationChild.getPackageType()).thenReturn(PackageType.APPLICATION);
when(applicationChild.getId()).thenReturn(ID_APPLICATION_CHILD);
when(applicationChild.getDependencies()).thenReturn(new
Dependency[]{new Dependency(ID_PARENT)});
emitter.startSubPackage("/jcr_root/etc/packages/org/apache/sling/application-child-1.0.zip",
applicationChild);
-
VaultPackage nestedChild = mock(VaultPackage.class);
when(nestedChild.getPackageType()).thenReturn(PackageType.CONTAINER);
when(nestedChild.getId()).thenReturn(ID_NESTED_CHILD);
when(nestedChild.getDependencies()).thenReturn(new Dependency[]{new
Dependency(ID_APPLICATION_CHILD)});
emitter.startSubPackage("/jcr_root/etc/packages/org/apache/sling/nested-child-1.0.zip",
nestedChild);
- emitter.endSubPackage();
+
emitter.endSubPackage("/jcr_root/etc/packages/org/apache/sling/nested-child-1.0.zip",
nestedChild.getId(), nestedChild);
// applicationChild
- emitter.endSubPackage();
+
emitter.endSubPackage("/jcr_root/etc/packages/org/apache/sling/application-child-1.0.zip",
applicationChild.getId(), applicationChild);
- emitter.endPackage();
+ emitter.endPackage(parent.getId(),parent);
emitter.end();
String actual = stringWriter.toString();
diff --git
a/src/test/resources/org/apache/sling/feature/cpconverter/demo-cp2.zip
b/src/test/resources/org/apache/sling/feature/cpconverter/demo-cp2.zip
index d459a5d..ec81000 100644
Binary files
a/src/test/resources/org/apache/sling/feature/cpconverter/demo-cp2.zip and
b/src/test/resources/org/apache/sling/feature/cpconverter/demo-cp2.zip differ