You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by an...@apache.org on 2009/10/22 19:26:39 UTC

svn commit: r828791 [8/8] - in /jackrabbit/trunk: jackrabbit-api/src/main/java/org/apache/jackrabbit/api/security/user/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/ jackrabbi...

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/UserManagerImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/UserManagerImplTest.java?rev=828791&r1=828790&r2=828791&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/UserManagerImplTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/UserManagerImplTest.java Thu Oct 22 17:26:37 2009
@@ -21,7 +21,6 @@
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.api.security.user.UserManager;
-import org.apache.jackrabbit.core.NodeImpl;
 import org.apache.jackrabbit.core.SessionImpl;
 import org.apache.jackrabbit.core.security.TestPrincipal;
 import org.apache.jackrabbit.test.NotExecutableException;
@@ -32,10 +31,12 @@
 import javax.jcr.Session;
 import javax.jcr.SimpleCredentials;
 import javax.jcr.Value;
-import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.Node;
 import java.security.Principal;
 import java.util.Iterator;
 import java.util.Set;
+import java.util.List;
+import java.util.ArrayList;
 
 /**
  * <code>UserManagerImplTest</code>...
@@ -63,55 +64,24 @@
         return userId;
     }
 
-    public void testCreateNodesDirectly() throws NotExecutableException, RepositoryException {
-        User u = getTestUser(superuser);
-        if (u instanceof UserImpl) {
-            throw new NotExecutableException();
-        }
-
-        NodeImpl n = ((UserImpl)u).getNode();
-        try {
-            n.addNode("anyname", "rep:AuthorizableFolder");
-            fail("security nodes must be protected.");
-        } catch (ConstraintViolationException e) {
-            // success
-        } finally {
-            n.refresh(false);
-        }
-        try {
-            n.addNode("anyname", "rep:User");
-            fail("security nodes must be protected.");
-        } catch (ConstraintViolationException e) {
-            // success
-        } finally {
-            n.refresh(false);
-        }
-        try {
-            n.setProperty("rep:userId", "someotherUID");
-            fail("security nodes must be protected.");
-        } catch (ConstraintViolationException e) {
-            // success
-        } finally {
-            n.refresh(false);
-        }
-    }
-
-    public void testPrincipalNameEqualsUserID() throws RepositoryException {
+    public void testPrincipalNameEqualsUserID() throws RepositoryException, NotExecutableException {
         Principal p = getTestPrincipal();
         User u = null;
         try {
             u = userMgr.createUser(p.getName(), buildPassword(p));
+            save(superuser);
 
             String msg = "Implementation specific: User.getID() must return the userID pass to createUser.";
             assertEquals(msg, u.getID(), p.getName());
         } finally {
             if (u != null) {
                 u.remove();
+                save(superuser);
             }
         }
     }
 
-    public void testUserIDFromSession() throws RepositoryException {
+    public void testUserIDFromSession() throws RepositoryException, NotExecutableException {
         Principal p = getTestPrincipal();
         User u = null;
         Session uSession = null;
@@ -119,6 +89,7 @@
             String uid = p.getName();
             String pw = buildPassword(p);
             u = userMgr.createUser(uid, pw);
+            save(superuser);
 
             uSession = superuser.getRepository().login(new SimpleCredentials(uid, pw.toCharArray()));
             assertEquals(u.getID(), uSession.getUserID());
@@ -128,11 +99,12 @@
             }
             if (u != null) {
                 u.remove();
+                save(superuser);
             }
         }
     }
 
-    public void testCreateUserIdDifferentFromPrincipalName() throws RepositoryException {
+    public void testCreateUserIdDifferentFromPrincipalName() throws RepositoryException, NotExecutableException {
         Principal p = getTestPrincipal();
         String uid = getTestUserId(p);
         String pw = buildPassword(uid, true);
@@ -141,6 +113,7 @@
         Session uSession = null;
         try {
             u = userMgr.createUser(uid, pw, p, null);
+            save(superuser);
 
             String msg = "Creating a User with principal-name distinct from Principal-name must succeed as long as both are unique.";
             assertEquals(msg, u.getID(), uid);
@@ -157,11 +130,12 @@
             }
             if (u != null) {
                 u.remove();
+                save(superuser);
             }
         }
     }
 
-    public void testCreatingGroupWithNameMatchingExistingUserId() throws RepositoryException {
+    public void testCreatingGroupWithNameMatchingExistingUserId() throws RepositoryException, NotExecutableException {
         Principal p = getTestPrincipal();
         String uid = getTestUserId(p);
 
@@ -169,7 +143,9 @@
         Group gr = null;
         try {
             u = userMgr.createUser(uid, buildPassword(uid, true), p, null);
+            save(superuser);
             gr = userMgr.createGroup(new TestPrincipal(uid));
+            save(superuser);
 
             String msg = "Creating a Group with a principal-name that exists as UserID -> must create new GroupID but keep PrincipalName.";
             assertFalse(msg, gr.getID().equals(gr.getPrincipal().getName()));
@@ -179,24 +155,25 @@
         } finally {
             if (u != null) {
                 u.remove();
+                save(superuser);
             }
             if (gr != null) {
                 gr.remove();
+                save(superuser);
             }
         }
     }
 
     public void testFindAuthorizable() throws RepositoryException, NotExecutableException {
         Authorizable auth;
-        Set principals = getPrincipalSetFromSession(superuser);
-        for (Iterator it = principals.iterator(); it.hasNext();) {
-            Principal p = (Principal) it.next();
+        Set<Principal> principals = getPrincipalSetFromSession(superuser);
+        for (Principal p : principals) {
             auth = userMgr.getAuthorizable(p);
 
             if (auth != null) {
-                if (!auth.isGroup() && auth.hasProperty("rep:userId")) {
-                    String val = auth.getProperty("rep:userId")[0].getString();
-                    Iterator users = userMgr.findAuthorizables("rep:userId", val);
+                if (!auth.isGroup() && auth.hasProperty(pPrincipalName)) {
+                    String val = auth.getProperty(pPrincipalName)[0].getString();
+                    Iterator<Authorizable> users = userMgr.findAuthorizables(pPrincipalName, val);
 
                     // the result must contain 1 authorizable
                     assertTrue(users.hasNext());
@@ -211,18 +188,19 @@
         }
     }
 
-    public void testFindAuthorizableByAddedProperty() throws RepositoryException {
+    public void testFindAuthorizableByAddedProperty() throws RepositoryException, NotExecutableException {
         Principal p = getTestPrincipal();
         Authorizable auth = null;
 
         try {
             auth= userMgr.createGroup(p);
             auth.setProperty("E-Mail", new Value[] { superuser.getValueFactory().createValue("anyVal")});
+            save(superuser);
 
             boolean found = false;
-            Iterator result = userMgr.findAuthorizables("E-Mail", "anyVal");
+            Iterator<Authorizable> result = userMgr.findAuthorizables("E-Mail", "anyVal");
             while (result.hasNext()) {
-                Authorizable a = (Authorizable) result.next();
+                Authorizable a = result.next();
                 if (a.getID().equals(auth.getID())) {
                     found = true;
                 }
@@ -233,19 +211,21 @@
             // remove the create group again.
             if (auth != null) {
                 auth.remove();
+                save(superuser);
             }
         }
     }
 
-    public void testFindUser() throws RepositoryException {
+    public void testFindUser() throws RepositoryException, NotExecutableException {
         User u = null;
         try {
             Principal p = getTestPrincipal();
             String uid = "UID" + p.getName();
             u = userMgr.createUser(uid, buildPassword(uid, false), p, null);
+            save(superuser);
 
             boolean found = false;
-            Iterator it = userMgr.findAuthorizables(pPrincipalName, null, UserManager.SEARCH_TYPE_USER);
+            Iterator<Authorizable> it = userMgr.findAuthorizables(pPrincipalName, null, UserManager.SEARCH_TYPE_USER);
             while (it.hasNext() && !found) {
                 User nu = (User) it.next();
                 found = nu.getID().equals(uid);
@@ -273,18 +253,20 @@
         } finally {
             if (u != null) {
                 u.remove();
+                save(superuser);
             }
         }
     }
 
-    public void testFindGroup() throws RepositoryException {
+    public void testFindGroup() throws RepositoryException, NotExecutableException {
         Group gr = null;
         try {
             Principal p = getTestPrincipal();
             gr = userMgr.createGroup(p);
+            save(superuser);
 
             boolean found = false;
-            Iterator it = userMgr.findAuthorizables(pPrincipalName, null, UserManager.SEARCH_TYPE_GROUP);
+            Iterator<Authorizable> it = userMgr.findAuthorizables(pPrincipalName, null, UserManager.SEARCH_TYPE_GROUP);
             while (it.hasNext() && !found) {
                 Group ng = (Group) it.next();
                 found = ng.getPrincipal().getName().equals(p.getName());
@@ -310,25 +292,26 @@
         } finally {
             if (gr != null) {
                 gr.remove();
+                save(superuser);
             }
         }
     }
 
     public void testFindAllUsers() throws RepositoryException {
-        Iterator it = userMgr.findAuthorizables(pPrincipalName, null, UserManager.SEARCH_TYPE_USER);
+        Iterator<Authorizable> it = userMgr.findAuthorizables(pPrincipalName, null, UserManager.SEARCH_TYPE_USER);
         while (it.hasNext()) {
-            assertFalse(((Authorizable) it.next()).isGroup());
+            assertFalse(it.next().isGroup());
         }
     }
 
     public void testFindAllGroups() throws RepositoryException {
-        Iterator it = userMgr.findAuthorizables(pPrincipalName, null, UserManager.SEARCH_TYPE_GROUP);
+        Iterator<Authorizable> it = userMgr.findAuthorizables(pPrincipalName, null, UserManager.SEARCH_TYPE_GROUP);
         while (it.hasNext()) {
-            assertTrue(((Authorizable) it.next()).isGroup());
+            assertTrue(it.next().isGroup());
         }
     }
 
-    public void testNewUserCanLogin() throws RepositoryException {
+    public void testNewUserCanLogin() throws RepositoryException, NotExecutableException {
         String uid = getTestPrincipal().getName();
         String pw = buildPassword(uid, false);
 
@@ -336,11 +319,14 @@
         Session s = null;
         try {
             u = userMgr.createUser(uid, pw);
+            save(superuser);
+
             Credentials creds = new SimpleCredentials(uid, pw.toCharArray());
             s = superuser.getRepository().login(creds);
         } finally {
             if (u != null) {
                 u.remove();
+                save(superuser);
             }
             if (s != null) {
                 s.logout();
@@ -386,8 +372,8 @@
     public void testCleanupForAllWorkspaces() throws RepositoryException, NotExecutableException {
         String[] workspaceNames = superuser.getWorkspace().getAccessibleWorkspaceNames();
 
-        for (int i = 0; i < workspaceNames.length; i++) {
-            Session s = getHelper().getSuperuserSession(workspaceNames[i]);
+        for (String workspaceName1 : workspaceNames) {
+            Session s = getHelper().getSuperuserSession(workspaceName1);
             try {
                 UserManager umgr = getUserManager(s);
                 s.logout();
@@ -408,4 +394,106 @@
             }
         }
     }
+
+    /**
+     * Implementation specific test: user(/groups) cannot be nested.
+     * @throws RepositoryException
+     */
+    public void testEnforceAuthorizableFolderHierarchy() throws RepositoryException {
+        AuthorizableImpl authImpl = (AuthorizableImpl) userMgr.getAuthorizable(superuser.getUserID());
+        Node userNode = authImpl.getNode();
+        SessionImpl sImpl = (SessionImpl) userNode.getSession();
+
+        Node folder = userNode.addNode("folder", sImpl.getJCRName(UserConstants.NT_REP_AUTHORIZABLE_FOLDER));
+        String path = folder.getPath();
+        try {
+            // authNode - authFolder -> create User
+            Authorizable a = null;
+            try {
+                Principal p = getTestPrincipal();
+                a = userMgr.createUser(p.getName(), p.getName(), p, path);
+                fail("Users may not be nested.");
+            } catch (RepositoryException e) {
+                // success
+            } finally {
+                if (a != null) {
+                    a.remove();
+                }
+            }
+        } finally {
+            if (sImpl.nodeExists(path)) {
+                folder.remove();
+                sImpl.save();
+            }
+        }
+
+        Node someContent = userNode.addNode("mystuff", "nt:unstructured");
+        path = someContent.getPath();
+        try {
+            // authNode - anyNode -> create User
+            Authorizable a = null;
+            try {
+                Principal p = getTestPrincipal();
+                a = userMgr.createUser(p.getName(), p.getName(), p, someContent.getPath());
+                fail("Users may not be nested.");
+            } catch (RepositoryException e) {
+                // success
+            } finally {
+                if (a != null) {
+                    a.remove();
+                    a = null;
+                }
+            }
+
+            // authNode - anyNode - authFolder -> create User
+            if (!sImpl.nodeExists(path)) {
+                someContent = userNode.addNode("mystuff", "nt:unstructured");               
+            }
+            folder = someContent.addNode("folder", sImpl.getJCRName(UserConstants.NT_REP_AUTHORIZABLE_FOLDER));
+            sImpl.save(); // this time save node structure
+            try {
+                Principal p = getTestPrincipal();
+                a = userMgr.createUser(p.getName(), p.getName(), p, folder.getPath());
+                fail("Users may not be nested.");
+            } catch (RepositoryException e) {
+                // success
+            } finally {
+                if (a != null) {
+                    a.remove();
+                }
+            }
+        } finally {
+            if (sImpl.nodeExists(path)) {
+                someContent.remove();
+                sImpl.save();
+            }
+        }
+    }
+
+
+    public void testCreateWithRelativePath() throws Exception {
+        Principal p = getTestPrincipal();
+        String uid = p.getName();
+
+        String usersPath = ((UserManagerImpl) userMgr).getUsersPath();
+
+        List<String> invalid = new ArrayList();
+        invalid.add("../../path");
+        invalid.add(usersPath + "/../test");
+
+        for (String path : invalid) {
+            try {
+                User user = userMgr.createUser(uid, buildPassword(uid, true), p, path);
+                save(superuser);
+
+                fail("intermediate path may not point outside of the user tree.");
+                user.remove();
+                save(superuser);
+                
+            } catch (Exception e) {
+                // success
+                assertNull(userMgr.getAuthorizable(uid));
+            }
+        }
+    }
 }
\ No newline at end of file

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/AccessControlImporterTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/AccessControlImporterTest.java?rev=828791&r1=828790&r2=828791&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/AccessControlImporterTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/AccessControlImporterTest.java Thu Oct 22 17:26:37 2009
@@ -18,10 +18,13 @@
 
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
 import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlManager;
 import org.apache.jackrabbit.commons.xml.ParsingContentHandler;
 import org.apache.jackrabbit.core.NodeImpl;
 import org.apache.jackrabbit.core.SessionImpl;
+import org.apache.jackrabbit.core.config.ImportConfig;
 import org.apache.jackrabbit.core.security.authorization.AccessControlConstants;
+import org.apache.jackrabbit.core.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.test.AbstractJCRTest;
 import org.apache.jackrabbit.test.NotExecutableException;
 import org.xml.sax.SAXException;
@@ -40,9 +43,11 @@
 import java.io.InputStream;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Collections;
 
 /**
- * <code>SystemViewTest</code>...
+ * <code>AccessControlImporterTest</code>: Testing import of resource based
+ * ACLs.
  */
 public class AccessControlImporterTest extends AbstractJCRTest {
 
@@ -176,7 +181,6 @@
     private static final String XML_POLICY_ONLY   = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><sv:node sv:name=\"test\" xmlns:mix=\"http://www.jcp.org/jcr/mix/1.0\" xmlns:nt=\"http://www.jcp.org/jcr/nt/1.0\" xmlns:fn_old=\"http://www.w3.org/2004/10/xpath-functions\" xmlns:fn=\"http://www.w3.org/2005/xpath-functions\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:rep=\"internal\" xmlns:jcr=\"http://www.jcp.org/jcr/1.0\"><sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>nt:unstructured</sv:value></sv:property><sv:property sv:name=\"jcr:mixinTypes\" sv:type=\"Name\"><sv:value>rep:AccessControllable</sv:value><sv:value>mix:versionable</sv:value></sv:property><sv:property sv:name=\"jcr:uuid\" sv:type=\"String\"><sv:value>0a0ca2e9-ab98-4433-a12b-d57283765207</sv:value></sv:property><sv:property sv:name=\"jcr:baseVersion\" sv:type=\"Reference\"><sv:value>35d0d137-a3a4-4af3-8cdd-ce565ea6bdc9</sv:value></sv:property>
 <sv:property sv:name=\"jcr:isCheckedOut\" sv:type=\"Boolean\"><sv:value>true</sv:value></sv:property><sv:property sv:name=\"jcr:predecessors\" sv:type=\"Reference\"><sv:value>35d0d137-a3a4-4af3-8cdd-ce565ea6bdc9</sv:value></sv:property><sv:property sv:name=\"jcr:versionHistory\" sv:type=\"Reference\"><sv:value>428c9ef2-78e5-4f1c-95d3-16b4ce72d815</sv:value></sv:property><sv:node sv:name=\"rep:policy\"><sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>rep:ACL</sv:value></sv:property></sv:node></sv:node>";
 
 
-    private ProtectedNodeImporter piImporter;
     private SessionImpl sImpl;
 
     @Override
@@ -187,7 +191,16 @@
             throw new NotExecutableException("SessionImpl expected");
         }
         sImpl = (SessionImpl) superuser;
-        piImporter = new AccessControlImporter(sImpl, sImpl, false, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
+
+        // make sure the repository provides resource based policies.
+        AccessControlPolicyIterator it = sImpl.getAccessControlManager().getApplicablePolicies("/");
+        if (!it.hasNext()) {
+            AccessControlPolicy[] pcs = sImpl.getAccessControlManager().getPolicies("/");
+            if (pcs == null || pcs.length == 0) {
+                throw new NotExecutableException();
+            }
+
+        } // ok resource based acl
     }
 
     private NodeImpl createPolicyNode(NodeImpl target) throws Exception {
@@ -214,9 +227,14 @@
         }
     }
 
+    private static ProtectedNodeImporter createImporter() {
+        return new AccessControlImporter();
+    }
+
     public void testWorkspaceImport() throws Exception {
         boolean isWorkspaceImport = true;
-        ProtectedNodeImporter protectedImporter = new AccessControlImporter(sImpl, sImpl, isWorkspaceImport, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
+        ProtectedNodeImporter protectedImporter = new AccessControlImporter();
+        protectedImporter.init(sImpl, sImpl, isWorkspaceImport, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, null);
 
         NodeImpl n = createPolicyNode((NodeImpl) testRootNode);
         assertFalse(protectedImporter.start(n));
@@ -224,6 +242,8 @@
 
     public void testNonProtectedNode() throws Exception {
         if (!testRootNode.getDefinition().isProtected()) {
+            ProtectedNodeImporter piImporter = createImporter();
+            piImporter.init(sImpl, sImpl, false, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, null);
             assertFalse(piImporter.start((NodeImpl) testRootNode));
         } else {
             throw new NotExecutableException();
@@ -234,6 +254,8 @@
         Node n = testRootNode.addNode(nodeName1);
         n.addMixin(mixVersionable);
 
+        ProtectedNodeImporter piImporter = createImporter();
+        piImporter.init(sImpl, sImpl, false, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, null);
         assertFalse(piImporter.start((NodeImpl) n));
     }
 
@@ -248,7 +270,7 @@
 
             InputStream in = new ByteArrayInputStream(XML_POLICY_TREE.getBytes("UTF-8"));
             SessionImporter importer = new SessionImporter(target, sImpl,
-                    ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, piImporter, null);
+                    ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, new PseudoConfig());
             ImportHandler ih = new ImportHandler(importer, sImpl);
             new ParsingContentHandler(ih).parse(in);
 
@@ -290,7 +312,7 @@
 
             InputStream in = new ByteArrayInputStream(XML_POLICY_TREE_3.getBytes("UTF-8"));
             SessionImporter importer = new SessionImporter(target, sImpl,
-                    ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, piImporter, null);
+                    ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, new PseudoConfig());
             ImportHandler ih = new ImportHandler(importer, sImpl);
             new ParsingContentHandler(ih).parse(in);
 
@@ -335,13 +357,13 @@
 
             InputStream in = new ByteArrayInputStream(XML_POLICY_TREE_3.getBytes("UTF-8"));
             SessionImporter importer = new SessionImporter(target, sImpl,
-                    ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, piImporter, null);
+                    ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, new PseudoConfig());
             ImportHandler ih = new ImportHandler(importer, sImpl);
             new ParsingContentHandler(ih).parse(in);
 
             in = new ByteArrayInputStream(XML_POLICY_TREE_5.getBytes("UTF-8"));
             importer = new SessionImporter(target, sImpl,
-                    ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, piImporter, null);
+                    ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, new PseudoConfig());
             ih = new ImportHandler(importer, sImpl);
             new ParsingContentHandler(ih).parse(in);
 
@@ -381,7 +403,7 @@
 
             InputStream in = new ByteArrayInputStream(XML_POLICY_TREE_4.getBytes("UTF-8"));
             SessionImporter importer = new SessionImporter(target, sImpl,
-                    ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, piImporter, null);
+                    ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, new PseudoConfig());
             ImportHandler ih = new ImportHandler(importer, sImpl);
             new ParsingContentHandler(ih).parse(in);
 
@@ -442,7 +464,7 @@
         try {
 
             InputStream in = new ByteArrayInputStream(XML_POLICY_TREE_2.getBytes("UTF-8"));
-            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW, piImporter, null);
+            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW, new PseudoConfig());
             ImportHandler ih = new ImportHandler(importer, sImpl);
             new ParsingContentHandler(ih).parse(in);
 
@@ -492,7 +514,7 @@
 
             InputStream in = new ByteArrayInputStream(XML_POLICY_ONLY.getBytes("UTF-8"));
 
-            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW, piImporter, null);
+            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW, new PseudoConfig());
             ImportHandler ih = new ImportHandler(importer, sImpl);
             new ParsingContentHandler(ih).parse(in);
 
@@ -516,6 +538,14 @@
      * @throws Exception
      */
     public void testImportPrincipalBasedACL() throws Exception {
+        JackrabbitAccessControlManager acMgr = (JackrabbitAccessControlManager) sImpl.getAccessControlManager();
+        if (acMgr.getApplicablePolicies(EveryonePrincipal.getInstance()).length > 0 ||
+                acMgr.getPolicies(EveryonePrincipal.getInstance()).length > 0) {
+            // test expects that only resource-based acl is supported
+            throw new NotExecutableException();
+        }
+
+
         NodeImpl target;
         NodeImpl root = (NodeImpl) sImpl.getRootNode();
         if (!root.hasNode(AccessControlConstants.N_ACCESSCONTROL)) {
@@ -530,7 +560,7 @@
 
             InputStream in = new ByteArrayInputStream(XML_AC_TREE.getBytes("UTF-8"));
 
-            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, piImporter, null);
+            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, new PseudoConfig());
             ImportHandler ih = new ImportHandler(importer, sImpl);
             new ParsingContentHandler(ih).parse(in);
 
@@ -559,7 +589,7 @@
 
             InputStream in = new ByteArrayInputStream(XML_POLICY_TREE.getBytes("UTF-8"));
 
-            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, null, null);
+            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, null);
             ImportHandler ih = new ImportHandler(importer, sImpl);
             new ParsingContentHandler(ih).parse(in);
 
@@ -579,4 +609,18 @@
             superuser.refresh(false);
         }
     }
+
+    private final class PseudoConfig extends ImportConfig {
+
+        private final ProtectedNodeImporter aci;
+
+        private PseudoConfig() {
+            this.aci = createImporter();
+        }
+
+        @Override
+        public List<ProtectedNodeImporter> getProtectedNodeImporters() {
+            return Collections.singletonList(aci);
+        }
+    }
 }