From 48c1b85888899d1a437cbb91c9eddb2c6bfc2cff Mon Sep 17 00:00:00 2001 From: Christian Schneider Date: Sat, 11 Jan 2025 10:13:43 +0100 Subject: [PATCH 1/3] Test for group issue --- .../integration/UserContentPackageIT.java | 60 ++++++++++++++++++- 1 file changed, 58 insertions(+), 2 deletions(-) diff --git a/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/UserContentPackageIT.java b/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/UserContentPackageIT.java index d98097f59..99ad6f8bb 100644 --- a/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/UserContentPackageIT.java +++ b/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/UserContentPackageIT.java @@ -17,6 +17,8 @@ package org.apache.jackrabbit.vault.packaging.integration; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; @@ -25,12 +27,16 @@ import java.io.File; import java.io.IOException; +import java.io.PrintWriter; import java.util.Properties; +import java.util.zip.Deflater; +import javax.jcr.AccessDeniedException; import javax.jcr.Node; import javax.jcr.Property; import javax.jcr.RepositoryException; import javax.jcr.SimpleCredentials; +import javax.jcr.UnsupportedRepositoryOperationException; import javax.jcr.nodetype.NodeType; import org.apache.jackrabbit.api.JackrabbitSession; @@ -39,15 +45,19 @@ import org.apache.jackrabbit.api.security.user.User; import org.apache.jackrabbit.api.security.user.UserManager; import org.apache.jackrabbit.util.Text; +import org.apache.jackrabbit.vault.fs.api.DumpContext; import org.apache.jackrabbit.vault.fs.api.ImportMode; import org.apache.jackrabbit.vault.fs.api.PathFilterSet; +import org.apache.jackrabbit.vault.fs.config.ConfigurationException; import org.apache.jackrabbit.vault.fs.config.DefaultMetaInf; import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter; +import org.apache.jackrabbit.vault.fs.filter.DefaultPathFilter; import org.apache.jackrabbit.vault.fs.io.AccessControlHandling; import org.apache.jackrabbit.vault.fs.io.ImportOptions; import org.apache.jackrabbit.vault.packaging.ExportOptions; import org.apache.jackrabbit.vault.packaging.JcrPackage; import org.apache.jackrabbit.vault.packaging.PackageException; +import org.apache.jackrabbit.vault.packaging.PackageProperties; import org.apache.jackrabbit.vault.packaging.VaultPackage; import org.junit.Assume; import org.junit.Test; @@ -75,6 +85,7 @@ public void installUserA_PkgPath() throws RepositoryException, IOException, Pack installUserA(null, true, true); } + @SuppressWarnings("deprecation") @Test public void installUserA_Merge() throws RepositoryException, IOException, PackageException { installUserA(ImportMode.MERGE, false, false); @@ -380,6 +391,35 @@ public void install_user_with_rep_cache_merge() throws RepositoryException, IOEx Assume.assumeTrue(isOak()); install_user_with_rep_cache(ImportMode.MERGE); } + + + @Test + public void createPackageGroup() throws AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException, IOException, PackageException { + UserManager mgr = ((JackrabbitSession) admin).getUserManager(); + User u = mgr.createUser(ID_TEST_USER_A, ID_TEST_PASSWORD); + Group group = mgr.createGroup(ID_TEST_GROUP_A); + group.addMember(u); + String path = group.getPath(); + admin.save(); + + File tmpFile = createPackage("test", "test", path); + try { + try (JcrPackage pack = packMgr.upload(tmpFile, true, true, null);) { + assertNotNull(pack); + ImportOptions opts = getDefaultOptions(); + pack.install(opts); + + u = (User) mgr.getAuthorizable(ID_TEST_USER_A); + assertNotNull(u); + Group g = (Group) mgr.getAuthorizable(ID_TEST_GROUP_A); + assertNotNull(g); + Authorizable u2 = g.getMembers().next(); + assertThat(u2.getID(), equalTo(ID_TEST_USER_A)); + } + } finally { + tmpFile.delete(); + } + } private void install_user_with_rep_cache(ImportMode mode) throws RepositoryException, IOException, PackageException { UserManager mgr = ((JackrabbitSession) admin).getUserManager(); @@ -492,21 +532,37 @@ private User installUserA(ImportMode mode, boolean usePkgPath, boolean expectPkg private File createPackage(String group, String name, String... paths) throws RepositoryException, IOException, PackageException { ExportOptions opts = new ExportOptions(); + opts.setCompressionLevel(Deflater.BEST_SPEED); DefaultMetaInf inf = new DefaultMetaInf(); + DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter(); for (String path : paths) { - filter.add(new PathFilterSet(path)); + PathFilterSet pathFilterSet = new PathFilterSet(path); + try { + pathFilterSet.addInclude(new DefaultPathFilter("/\\Q" + path.substring(1) + "\\E")); + pathFilterSet.addInclude(new DefaultPathFilter(".*/rep:policy")); + pathFilterSet.addExclude(new DefaultPathFilter(".*rep:policy")); + + } catch (ConfigurationException e) { + throw new RuntimeException(e); + } + + filter.add(pathFilterSet); } - + PrintWriter pw = new PrintWriter(System.out); + DumpContext context = new DumpContext(pw); + filter.dump(context, true); inf.setFilter(filter); Properties props = new Properties(); props.setProperty(VaultPackage.NAME_GROUP, group); props.setProperty(VaultPackage.NAME_NAME, name); + props.setProperty(PackageProperties.NAME_USE_BINARY_REFERENCES, "true"); inf.setProperties(props); opts.setMetaInf(inf); File tmpFile = File.createTempFile("vaulttest", ".zip"); + System.out.println(tmpFile); VaultPackage pkg = packMgr.assemble(admin, opts, tmpFile); pkg.close(); From 79e614e09fe0c3475502e9189e64758412a3dc6c Mon Sep 17 00:00:00 2001 From: Christian Schneider Date: Fri, 17 Jan 2025 08:24:50 +0100 Subject: [PATCH 2/3] Test for group issue --- .../integration/UserContentPackageIT.java | 89 +++++++++++-------- 1 file changed, 54 insertions(+), 35 deletions(-) diff --git a/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/UserContentPackageIT.java b/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/UserContentPackageIT.java index 99ad6f8bb..cc2a4a3b3 100644 --- a/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/UserContentPackageIT.java +++ b/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/UserContentPackageIT.java @@ -45,12 +45,15 @@ import org.apache.jackrabbit.api.security.user.User; import org.apache.jackrabbit.api.security.user.UserManager; import org.apache.jackrabbit.util.Text; +import org.apache.jackrabbit.vault.fs.api.Aggregator; import org.apache.jackrabbit.vault.fs.api.DumpContext; import org.apache.jackrabbit.vault.fs.api.ImportMode; import org.apache.jackrabbit.vault.fs.api.PathFilterSet; +import org.apache.jackrabbit.vault.fs.api.VaultFsConfig; import org.apache.jackrabbit.vault.fs.config.ConfigurationException; import org.apache.jackrabbit.vault.fs.config.DefaultMetaInf; import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter; +import org.apache.jackrabbit.vault.fs.config.Registry; import org.apache.jackrabbit.vault.fs.filter.DefaultPathFilter; import org.apache.jackrabbit.vault.fs.io.AccessControlHandling; import org.apache.jackrabbit.vault.fs.io.ImportOptions; @@ -393,7 +396,7 @@ public void install_user_with_rep_cache_merge() throws RepositoryException, IOEx } - @Test + @Test(expected = RepositoryException.class) public void createPackageGroup() throws AccessDeniedException, UnsupportedRepositoryOperationException, RepositoryException, IOException, PackageException { UserManager mgr = ((JackrabbitSession) admin).getUserManager(); User u = mgr.createUser(ID_TEST_USER_A, ID_TEST_PASSWORD); @@ -401,8 +404,8 @@ public void createPackageGroup() throws AccessDeniedException, UnsupportedReposi group.addMember(u); String path = group.getPath(); admin.save(); - - File tmpFile = createPackage("test", "test", path); + DefaultWorkspaceFilter filter = createDistributionFilter(path); + File tmpFile = createPackage("test", "test", filter); try { try (JcrPackage pack = packMgr.upload(tmpFile, true, true, null);) { assertNotNull(pack); @@ -530,44 +533,60 @@ private User installUserA(ImportMode mode, boolean usePkgPath, boolean expectPkg return userA; } + /** + * Create filter as used in sling content distribution + * @param paths replicated + * @return filter + */ + private DefaultWorkspaceFilter createDistributionFilter(String... paths) { + DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter(); + for (String path : paths) { + filter.add(distributionFilterSet(path)); + } + return filter; + } + + private PathFilterSet distributionFilterSet(String path) { + PathFilterSet pathFilterSet = new PathFilterSet(path); + try { + pathFilterSet.addInclude(new DefaultPathFilter("/\\Q" + path.substring(1) + "\\E")); + pathFilterSet.addExclude(new DefaultPathFilter(".*rep:policy")); + pathFilterSet.addInclude(new DefaultPathFilter(".*/rep:policy")); + } catch (ConfigurationException e) { + throw new RuntimeException(e); + } + return pathFilterSet; + } + private File createPackage(String group, String name, String... paths) throws RepositoryException, IOException, PackageException { - ExportOptions opts = new ExportOptions(); - opts.setCompressionLevel(Deflater.BEST_SPEED); - DefaultMetaInf inf = new DefaultMetaInf(); - DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter(); for (String path : paths) { PathFilterSet pathFilterSet = new PathFilterSet(path); - try { - pathFilterSet.addInclude(new DefaultPathFilter("/\\Q" + path.substring(1) + "\\E")); - pathFilterSet.addInclude(new DefaultPathFilter(".*/rep:policy")); - pathFilterSet.addExclude(new DefaultPathFilter(".*rep:policy")); - - } catch (ConfigurationException e) { - throw new RuntimeException(e); - } - filter.add(pathFilterSet); } - PrintWriter pw = new PrintWriter(System.out); - DumpContext context = new DumpContext(pw); - filter.dump(context, true); - inf.setFilter(filter); - Properties props = new Properties(); - props.setProperty(VaultPackage.NAME_GROUP, group); - props.setProperty(VaultPackage.NAME_NAME, name); - props.setProperty(PackageProperties.NAME_USE_BINARY_REFERENCES, "true"); - inf.setProperties(props); - - opts.setMetaInf(inf); - - File tmpFile = File.createTempFile("vaulttest", ".zip"); - System.out.println(tmpFile); - VaultPackage pkg = packMgr.assemble(admin, opts, tmpFile); - - pkg.close(); - - return tmpFile; + return createPackage(group, name, filter); } + private File createPackage(String group, String name, DefaultWorkspaceFilter filter) throws RepositoryException, IOException, PackageException { + ExportOptions opts = new ExportOptions(); + opts.setCompressionLevel(Deflater.BEST_SPEED); + DefaultMetaInf inf = new DefaultMetaInf(); + inf.setFilter(filter); + Properties props = new Properties(); + props.setProperty(VaultPackage.NAME_GROUP, group); + props.setProperty(VaultPackage.NAME_NAME, name); + props.setProperty(PackageProperties.NAME_USE_BINARY_REFERENCES, "true"); + inf.setProperties(props); + + opts.setMetaInf(inf); + + File tmpFile = File.createTempFile("vaulttest", ".zip"); + System.out.println(tmpFile); + VaultPackage pkg = packMgr.assemble(admin, opts, tmpFile); + + pkg.close(); + + return tmpFile; + } + } From 76f9ebd1dfb2b497ef9293d97a239e26e3bd52d8 Mon Sep 17 00:00:00 2001 From: Christian Schneider Date: Fri, 17 Jan 2025 08:52:03 +0100 Subject: [PATCH 3/3] Remove unnecessary filter --- .../vault/packaging/integration/UserContentPackageIT.java | 1 - 1 file changed, 1 deletion(-) diff --git a/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/UserContentPackageIT.java b/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/UserContentPackageIT.java index cc2a4a3b3..292c0fff0 100644 --- a/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/UserContentPackageIT.java +++ b/vault-core-it/vault-core-integration-tests/src/main/java/org/apache/jackrabbit/vault/packaging/integration/UserContentPackageIT.java @@ -550,7 +550,6 @@ private PathFilterSet distributionFilterSet(String path) { PathFilterSet pathFilterSet = new PathFilterSet(path); try { pathFilterSet.addInclude(new DefaultPathFilter("/\\Q" + path.substring(1) + "\\E")); - pathFilterSet.addExclude(new DefaultPathFilter(".*rep:policy")); pathFilterSet.addInclude(new DefaultPathFilter(".*/rep:policy")); } catch (ConfigurationException e) { throw new RuntimeException(e);