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/02/22 00:59:22 UTC
svn commit: r1570754 - in /jackrabbit/commons/filevault/trunk/vault-core/src:
main/java/org/apache/jackrabbit/vault/fs/impl/io/
test/java/org/apache/jackrabbit/vault/packaging/integration/
test/resources/org/apache/jackrabbit/vault/packaging/integratio...
Author: tripod
Date: Fri Feb 21 23:59:21 2014
New Revision: 1570754
URL: http://svn.apache.org/r1570754
Log:
JCRVLT-37 Regression: Order of ACE entries is not correct
Added:
jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/mode_ac_test_e.zip
Modified:
jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/JackrabbitACLImporter.java
jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestACLAndMerge.java
Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/JackrabbitACLImporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/JackrabbitACLImporter.java?rev=1570754&r1=1570753&r2=1570754&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/JackrabbitACLImporter.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/JackrabbitACLImporter.java Fri Feb 21 23:59:21 2014
@@ -20,6 +20,7 @@ import java.security.Principal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -65,7 +66,7 @@ public class JackrabbitACLImporter imple
private final String accessControlledPath;
- private Map<String, List<ACE>> aceMap = new HashMap<String, List<ACE>>();
+ private Map<String, List<ACE>> aceMap = new LinkedHashMap<String, List<ACE>>();
private ACE currentACE;
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=1570754&r1=1570753&r2=1570754&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 Fri Feb 21 23:59:21 2014
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.vault.pack
import java.io.IOException;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
@@ -40,9 +41,9 @@ import org.apache.jackrabbit.vault.fs.io
import org.apache.jackrabbit.vault.packaging.JcrPackage;
import org.apache.jackrabbit.vault.packaging.PackageException;
import org.junit.Assume;
-import org.junit.Ignore;
import org.junit.Test;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -250,6 +251,53 @@ public class TestACLAndMerge extends Int
}
/**
+ * Installs a package with 3 ACLs and checks if the order of the entries is still correct.
+ */
+ @Test
+ public void testACOrderOverwrite() throws Exception {
+ assertNodeMissing("/testroot");
+ doOrderTest(AccessControlHandling.OVERWRITE);
+ }
+
+ /**
+ * Installs a package with 3 ACLs and checks if the order of the entries is still correct.
+ */
+ @Test
+ public void testACOrderMerge() throws Exception {
+ assertNodeMissing("/testroot");
+ doOrderTest(AccessControlHandling.OVERWRITE);
+ doOrderTest(AccessControlHandling.MERGE);
+ }
+
+ /**
+ * Installs a package with 3 ACLs and checks if the order of the entries is still correct.
+ */
+ @Test
+ public void testACOrderMergePreserve() throws Exception {
+ assertNodeMissing("/testroot");
+ doOrderTest(AccessControlHandling.OVERWRITE);
+ doOrderTest(AccessControlHandling.MERGE_PRESERVE);
+ }
+
+ private void doOrderTest(AccessControlHandling ac) throws Exception {
+ JcrPackage pack = packMgr.upload(getStream("testpackages/mode_ac_test_e.zip"), true);
+ assertNotNull(pack);
+ ImportOptions opts = getDefaultOptions();
+ opts.setAccessControlHandling(ac);
+ pack.install(opts);
+
+ // test if nodes and ACLs of first package exist
+ assertNodeExists("/testroot/node_e");
+ int idx0 = hasPermission("/testroot/secured", false, new String[]{"jcr:all"}, "everyone", Collections.<String, String[]>emptyMap());
+ int idx1 = hasPermission("/testroot/secured", true, new String[]{"jcr:all"}, "testuser", Collections.<String, String[]>emptyMap());
+ int idx2 = hasPermission("/testroot/secured", true, new String[]{"jcr:all"}, "testuser1", Collections.<String, String[]>emptyMap());
+
+ assertTrue("All ACEs must exist", idx0 >= 0 && idx1 >= 0 && idx2 >= 0);
+ String result = String.format("%d < %d < %d", idx0, idx1, idx2);
+ assertEquals("ACE order ", "0 < 1 < 2", result);
+ }
+
+ /**
* Installs a package with oak ACL content.
*/
@Test
@@ -269,7 +317,7 @@ public class TestACLAndMerge extends Int
restrictions.put("rep:prefixes", new String[]{"rep", "granite"});
assertTrue(
"expected permission missing",
- hasPermission("/testroot/secured", true, new String[]{"jcr:all"}, "everyone", restrictions)
+ hasPermission("/testroot/secured", true, new String[]{"jcr:all"}, "everyone", restrictions) >= 0
);
}
@@ -277,7 +325,6 @@ public class TestACLAndMerge extends Int
* Installs a package with missing ACL user.
*/
@Test
- @Ignore("current fails due to changes related to JCRVLT-25")
public void testMissingUser() throws RepositoryException, IOException, PackageException {
assertNodeMissing("/testroot");
@@ -296,7 +343,7 @@ public class TestACLAndMerge extends Int
if (globRest != null) {
restrictions.put("rep:glob", new String[]{globRest});
}
- if (hasPermission(path, allow, privs, name, restrictions)) {
+ if (hasPermission(path, allow, privs, name, restrictions) >= 0) {
fail("Expected permission should not exist on path " + path);
}
}
@@ -307,20 +354,21 @@ public class TestACLAndMerge extends Int
if (globRest != null) {
restrictions.put("rep:glob", new String[]{globRest});
}
- if (!hasPermission(path, allow, privs, name, restrictions)) {
+ if (hasPermission(path, allow, privs, name, restrictions) < 0) {
fail("Expected permission missing on path " + path);
}
}
- protected boolean hasPermission(String path, boolean allow, String[] privs, String name, Map<String, String[]> restrictions)
+ protected int hasPermission(String path, boolean allow, String[] privs, String name, Map<String, String[]> restrictions)
throws RepositoryException {
AccessControlPolicy[] ap = admin.getAccessControlManager().getPolicies(path);
- boolean found = false;
+ 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;
@@ -365,12 +413,11 @@ public class TestACLAndMerge extends Int
if (!restrictionExpected || !rests.isEmpty()) {
continue;
}
- found = true;
- break;
+ return idx-1;
}
}
}
}
- return found;
+ return -1;
}
}
\ No newline at end of file
Added: jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/mode_ac_test_e.zip
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/mode_ac_test_e.zip?rev=1570754&view=auto
==============================================================================
Files jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/mode_ac_test_e.zip (added) and jackrabbit/commons/filevault/trunk/vault-core/src/test/resources/org/apache/jackrabbit/vault/packaging/integration/testpackages/mode_ac_test_e.zip Fri Feb 21 23:59:21 2014 differ