You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2021/12/16 13:54:09 UTC
[sling-org-apache-sling-feature-cpconverter] branch master updated: Add failing unit test for missing dependency issue (#120)
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 edeee9f Add failing unit test for missing dependency issue (#120)
edeee9f is described below
commit edeee9f98e697570979c0bccf456e5e2c3f63f35
Author: Niek Raaijmakers <ni...@gmail.com>
AuthorDate: Thu Dec 16 14:54:02 2021 +0100
Add failing unit test for missing dependency issue (#120)
Co-authored-by: Niek Raaijmakers <ra...@adobe.com>
---
.../ContentPackage2FeatureModelConverterTest.java | 101 ++++++++++++++++++++-
.../build_playground.ui.content-1.0-SNAPSHOT.zip | Bin 0 -> 17699035 bytes
2 files changed, 100 insertions(+), 1 deletion(-)
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 a16c332..f5f3843 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverterTest.java
@@ -34,6 +34,7 @@ import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import java.net.URL;
+import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.*;
import java.util.zip.ZipFile;
@@ -44,15 +45,18 @@ import javax.json.JsonObject;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
import org.apache.jackrabbit.vault.fs.spi.PrivilegeDefinitions;
-import org.apache.jackrabbit.vault.packaging.CyclicDependencyException;
+import org.apache.jackrabbit.vault.packaging.Dependency;
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.packaging.impl.ZipVaultPackage;
import org.apache.sling.feature.ArtifactId;
import org.apache.sling.feature.Artifacts;
+import org.apache.sling.feature.Artifact;
import org.apache.sling.feature.Configuration;
import org.apache.sling.feature.Configurations;
import org.apache.sling.feature.Extension;
@@ -89,6 +93,8 @@ public class ContentPackage2FeatureModelConverterTest extends AbstractConverterT
"test_b-1.0.zip",
"test_e-1.0.zip" };
+ private static final String FORMAT = "%1$s/%2$s/%3$s/%2$s-%3$s-cp2fm-converted.zip";
+
private ContentPackage2FeatureModelConverter converter;
private EntryHandlersManager handlersManager;
@@ -138,6 +144,97 @@ public class ContentPackage2FeatureModelConverterTest extends AbstractConverterT
}
@Test
+ public void checkIfGeneratedDependenciesAreProvided() throws Exception {
+ URL packageUrl = getClass().getResource("build_playground.ui.content-1.0-SNAPSHOT.zip");
+ File packageFile = FileUtils.toFile(packageUrl);
+
+ File outputDirectory = new File(System.getProperty("java.io.tmpdir"), getClass().getName() + '_' + System.currentTimeMillis());
+ File unreferencedOutputDir = new File(outputDirectory, "mutable-content-packages");
+ try {
+
+ converter = new ContentPackage2FeatureModelConverter(false, ContentPackage2FeatureModelConverter.SlingInitialContentPolicy.EXTRACT_AND_REMOVE)
+ .setEntryHandlersManager(handlersManager)
+ .setAclManager(new DefaultAclManager());
+
+ converter.setFeaturesManager(new DefaultFeaturesManager(true, 5, outputDirectory, null, null, new HashMap<>(), new DefaultAclManager()))
+ .setBundlesDeployer(new LocalMavenRepositoryArtifactsDeployer(outputDirectory))
+ .setEmitter(DefaultPackagesEventsEmitter.open(outputDirectory))
+ .setContentTypePackagePolicy(PackagePolicy.PUT_IN_DEDICATED_FOLDER)
+ .setUnreferencedArtifactsDeployer(new LocalMavenRepositoryArtifactsDeployer(unreferencedOutputDir))
+ .convert(packageFile);
+
+
+ File featureModel = new File(outputDirectory, "playground.ui.content.json");
+ Feature feature = FeatureJSONReader.read(new FileReader(featureModel), "");
+
+ List<PackageId> allPackageIds = new ArrayList<>();
+ List<Dependency> contentRefsDependencies = new ArrayList<>();
+
+ getContentPackagesFromFeatureModel(outputDirectory, feature,allPackageIds);
+ getContentPackagesFromRefs(outputDirectory,allPackageIds,contentRefsDependencies);
+
+
+ for(Dependency dependency : contentRefsDependencies){
+ boolean foundDep = allPackageIds.stream().filter(Objects::nonNull).anyMatch(dependency::matches);
+ assertTrue("Dependency " + dependency.getName() + " is not present in the feature model or content refs", foundDep);
+ }
+
+ } finally {
+ deleteDirTree(outputDirectory);
+ }
+ }
+
+ private void getContentPackagesFromFeatureModel(File outputDirectory, Feature feature, List<PackageId> packageIds) throws IOException {
+
+ Artifacts artifacts = feature.getExtensions().getByName("content-packages").getArtifacts();
+ for(Artifact artifact : artifacts){
+ ArtifactId id = artifact.getId();
+
+ String target = getPathTarget(id);
+ File file = new File(outputDirectory, target);
+ ZipVaultPackage vaultPackage = new ZipVaultPackage(file, true);
+ //read the artifact from disk and compute the artifactId from here
+ packageIds.add( vaultPackage.getProperties().getId() );
+ };
+
+ }
+
+ private void getContentPackagesFromRefs(File outputDirectory, List<PackageId> packageIds, List<Dependency> dependencies) throws IOException {
+ File contentPackagesCSV = new File(outputDirectory, "content-packages.csv");
+
+ List<String> contentPackages = IOUtils.readLines(new FileInputStream(contentPackagesCSV), StandardCharsets.UTF_8);
+
+ for(String contentPackageLine: contentPackages) {
+
+ if (contentPackageLine.startsWith("#")) {
+ continue;
+ }
+
+ String[] contentPackageLineSplit = contentPackageLine.split(",");
+
+ String artifactIdUnparsed = contentPackageLineSplit[1];
+ ArtifactId artifact = ArtifactId.fromMvnId(artifactIdUnparsed);
+
+ String target = "mutable-content-packages/" + getPathTarget(artifact);
+
+ File contentPackageFile = new File(outputDirectory, target);
+ ZipVaultPackage vaultPackage = new ZipVaultPackage(contentPackageFile, true);
+ packageIds.add(vaultPackage.getProperties().getId());
+
+
+ dependencies.addAll(Arrays.asList(vaultPackage.getProperties().getDependencies()));
+
+ }
+ }
+
+ private String getPathTarget(ArtifactId artifact) {
+ String groupIdPath = StringUtils.replace(artifact.getGroupId(), ".", "/");
+
+ return String.format(FORMAT, groupIdPath, artifact.getArtifactId(), artifact.getVersion());
+ }
+
+
+ @Test
public void convertContentPackage() throws Exception {
URL packageUrl = getClass().getResource("test-content-package.zip");
File packageFile = FileUtils.toFile(packageUrl);
@@ -910,4 +1007,6 @@ public class ContentPackage2FeatureModelConverterTest extends AbstractConverterT
return loadedResources;
}
+
+
}
diff --git a/src/test/resources/org/apache/sling/feature/cpconverter/build_playground.ui.content-1.0-SNAPSHOT.zip b/src/test/resources/org/apache/sling/feature/cpconverter/build_playground.ui.content-1.0-SNAPSHOT.zip
new file mode 100644
index 0000000..9c07c08
Binary files /dev/null and b/src/test/resources/org/apache/sling/feature/cpconverter/build_playground.ui.content-1.0-SNAPSHOT.zip differ