You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by tr...@apache.org on 2016/11/28 03:13:00 UTC
svn commit: r1771674 - in /jackrabbit/commons/filevault/trunk/vault-core/src:
main/java/org/apache/jackrabbit/vault/packaging/
main/java/org/apache/jackrabbit/vault/packaging/impl/
test/java/org/apache/jackrabbit/vault/packaging/ test/java/org/apache/j...
Author: tripod
Date: Mon Nov 28 03:12:59 2016
New Revision: 1771674
URL: http://svn.apache.org/viewvc?rev=1771674&view=rev
Log:
JCRVLT-140 Add support for extract subpackages without installing content
Added:
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subsubtest.zip
Modified:
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/DependencyUtil.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/JcrPackage.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/JcrPackageDefinition.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/VersionRange.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageDefinitionImpl.java
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java
jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/DependencyTest.java
jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/VersionTest.java
jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestSubPackages.java
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/DependencyUtil.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/DependencyUtil.java?rev=1771674&r1=1771673&r2=1771674&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/DependencyUtil.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/DependencyUtil.java Mon Nov 28 03:12:59 2016
@@ -23,6 +23,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import javax.annotation.Nonnull;
import javax.jcr.RepositoryException;
import org.slf4j.Logger;
@@ -121,4 +122,35 @@ public class DependencyUtil {
}
}
+ /**
+ * Checks if any of the dependencies matches the given id
+ * @param deps the list of dependencies
+ * @param id the id
+ * @return {@code true} if matches
+ */
+ public static boolean matches(@Nonnull Dependency[] deps, @Nonnull PackageId id) {
+ for (Dependency dep: deps) {
+ if (dep.matches(id)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Adds and exact dependency to the give package if it is not alreadyl contained in the given list.
+ * @param deps the original dependencies
+ * @param id the id to add
+ * @return the new array of dependencies, or {@code deps} if nothing changed.
+ */
+ public static Dependency[] addExact(@Nonnull Dependency[] deps, @Nonnull PackageId id) {
+ if (matches(deps, id)) {
+ return deps;
+ }
+ Dependency[] newDeps = new Dependency[deps.length + 1];
+ System.arraycopy(deps, 0, newDeps, 0, deps.length);
+ newDeps[deps.length] = new Dependency(id);
+ return newDeps;
+ }
+
}
\ No newline at end of file
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/JcrPackage.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/JcrPackage.java?rev=1771674&r1=1771673&r2=1771674&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/JcrPackage.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/JcrPackage.java Mon Nov 28 03:12:59 2016
@@ -119,6 +119,24 @@ public interface JcrPackage extends Comp
throws RepositoryException, PackageException, IOException;
/**
+ * Processes this package and extracts all sub packages. No content of this package or its sub packages is extracted
+ * and not snapshots are taken. If {@link ImportOptions#isNonRecursive()} is {@code true}, then only the direct
+ * sub packages are extracted. The extraction ensures that the sub packages have a dependency to their parent package.
+ *
+ * @param opts import options
+ * @return the list of subpackages that were extracted
+ * @throws RepositoryException if a repository error during installation occurs.
+ * @throws PackageException if an error during packaging occurs
+ * @throws IllegalStateException if the package is not valid.
+ * @throws IOException if an I/O error occurs
+ *
+ * @since 3.1.32
+ */
+ @Nonnull
+ PackageId[] extractSubpackages(@Nonnull ImportOptions opts)
+ throws RepositoryException, PackageException, IOException;
+
+ /**
* Returns the dependencies that are not resolved. If the {@link DependencyHandling} is set to strict, the package
* will not installed if any unresolved dependencies are listed.
* @return the array of unresolved dependencies.
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/JcrPackageDefinition.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/JcrPackageDefinition.java?rev=1771674&r1=1771673&r2=1771674&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/JcrPackageDefinition.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/JcrPackageDefinition.java Mon Nov 28 03:12:59 2016
@@ -242,6 +242,14 @@ public interface JcrPackageDefinition {
Dependency[] getDependencies();
/**
+ * Sets the dependencies to this definition and stores it in a node representation.
+ * @param dependencies the package dependencies
+ * @param autoSave if {@code true} the modifications are saved automatically.
+ * @since 3.1.32
+ */
+ void setDependencies(@Nonnull Dependency[] dependencies, boolean autoSave);
+
+ /**
* Generic method to retrieve a string property of this definition.
* @param name the name of the property.
* @return the property value or {@code null} if it does not exist.
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/VersionRange.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/VersionRange.java?rev=1771674&r1=1771673&r2=1771674&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/VersionRange.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/VersionRange.java Mon Nov 28 03:12:59 2016
@@ -62,6 +62,12 @@ public class VersionRange {
* @throws IllegalArgumentException if bounds are not valid
*/
public VersionRange(Version low, boolean lowIncl, Version high, boolean highIncl) {
+ if (low == Version.EMPTY) {
+ low = null;
+ }
+ if (high == Version.EMPTY) {
+ high = null;
+ }
// check if range is valid
if (low != null && high != null) {
int comp = low.compareTo(high);
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageDefinitionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageDefinitionImpl.java?rev=1771674&r1=1771673&r2=1771674&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageDefinitionImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageDefinitionImpl.java Mon Nov 28 03:12:59 2016
@@ -31,6 +31,7 @@ import javax.jcr.Property;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
+import javax.jcr.ValueFactory;
import org.apache.jackrabbit.util.ISO8601;
import org.apache.jackrabbit.vault.fs.Mounter;
@@ -328,6 +329,25 @@ public class JcrPackageDefinitionImpl im
}
/**
+ * {@inheritDoc}
+ */
+ public void setDependencies(@Nonnull Dependency[] dependencies, boolean autoSave) {
+ try {
+ final Value[] values = new Value[dependencies.length];
+ final ValueFactory fac = defNode.getSession().getValueFactory();
+ for (int i=0; i<dependencies.length; i++) {
+ values[i] = fac.createValue(dependencies[i].toString());
+ }
+ defNode.setProperty(PN_DEPENDENCIES, values);
+ if (autoSave) {
+ defNode.getSession().save();
+ }
+ } catch (RepositoryException e) {
+ log.error("Error during setDependencies()", e);
+ }
+ }
+
+ /**
* Load the given properties from the content
* @param props the properties to load
*/
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java?rev=1771674&r1=1771673&r2=1771674&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageImpl.java Mon Nov 28 03:12:59 2016
@@ -42,7 +42,9 @@ import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.vault.fs.api.ImportMode;
import org.apache.jackrabbit.vault.fs.api.ProgressTrackerListener;
+import org.apache.jackrabbit.vault.fs.api.VaultInputSource;
import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
+import org.apache.jackrabbit.vault.fs.io.Archive;
import org.apache.jackrabbit.vault.fs.io.ImportOptions;
import org.apache.jackrabbit.vault.fs.io.MemoryArchive;
import org.apache.jackrabbit.vault.fs.io.ZipArchive;
@@ -404,6 +406,13 @@ public class JcrPackageImpl implements J
JcrPackageDefinitionImpl def = (JcrPackageDefinitionImpl) p.getDefinition();
def.clearLastUnpacked(false);
+ // add dependency to the parent package if required
+ Dependency[] oldDeps = def.getDependencies();
+ Dependency[] newDeps = DependencyUtil.addExact(oldDeps, pack.getId());
+ if (oldDeps != newDeps) {
+ def.setDependencies(newDeps, false);
+ }
+
PackageId pId = def.getId();
String pName = pId.getName();
Version pVersion = pId.getVersion();
@@ -424,7 +433,8 @@ public class JcrPackageImpl implements J
// check that the listed package is actually from same name (so normally only version would differ)
// if that package is valid, installed, and the version is more recent than the one in our sub package
// then we can stop the loop here
- if (pName.equals(listedPackageId.getName()) && listedPackage.isValid() && listedPackage.isInstalled() && listedPackageId.getVersion().compareTo(pVersion) > 0) {
+ if (pName.equals(listedPackageId.getName()) && listedPackage.isValid() && listedPackage.isInstalled()
+ && listedPackageId.getVersion().compareTo(pVersion) > 0) {
newerPackageId = listedPackageId;
break;
}
@@ -488,6 +498,77 @@ public class JcrPackageImpl implements J
}
}
}
+
+ /**
+ * {@inheritDoc}
+ */
+ @Nonnull
+ @Override
+ public PackageId[] extractSubpackages(@Nonnull ImportOptions opts)
+ throws RepositoryException, PackageException, IOException {
+ Set<PackageId> processed = new HashSet<PackageId>();
+ extractSubpackages(opts, processed);
+ PackageId[] ret = processed.toArray(new PackageId[processed.size()]);
+ Arrays.sort(ret);
+ return ret;
+ }
+
+ private void extractSubpackages(@Nonnull ImportOptions opts, @Nonnull Set<PackageId> processed)
+ throws RepositoryException, PackageException, IOException {
+ VaultPackage pack = getPackage();
+
+ Archive a = pack.getArchive();
+ Archive.Entry packages = a.getEntry("/jcr_root/etc/packages");
+ if (packages == null) {
+ return;
+ }
+ List<Archive.Entry> entries = new LinkedList<Archive.Entry>();
+ findSubPackageEntries(entries, packages);
+
+ for (Archive.Entry e: entries) {
+ VaultInputSource in = a.getInputSource(e);
+ InputStream ins = null;
+ try {
+ ins = in.getByteStream();
+ JcrPackageImpl subPackage = (JcrPackageImpl) mgr.upload(ins, false, true);
+
+ // add dependency to this package
+ Dependency[] oldDeps = subPackage.getDefinition().getDependencies();
+ Dependency[] newDeps = DependencyUtil.addExact(oldDeps, pack.getId());
+ if (oldDeps != newDeps) {
+ subPackage.getDefinition().setDependencies(newDeps, true);
+ }
+
+ PackageId id = subPackage.getDefinition().getId();
+ processed.add(id);
+ log.info("Extracted sub-package: {}", id);
+
+ if (!opts.isNonRecursive()) {
+ subPackage.extractSubpackages(opts, processed);
+ }
+ } finally {
+ if (ins != null) {
+ ins.close();
+ }
+ }
+ }
+ }
+
+ private void findSubPackageEntries(@Nonnull List<Archive.Entry> entries, @Nonnull Archive.Entry folder) {
+ for (Archive.Entry e: folder.getChildren()) {
+ final String name = e.getName();
+ if (e.isDirectory()) {
+ if (!".snapshot".equals(name)) {
+ findSubPackageEntries(entries, e);
+ }
+ } else {
+ // only process files with .zip extension
+ if (name.endsWith(".zip")) {
+ entries.add(e);
+ }
+ }
+ }
+ }
/**
* {@inheritDoc}
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/DependencyTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/DependencyTest.java?rev=1771674&r1=1771673&r2=1771674&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/DependencyTest.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/DependencyTest.java Mon Nov 28 03:12:59 2016
@@ -86,6 +86,12 @@ public class DependencyTest extends Test
assertEquals("group:name", d.toString());
}
+ public void testToString5() {
+ PackageId id = new PackageId("group", "name", Version.EMPTY);
+ Dependency d = new Dependency(id);
+ assertEquals("group:name", d.toString());
+ }
+
public void testParse() {
Dependency[] d = Dependency.parse("name1,group2:name2,group3:name3:1.0,group4:name4:[1.0,2.0],:name5:[1.0,2.0]");
assertEquals(5,d.length);
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/VersionTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/VersionTest.java?rev=1771674&r1=1771673&r2=1771674&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/VersionTest.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/VersionTest.java Mon Nov 28 03:12:59 2016
@@ -48,6 +48,10 @@ public class VersionTest extends TestCas
compare("6.1.58", "6.1.58.FP3", -1);
compare("6.1.59", "6.1.58.FP3", 1);
compare("6.1.58-FP3", "6.1.58-FP2", 1);
+ compare("6.1.58-FP3", "6.1.58.FP3", -1); // expected -1
+ compare("6.1.58-FP3", "6.1.58.FP4", -1); // expected –1
+ compare("6.1.58.FP3", "6.1.58-FP4", 1); // expected 1
+ compare("6.1.58.FP3", "6.1.58.FP4", -1); // expected -1
}
public void testOsgiCompare() {
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestSubPackages.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestSubPackages.java?rev=1771674&r1=1771673&r2=1771674&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestSubPackages.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestSubPackages.java Mon Nov 28 03:12:59 2016
@@ -22,10 +22,13 @@ import java.io.IOException;
import javax.jcr.RepositoryException;
import org.apache.jackrabbit.vault.fs.io.ImportOptions;
+import org.apache.jackrabbit.vault.packaging.Dependency;
import org.apache.jackrabbit.vault.packaging.JcrPackage;
import org.apache.jackrabbit.vault.packaging.PackageException;
+import org.apache.jackrabbit.vault.packaging.PackageId;
import org.junit.Test;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -59,6 +62,17 @@ public class TestSubPackages extends Int
assertNodeMissing("/tmp/a");
assertNodeMissing("/tmp/b");
+
+ // check for sub packages dependency
+ String expected = new Dependency(pack.getDefinition().getId()).toString();
+
+ JcrPackage p1 = packMgr.open(admin.getNode("/etc/packages/my_packages/sub_a.zip"));
+ assertEquals("has 1 dependency", 1, p1.getDefinition().getDependencies().length);
+ assertEquals("has dependency to parent package", expected, p1.getDefinition().getDependencies()[0].toString());
+ JcrPackage p2 = packMgr.open(admin.getNode("/etc/packages/my_packages/sub_b.zip"));
+ assertEquals("has 1 dependency", 1, p2.getDefinition().getDependencies().length);
+ assertEquals("has dependency to parent package", expected, p2.getDefinition().getDependencies()[0].toString());
+
}
/**
@@ -314,4 +328,116 @@ public class TestSubPackages extends Int
}
+ /**
+ * Test if subpackage extraction works
+ */
+ @Test
+ public void testPackageExtract() throws IOException, RepositoryException, PackageException {
+ JcrPackage pack = packMgr.upload(getStream("testpackages/subtest.zip"), false);
+ assertNotNull(pack);
+
+ // install
+ ImportOptions opts = getDefaultOptions();
+ PackageId[] ids = pack.extractSubpackages(opts);
+
+ // check for sub packages
+ assertNodeExists("/etc/packages/my_packages/sub_a.zip");
+ assertNodeExists("/etc/packages/my_packages/sub_b.zip");
+
+ assertEquals("Package Id", ids[0].toString(), "my_packages:sub_a");
+ assertEquals("Package Id", ids[1].toString(), "my_packages:sub_b");
+ }
+
+ /**
+ * Test if extracted sub-packages have their parent package as dependency, even if not specified in their properties.
+ */
+ @Test
+ public void testSubPackageDependency() throws IOException, RepositoryException, PackageException {
+ JcrPackage pack = packMgr.upload(getStream("testpackages/subtest.zip"), false);
+ assertNotNull(pack);
+ PackageId pId = pack.getDefinition().getId();
+
+ // install
+ ImportOptions opts = getDefaultOptions();
+ pack.extractSubpackages(opts);
+
+ // check for sub packages dependency
+ String expected = new Dependency(pId).toString();
+
+ JcrPackage p1 = packMgr.open(admin.getNode("/etc/packages/my_packages/sub_a.zip"));
+ assertEquals("has 1 dependency", 1, p1.getDefinition().getDependencies().length);
+ assertEquals("has dependency to parent package", expected, p1.getDefinition().getDependencies()[0].toString());
+ JcrPackage p2 = packMgr.open(admin.getNode("/etc/packages/my_packages/sub_b.zip"));
+ assertEquals("has 1 dependency", 1, p2.getDefinition().getDependencies().length);
+ assertEquals("has dependency to parent package", expected, p2.getDefinition().getDependencies()[0].toString());
+ }
+
+ /**
+ * Test if subpackage extraction works recursively
+ */
+ @Test
+ public void testRecursivePackageExtract() throws IOException, RepositoryException, PackageException {
+ JcrPackage pack = packMgr.upload(getStream("testpackages/subsubtest.zip"), false);
+ assertNotNull(pack);
+
+ // install
+ ImportOptions opts = getDefaultOptions();
+ opts.setNonRecursive(false);
+ PackageId[] ids = pack.extractSubpackages(opts);
+
+ // check for sub packages
+ assertNodeExists("/etc/packages/my_packages/subtest.zip");
+ assertNodeExists("/etc/packages/my_packages/sub_a.zip");
+ assertNodeExists("/etc/packages/my_packages/sub_b.zip");
+
+ assertEquals("Package Id", ids[0].toString(), "my_packages:sub_a");
+ assertEquals("Package Id", ids[1].toString(), "my_packages:sub_b");
+ assertEquals("Package Id", ids[2].toString(), "my_packages:subtest");
+ }
+
+ /**
+ * Test if subpackage extraction works non-recursively
+ */
+ @Test
+ public void testNonRecursivePackageExtract() throws IOException, RepositoryException, PackageException {
+ JcrPackage pack = packMgr.upload(getStream("testpackages/subsubtest.zip"), false);
+ assertNotNull(pack);
+
+ // install
+ ImportOptions opts = getDefaultOptions();
+ opts.setNonRecursive(true);
+ PackageId[] ids = pack.extractSubpackages(opts);
+
+ // check for sub packages
+ assertNodeExists("/etc/packages/my_packages/subtest.zip");
+ assertNodeMissing("/etc/packages/my_packages/sub_a.zip");
+ assertNodeMissing("/etc/packages/my_packages/sub_b.zip");
+
+ assertEquals("Package Id", ids[0].toString(), "my_packages:subtest");
+ }
+
+ @Test
+ public void testSubPackageDependency2() throws IOException, RepositoryException, PackageException {
+ JcrPackage pack = packMgr.upload(getStream("testpackages/subsubtest.zip"), false);
+ assertNotNull(pack);
+
+ // install
+ ImportOptions opts = getDefaultOptions();
+ pack.extractSubpackages(opts);
+
+ JcrPackage p0 = packMgr.open(admin.getNode("/etc/packages/my_packages/subtest.zip"));
+ assertEquals("has 1 dependency", 1, p0.getDefinition().getDependencies().length);
+ assertEquals("has dependency to parent package",
+ new Dependency(pack.getDefinition().getId()), p0.getDefinition().getDependencies()[0]);
+
+ // check for sub packages dependency
+ String expected = new Dependency(p0.getDefinition().getId()).toString();
+ JcrPackage p1 = packMgr.open(admin.getNode("/etc/packages/my_packages/sub_a.zip"));
+ assertEquals("has 1 dependency", 1, p1.getDefinition().getDependencies().length);
+ assertEquals("has dependency to parent package", expected, p1.getDefinition().getDependencies()[0].toString());
+ JcrPackage p2 = packMgr.open(admin.getNode("/etc/packages/my_packages/sub_b.zip"));
+ assertEquals("has 1 dependency", 1, p2.getDefinition().getDependencies().length);
+ assertEquals("has dependency to parent package", expected, p2.getDefinition().getDependencies()[0].toString());
+ }
+
}
\ No newline at end of file
Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subsubtest.zip
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subsubtest.zip?rev=1771674&view=auto
==============================================================================
Binary files jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subsubtest.zip (added) and jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/subsubtest.zip Mon Nov 28 03:12:59 2016 differ