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