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 2014/11/11 19:48:35 UTC

svn commit: r1638251 - in /jackrabbit/commons/filevault/trunk/vault-core/src/test: java/org/apache/jackrabbit/vault/packaging/integration/ resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/

Author: tripod
Date: Tue Nov 11 18:48:34 2014
New Revision: 1638251

URL: http://svn.apache.org/r1638251
Log:
Adding more test cases for mapped user import

Added:
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_policy.zip
      - copied, changed from r1637431, jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a.zip
Modified:
    jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/IntegrationTestBase.java
    jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestACLAndMerge.java
    jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestUserContentPackage.java
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a.zip
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_profile.zip
    jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_profile_picture.zip

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/IntegrationTestBase.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/IntegrationTestBase.java?rev=1638251&r1=1638250&r2=1638251&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/IntegrationTestBase.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/IntegrationTestBase.java Tue Nov 11 18:48:34 2014
@@ -21,7 +21,12 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
@@ -29,13 +34,21 @@ import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
+import javax.jcr.Value;
+import javax.jcr.security.AccessControlEntry;
+import javax.jcr.security.AccessControlPolicy;
+import javax.jcr.security.AccessControlPolicyIterator;
+import javax.jcr.security.Privilege;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
 import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
 import org.apache.jackrabbit.core.RepositoryImpl;
 import org.apache.jackrabbit.core.config.RepositoryConfig;
 import org.apache.jackrabbit.core.security.principal.EveryonePrincipal;
+import org.apache.jackrabbit.core.security.principal.PrincipalImpl;
 import org.apache.jackrabbit.oak.jcr.Jcr;
 import org.apache.jackrabbit.oak.security.SecurityProviderImpl;
 import org.apache.jackrabbit.oak.security.user.RandomAuthorizableNodeName;
@@ -61,7 +74,9 @@ import org.slf4j.LoggerFactory;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 /**
  * <code>IntegrationTestBase</code>...
@@ -227,4 +242,132 @@ public class IntegrationTestBase  {
         }
         return total;
     }
+
+    public void assertPermissionMissing(String path, boolean allow, String[] privs, String name, String globRest)
+            throws RepositoryException {
+        Map<String, String[]> restrictions = new HashMap<String, String[]>();
+        if (globRest != null) {
+            restrictions.put("rep:glob", new String[]{globRest});
+        }
+        if (hasPermission(path, allow, privs, name, restrictions) >= 0) {
+            fail("Expected permission should not exist on path " + path);
+        }
+    }
+
+    public void assertPermission(String path, boolean allow, String[] privs, String name, String globRest)
+            throws RepositoryException {
+        Map<String, String[]> restrictions = new HashMap<String, String[]>();
+        if (globRest != null) {
+            restrictions.put("rep:glob", new String[]{globRest});
+        }
+        if (hasPermission(path, allow, privs, name, restrictions) < 0) {
+            fail("Expected permission missing on path " + path);
+        }
+    }
+
+    public int hasPermission(String path, boolean allow, String[] privs, String name, Map<String, String[]> restrictions)
+            throws RepositoryException {
+        AccessControlPolicy[] ap = admin.getAccessControlManager().getPolicies(path);
+        int idx = 0;
+        for (AccessControlPolicy p: ap) {
+            if (p instanceof JackrabbitAccessControlList) {
+                JackrabbitAccessControlList acl = (JackrabbitAccessControlList) p;
+                for (AccessControlEntry ac: acl.getAccessControlEntries()) {
+                    if (ac instanceof JackrabbitAccessControlEntry) {
+                        idx++;
+                        JackrabbitAccessControlEntry ace = (JackrabbitAccessControlEntry) ac;
+                        if (ace.isAllow() != allow) {
+                            continue;
+                        }
+                        if (!ace.getPrincipal().getName().equals(name)) {
+                            continue;
+                        }
+                        Set<String> expectedPrivs = new HashSet<String>(Arrays.asList(privs));
+                        for (Privilege priv: ace.getPrivileges()) {
+                            if (!expectedPrivs.remove(priv.getName())) {
+                                expectedPrivs.add("dummy");
+                                break;
+                            }
+                        }
+                        if (!expectedPrivs.isEmpty()) {
+                            continue;
+                        }
+                        Map<String, String[]> rests = new HashMap<String, String[]>(restrictions);
+                        boolean restrictionExpected = true;
+                        for (String restName: ace.getRestrictionNames()) {
+                            String[] expected = rests.remove(restName);
+                            if (expected == null) {
+                                continue;
+                            }
+                            Value[] values;
+                            if ("rep:glob".equals(restName)) {
+                                values = new Value[]{ace.getRestriction(restName)};
+                            } else {
+                                values = ace.getRestrictions(restName);
+                            }
+                            String[] actual = new String[values.length];
+                            for (int i=0; i<actual.length; i++) {
+                                actual[i] = values[i].getString();
+                            }
+                            Arrays.sort(expected);
+                            Arrays.sort(actual);
+                            if (!Arrays.equals(expected, actual)) {
+                                restrictionExpected = false;
+                                break;
+                            }
+                        }
+                        if (!restrictionExpected || !rests.isEmpty()) {
+                            continue;
+                        }
+                        return idx-1;
+                    }
+                }
+            }
+        }
+        return -1;
+    }
+
+    public void removeRepoACL() throws RepositoryException {
+        AccessControlPolicy[] ap = admin.getAccessControlManager().getPolicies(null);
+        for (AccessControlPolicy p: ap) {
+            if (p instanceof JackrabbitAccessControlList) {
+                JackrabbitAccessControlList acl = (JackrabbitAccessControlList) p;
+                for (AccessControlEntry ac: acl.getAccessControlEntries()) {
+                    if (ac instanceof JackrabbitAccessControlEntry) {
+                        acl.removeAccessControlEntry(ac);
+                    }
+                }
+            }
+        }
+        admin.save();
+    }
+
+    public void addACL(String path, boolean allow, String[] privs, String principal) throws RepositoryException {
+        JackrabbitAccessControlList acl = null;
+        for (AccessControlPolicy p: admin.getAccessControlManager().getPolicies(path)) {
+            if (p instanceof JackrabbitAccessControlList) {
+                acl = (JackrabbitAccessControlList) p;
+                break;
+            }
+        }
+        if (acl == null) {
+            AccessControlPolicyIterator iter =  admin.getAccessControlManager().getApplicablePolicies(path);
+            while (iter.hasNext()) {
+                AccessControlPolicy p = iter.nextAccessControlPolicy();
+                if (p instanceof JackrabbitAccessControlList) {
+                    acl = (JackrabbitAccessControlList) p;
+                    break;
+                }
+            }
+        }
+        assertNotNull(acl);
+
+        Privilege[] ps = new Privilege[privs.length];
+        for (int i=0; i<privs.length; i++) {
+            ps[i] = admin.getAccessControlManager().privilegeFromName(privs[i]);
+        }
+        acl.addEntry(new PrincipalImpl(principal), ps, allow);
+        admin.getAccessControlManager().setPolicy(path, acl);
+        admin.save();
+    }
 }
\ No newline at end of file

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestACLAndMerge.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestACLAndMerge.java?rev=1638251&r1=1638250&r2=1638251&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestACLAndMerge.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestACLAndMerge.java Tue Nov 11 18:48:34 2014
@@ -428,132 +428,4 @@ public class TestACLAndMerge extends Int
         // test if nodes and ACLs of first package exist
         assertPermission("/", true, new String[]{"jcr:all"}, "everyone", null);
     }
-
-    protected void assertPermissionMissing(String path, boolean allow, String[] privs, String name, String globRest)
-            throws RepositoryException {
-        Map<String, String[]> restrictions = new HashMap<String, String[]>();
-        if (globRest != null) {
-            restrictions.put("rep:glob", new String[]{globRest});
-        }
-        if (hasPermission(path, allow, privs, name, restrictions) >= 0) {
-            fail("Expected permission should not exist on path " + path);
-        }
-    }
-
-    protected void assertPermission(String path, boolean allow, String[] privs, String name, String globRest)
-            throws RepositoryException {
-        Map<String, String[]> restrictions = new HashMap<String, String[]>();
-        if (globRest != null) {
-            restrictions.put("rep:glob", new String[]{globRest});
-        }
-        if (hasPermission(path, allow, privs, name, restrictions) < 0) {
-            fail("Expected permission missing on path " + path);
-        }
-    }
-
-    protected int hasPermission(String path, boolean allow, String[] privs, String name, Map<String, String[]> restrictions)
-            throws RepositoryException {
-        AccessControlPolicy[] ap = admin.getAccessControlManager().getPolicies(path);
-        int idx = 0;
-        for (AccessControlPolicy p: ap) {
-            if (p instanceof JackrabbitAccessControlList) {
-                JackrabbitAccessControlList acl = (JackrabbitAccessControlList) p;
-                for (AccessControlEntry ac: acl.getAccessControlEntries()) {
-                    if (ac instanceof JackrabbitAccessControlEntry) {
-                        idx++;
-                        JackrabbitAccessControlEntry ace = (JackrabbitAccessControlEntry) ac;
-                        if (ace.isAllow() != allow) {
-                            continue;
-                        }
-                        if (!ace.getPrincipal().getName().equals(name)) {
-                            continue;
-                        }
-                        Set<String> expectedPrivs = new HashSet<String>(Arrays.asList(privs));
-                        for (Privilege priv: ace.getPrivileges()) {
-                            if (!expectedPrivs.remove(priv.getName())) {
-                                expectedPrivs.add("dummy");
-                                break;
-                            }
-                        }
-                        if (!expectedPrivs.isEmpty()) {
-                            continue;
-                        }
-                        Map<String, String[]> rests = new HashMap<String, String[]>(restrictions);
-                        boolean restrictionExpected = true;
-                        for (String restName: ace.getRestrictionNames()) {
-                            String[] expected = rests.remove(restName);
-                            if (expected == null) {
-                                continue;
-                            }
-                            Value[] values;
-                            if ("rep:glob".equals(restName)) {
-                                values = new Value[]{ace.getRestriction(restName)};
-                            } else {
-                                values = ace.getRestrictions(restName);
-                            }
-                            String[] actual = new String[values.length];
-                            for (int i=0; i<actual.length; i++) {
-                                actual[i] = values[i].getString();
-                            }
-                            Arrays.sort(expected);
-                            Arrays.sort(actual);
-                            if (!Arrays.equals(expected, actual)) {
-                                restrictionExpected = false;
-                                break;
-                            }
-                        }
-                        if (!restrictionExpected || !rests.isEmpty()) {
-                            continue;
-                        }
-                        return idx-1;
-                    }
-                }
-            }
-        }
-        return -1;
-    }
-
-    protected void removeRepoACL() throws RepositoryException {
-        AccessControlPolicy[] ap = admin.getAccessControlManager().getPolicies(null);
-        for (AccessControlPolicy p: ap) {
-            if (p instanceof JackrabbitAccessControlList) {
-                JackrabbitAccessControlList acl = (JackrabbitAccessControlList) p;
-                for (AccessControlEntry ac: acl.getAccessControlEntries()) {
-                    if (ac instanceof JackrabbitAccessControlEntry) {
-                        acl.removeAccessControlEntry(ac);
-                    }
-                }
-            }
-        }
-        admin.save();
-    }
-
-    protected void addACL(String path, boolean allow, String[] privs, String principal) throws RepositoryException {
-        JackrabbitAccessControlList acl = null;
-        for (AccessControlPolicy p: admin.getAccessControlManager().getPolicies(path)) {
-            if (p instanceof JackrabbitAccessControlList) {
-                acl = (JackrabbitAccessControlList) p;
-                break;
-            }
-        }
-        if (acl == null) {
-            AccessControlPolicyIterator iter =  admin.getAccessControlManager().getApplicablePolicies(path);
-            while (iter.hasNext()) {
-                AccessControlPolicy p = iter.nextAccessControlPolicy();
-                if (p instanceof JackrabbitAccessControlList) {
-                    acl = (JackrabbitAccessControlList) p;
-                    break;
-                }
-            }
-        }
-        assertNotNull(acl);
-
-        Privilege[] ps = new Privilege[privs.length];
-        for (int i=0; i<privs.length; i++) {
-            ps[i] = admin.getAccessControlManager().privilegeFromName(privs[i]);
-        }
-        acl.addEntry(new PrincipalImpl(principal), ps, allow);
-        admin.getAccessControlManager().setPolicy(path, acl);
-        admin.save();
-    }
 }
\ No newline at end of file

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestUserContentPackage.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestUserContentPackage.java?rev=1638251&r1=1638250&r2=1638251&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestUserContentPackage.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestUserContentPackage.java Tue Nov 11 18:48:34 2014
@@ -28,6 +28,7 @@ import org.apache.jackrabbit.api.securit
 import org.apache.jackrabbit.api.security.user.UserManager;
 import org.apache.jackrabbit.core.security.principal.PrincipalImpl;
 import org.apache.jackrabbit.vault.fs.api.ImportMode;
+import org.apache.jackrabbit.vault.fs.io.AccessControlHandling;
 import org.apache.jackrabbit.vault.fs.io.ImportOptions;
 import org.apache.jackrabbit.vault.packaging.JcrPackage;
 import org.apache.jackrabbit.vault.packaging.PackageException;
@@ -214,6 +215,35 @@ public class TestUserContentPackage exte
         assertNodeExists(authPath + "/" + NAME_PROFILE_PICTURE_NODE);
     }
 
+    @Test
+    public void installUserA_Policy_Moved() throws RepositoryException, IOException, PackageException {
+        UserManager mgr = ((JackrabbitSession) admin).getUserManager();
+        assertNull("test-user-a must not exist", mgr.getAuthorizable(ID_TEST_USER_A));
+
+        User u = mgr.createUser(ID_TEST_USER_A, "nonce");
+        String authPath = u.getPath();
+        assertNotSame("authorizable path must be different than the one in the package", PARENT_PATH_TEST_USER_A, Text.getRelativeParent(authPath, 1));
+
+        // assert that user does not have an ACL setup
+        assertPermissionMissing(authPath, true, new String[]{"jcr:all"}, "everyone", null);
+
+        JcrPackage pack = packMgr.upload(getStream("testpackages/test_user_a_policy.zip"), false);
+        assertNotNull(pack);
+        ImportOptions opts = getDefaultOptions();
+        opts.setImportMode(ImportMode.MERGE);
+        opts.setAccessControlHandling(AccessControlHandling.MERGE_PRESERVE);
+        pack.install(opts);
+
+        // check if user exists
+        User userA = (User) mgr.getAuthorizable(ID_TEST_USER_A);
+        assertNotNull("test-user-a must exist", userA);
+        authPath = u.getPath();
+
+        // assert that user has an ACL setup
+        assertPermission(authPath, true, new String[]{"jcr:all"}, "everyone", null);
+    }
+
+
     private User installUserA(ImportMode mode, boolean usePkgPath, boolean expectPkgPath) throws RepositoryException, IOException, PackageException {
         UserManager mgr = ((JackrabbitSession) admin).getUserManager();
         assertNull("test-user-a must not exist", mgr.getAuthorizable(ID_TEST_USER_A));

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a.zip
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a.zip?rev=1638251&r1=1638250&r2=1638251&view=diff
==============================================================================
Files jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a.zip (original) and jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a.zip Tue Nov 11 18:48:34 2014 differ

Copied: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_policy.zip (from r1637431, jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a.zip)
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_policy.zip?p2=jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_policy.zip&p1=jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a.zip&r1=1637431&r2=1638251&rev=1638251&view=diff
==============================================================================
Files jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a.zip (original) and jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_policy.zip Tue Nov 11 18:48:34 2014 differ

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_profile.zip
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_profile.zip?rev=1638251&r1=1638250&r2=1638251&view=diff
==============================================================================
Files jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_profile.zip (original) and jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_profile.zip Tue Nov 11 18:48:34 2014 differ

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_profile_picture.zip
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_profile_picture.zip?rev=1638251&r1=1638250&r2=1638251&view=diff
==============================================================================
Files jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_profile_picture.zip (original) and jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/test_user_a_profile_picture.zip Tue Nov 11 18:48:34 2014 differ