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 2009/08/28 17:38:38 UTC

svn commit: r808923 [2/2] - in /jackrabbit/trunk/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/ main/java/org/apache/jackrabbit/core/xml/ test/java/org/apache/jackrabbit/core/xml/

Added: 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=808923&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/AccessControlImporterTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/AccessControlImporterTest.java Fri Aug 28 15:38:38 2009
@@ -0,0 +1,365 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.jackrabbit.core.xml;
+
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlEntry;
+import org.apache.jackrabbit.api.security.JackrabbitAccessControlList;
+import org.apache.jackrabbit.commons.xml.ParsingContentHandler;
+import org.apache.jackrabbit.core.NodeImpl;
+import org.apache.jackrabbit.core.SessionImpl;
+import org.apache.jackrabbit.core.security.authorization.AccessControlConstants;
+import org.apache.jackrabbit.test.AbstractJCRTest;
+import org.apache.jackrabbit.test.NotExecutableException;
+import org.xml.sax.SAXException;
+
+import javax.jcr.ImportUUIDBehavior;
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.nodetype.ConstraintViolationException;
+import javax.jcr.security.AccessControlEntry;
+import javax.jcr.security.AccessControlManager;
+import javax.jcr.security.AccessControlPolicy;
+import javax.jcr.security.Privilege;
+import javax.jcr.security.AccessControlPolicyIterator;
+import javax.jcr.security.AccessControlList;
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * <code>SystemViewTest</code>...
+ */
+public class AccessControlImporterTest extends AbstractJCRTest {
+
+    private static final String XML_POLICY_TREE   = "<?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:name=\"allow\">" +
+                        "<sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\">" +
+                            "<sv:value>rep:GrantACE</sv:value>" +
+                        "</sv:property>" +
+                        "<sv:property sv:name=\"rep:principalName\" sv:type=\"String\">" +
+                            "<sv:value>everyone</sv:value>" +
+                        "</sv:property>" +
+                        "<sv:property sv:name=\"rep:privileges\" sv:type=\"Name\">" +
+                            "<sv:value>jcr:write</sv:value>" +
+                        "</sv:property>" +
+                    "</sv:node>" +
+                "</sv:node>" +
+            "</sv:node>";
+    private static final String XML_POLICY_TREE_2 = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><sv:node sv:name=\"rep:policy\" 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>rep:ACL</sv:value></sv:property><sv:node sv:name=\"allow\"><sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>rep:GrantACE</sv:value></sv:property><sv:property sv:name=\"rep:principalName\" sv:type=\"String\"><sv:value>everyone</sv:value></sv:property><sv:property sv:name=\"rep:privileges\" sv:type=\"Name\"><sv:value>jcr:write</sv:value></sv:property></sv:node></sv:node>";
+
+    private static final String XML_AC_TREE       = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><sv:node sv:name=\"rep:security\" 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:crx=\"http://www.day.com/crx/1.0\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns:sv=\"http://www.jcp.org/jcr/sv/1.0\" xmlns:repl=\"http://www.day.com/crx/replication/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>rep:AccessControl</sv:value></sv:property><sv:node sv:name=\"rep:authorizables\"><sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>rep:AccessControl</sv:value></sv:property><sv:node sv:name=\"rep:groups\"><sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>rep:AccessControl</sv:value></sv:property><sv:node sv:
 name=\"administrators\"><sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>rep:PrincipalAccessControl</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:name=\"entry\"><sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>rep:GrantACE</sv:value></sv:property><sv:property sv:name=\"rep:glob\" sv:type=\"String\"><sv:value>*</sv:value></sv:property><sv:property sv:name=\"rep:nodePath\" sv:type=\"Path\"><sv:value>/</sv:value></sv:property><sv:property sv:name=\"rep:principalName\" sv:type=\"String\"><sv:value>administrators</sv:value></sv:property><sv:property sv:name=\"rep:privileges\" sv:type=\"Name\"><sv:value>jcr:all</sv:value></sv:property></sv:node></sv:node></sv:node></sv:node><sv:node sv:name=\"rep:users\"><sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>rep:AccessControl</sv:value></sv:property><sv:node sv
 :name=\"admin\"><sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>rep:AccessControl</sv:value></sv:property><sv:node sv:name=\"t\"><sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>rep:PrincipalAccessControl</sv:value></sv:property></sv:node><sv:node sv:name=\"a\"><sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>rep:PrincipalAccessControl</sv:value></sv:property></sv:node></sv:node><sv:node sv:name=\"anonymous\"><sv:property sv:name=\"jcr:primaryType\" sv:type=\"Name\"><sv:value>rep:PrincipalAccessControl</sv:value></sv:property></sv:node></sv:node></sv:node></sv:node>";
+
+    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
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        if (!(superuser instanceof SessionImpl)) {
+            throw new NotExecutableException("SessionImpl expected");
+        }
+        sImpl = (SessionImpl) superuser;
+        piImporter = new AccessControlImporter(sImpl, sImpl, false, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
+    }
+
+    private NodeImpl createPolicyNode(NodeImpl target) throws Exception {
+        try {
+            InputStream in = new ByteArrayInputStream(XML_POLICY_ONLY.getBytes("UTF-8"));
+
+            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
+            ImportHandler ih = new ImportHandler(importer, sImpl);
+            new ParsingContentHandler(ih).parse(in);
+
+            return (NodeImpl) target.getNode("test/rep:policy");
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw e;
+        } finally {
+            superuser.refresh(false);
+            if (superuser.nodeExists("/test")) {
+                NodeIterator it = superuser.getRootNode().getNodes("test");
+                while (it.hasNext()) {
+                    it.nextNode().remove();
+                }
+            }
+            superuser.save();
+        }
+    }
+
+    public void testWorkspaceImport() throws Exception {
+        boolean isWorkspaceImport = true;
+        ProtectedNodeImporter protectedImporter = new AccessControlImporter(sImpl, sImpl, isWorkspaceImport, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW);
+
+        NodeImpl n = createPolicyNode((NodeImpl) testRootNode);
+        assertFalse(protectedImporter.start(n));
+    }
+
+    public void testNonProtectedNode() throws Exception {
+        if (!testRootNode.getDefinition().isProtected()) {
+            assertFalse(piImporter.start((NodeImpl) testRootNode));
+        } else {
+            throw new NotExecutableException();
+        }
+    }
+
+    public void testUnsupportedProtectedNode() throws Exception {
+        Node n = testRootNode.addNode(nodeName1);
+        n.addMixin(mixVersionable);
+
+        assertFalse(piImporter.start((NodeImpl) n));
+    }
+
+    /**
+     * Imports a resource-based ACL containing a single entry.
+     *
+     * @throws Exception
+     */
+    public void testImportACL() throws Exception {
+        NodeImpl target = (NodeImpl) testRootNode;
+        try {
+
+            InputStream in = new ByteArrayInputStream(XML_POLICY_TREE.getBytes("UTF-8"));
+            ProtectedItemHandling pi = new ProtectedItemHandling();
+            pi.register(piImporter);
+            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, pi);
+            ImportHandler ih = new ImportHandler(importer, sImpl);
+            new ParsingContentHandler(ih).parse(in);
+
+            assertTrue(target.hasNode("test"));
+            String path = target.getNode("test").getPath();    
+
+            AccessControlManager acMgr = sImpl.getAccessControlManager();
+            AccessControlPolicy[] policies = acMgr.getPolicies(path);
+
+            assertEquals(1, policies.length);
+            assertTrue(policies[0] instanceof JackrabbitAccessControlList);
+
+            AccessControlEntry[] entries = ((JackrabbitAccessControlList) policies[0]).getAccessControlEntries();
+            assertEquals(1, entries.length);
+
+            AccessControlEntry entry = entries[0];
+            assertEquals("everyone", entry.getPrincipal().getName());
+            assertEquals(1, entry.getPrivileges().length);
+            assertEquals(acMgr.privilegeFromName(Privilege.JCR_WRITE), entry.getPrivileges()[0]);
+
+            if(entry instanceof JackrabbitAccessControlEntry) {
+                assertTrue(((JackrabbitAccessControlEntry) entry).isAllow());                
+            }
+
+        } finally {
+            superuser.refresh(false);
+        }
+    }
+
+    /**
+     * Imports a resource-based ACL containing a single entry for a policy that
+     * already exists.
+     *
+     * @throws Exception
+     */
+    public void testImportPolicyExists() throws Exception {
+        NodeImpl target = (NodeImpl) testRootNode;
+        target = (NodeImpl) target.addNode("test", "test:sameNameSibsFalseChildNodeDefinition");
+        AccessControlManager acMgr = sImpl.getAccessControlManager();
+        for (AccessControlPolicyIterator it = acMgr.getApplicablePolicies(target.getPath()); it.hasNext();) {
+            AccessControlPolicy policy = it.nextAccessControlPolicy();
+            if (policy instanceof AccessControlList) {
+                Privilege[] privs = new Privilege[] {acMgr.privilegeFromName(Privilege.JCR_LOCK_MANAGEMENT)};
+                ((AccessControlList) policy).addAccessControlEntry(sImpl.getPrincipalManager().getEveryone(), privs);
+                acMgr.setPolicy(target.getPath(), policy);
+            }
+        }
+
+        try {
+
+            InputStream in = new ByteArrayInputStream(XML_POLICY_TREE_2.getBytes("UTF-8"));
+            ProtectedItemHandling pi = new ProtectedItemHandling();
+            pi.register(piImporter);
+            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW, pi);
+            ImportHandler ih = new ImportHandler(importer, sImpl);
+            new ParsingContentHandler(ih).parse(in);
+
+            AccessControlPolicy[] policies = acMgr.getPolicies(target.getPath());
+
+            assertEquals(1, policies.length);
+            assertTrue(policies[0] instanceof JackrabbitAccessControlList);
+
+            AccessControlEntry[] entries = ((JackrabbitAccessControlList) policies[0]).getAccessControlEntries();
+            assertEquals(1, entries.length);
+
+            AccessControlEntry entry = entries[0];
+            assertEquals("everyone", entry.getPrincipal().getName());
+            List<Privilege> privs = Arrays.asList(entry.getPrivileges());
+            assertEquals(2, privs.size());
+            assertTrue(privs.contains(acMgr.privilegeFromName(Privilege.JCR_WRITE)) &&
+                    privs.contains(acMgr.privilegeFromName(Privilege.JCR_LOCK_MANAGEMENT)));
+
+            assertEquals(acMgr.privilegeFromName(Privilege.JCR_WRITE), entry.getPrivileges()[0]);
+
+            if(entry instanceof JackrabbitAccessControlEntry) {
+                assertTrue(((JackrabbitAccessControlEntry) entry).isAllow());
+            }
+
+        } finally {
+            superuser.refresh(false);
+        }
+    }
+
+    /**
+     * Imports an empty resource-based ACL for a policy that already exists.
+     *
+     * @throws Exception
+     */
+    public void testImportEmptyExistingPolicy() throws Exception {
+        NodeImpl target = (NodeImpl) testRootNode;
+        target = (NodeImpl) target.addNode("test", "test:sameNameSibsFalseChildNodeDefinition");
+        AccessControlManager acMgr = sImpl.getAccessControlManager();
+        for (AccessControlPolicyIterator it = acMgr.getApplicablePolicies(target.getPath()); it.hasNext();) {
+            AccessControlPolicy policy = it.nextAccessControlPolicy();
+            if (policy instanceof AccessControlList) {
+                acMgr.setPolicy(target.getPath(), policy);
+            }
+        }
+
+        try {
+
+            InputStream in = new ByteArrayInputStream(XML_POLICY_ONLY.getBytes("UTF-8"));
+
+            ProtectedItemHandling pi = new ProtectedItemHandling();
+            pi.register(piImporter);
+            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_CREATE_NEW, pi);
+            ImportHandler ih = new ImportHandler(importer, sImpl);
+            new ParsingContentHandler(ih).parse(in);
+
+            AccessControlPolicy[] policies = acMgr.getPolicies(target.getPath());
+
+            assertEquals(1, policies.length);
+            assertTrue(policies[0] instanceof JackrabbitAccessControlList);
+
+            AccessControlEntry[] entries = ((JackrabbitAccessControlList) policies[0]).getAccessControlEntries();
+            assertEquals(0, entries.length);
+
+        } finally {
+            superuser.refresh(false);
+        }
+    }
+
+    /**
+     * Imports a principal-based ACL containing a single entry mist fail with
+     * the default configuration.
+     *
+     * @throws Exception
+     */
+    public void testImportPrincipalBasedACL() throws Exception {
+        NodeImpl target;
+        NodeImpl root = (NodeImpl) sImpl.getRootNode();
+        if (!root.hasNode(AccessControlConstants.N_ACCESSCONTROL)) {
+            target = root.addNode(AccessControlConstants.N_ACCESSCONTROL, AccessControlConstants.NT_REP_ACCESS_CONTROL, null);
+        } else {
+            target = root.getNode(AccessControlConstants.N_ACCESSCONTROL);
+            if (!target.isNodeType(AccessControlConstants.NT_REP_ACCESS_CONTROL)) {
+                target.setPrimaryType(sImpl.getJCRName(AccessControlConstants.NT_REP_ACCESS_CONTROL));
+            }
+        }
+        try {
+
+            InputStream in = new ByteArrayInputStream(XML_AC_TREE.getBytes("UTF-8"));
+
+            ProtectedItemHandling pi = new ProtectedItemHandling();
+            pi.register(piImporter);
+            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, pi);
+            ImportHandler ih = new ImportHandler(importer, sImpl);
+            new ParsingContentHandler(ih).parse(in);
+
+            fail("Default config only allows resource-based ACL -> protected import must fail");
+
+        } catch (SAXException e) {
+            if (e.getException() instanceof ConstraintViolationException) {
+                // success
+            } else {
+                throw e;
+            }
+        } finally {
+            superuser.refresh(false);
+        }
+    }
+
+    /**
+     * With the default importer that isn't able to deal with ACEs the
+     * policy will be created but any ACEs will be ignored.
+     * 
+     * @throws Exception
+     */
+    public void testImportWithDefaultImporter() throws Exception {
+        NodeImpl target = (NodeImpl) testRootNode;
+        try {
+
+            InputStream in = new ByteArrayInputStream(XML_POLICY_TREE.getBytes("UTF-8"));
+
+            SessionImporter importer = new SessionImporter(target, sImpl, ImportUUIDBehavior.IMPORT_UUID_COLLISION_THROW, null);
+            ImportHandler ih = new ImportHandler(importer, sImpl);
+            new ParsingContentHandler(ih).parse(in);
+
+            assertTrue(target.hasNode("test"));
+            String path = target.getNode("test").getPath();
+
+            AccessControlManager acMgr = sImpl.getAccessControlManager();
+            AccessControlPolicy[] policies = acMgr.getPolicies(path);
+
+            assertEquals(1, policies.length);
+            assertTrue(policies[0] instanceof JackrabbitAccessControlList);
+
+            AccessControlEntry[] entries = ((JackrabbitAccessControlList) policies[0]).getAccessControlEntries();
+            assertEquals(0, entries.length);
+
+        } finally {
+            superuser.refresh(false);
+        }
+    }
+}

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/AccessControlImporterTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/AccessControlImporterTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision Rev Url

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/TestAll.java?rev=808923&r1=808922&r2=808923&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/TestAll.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/TestAll.java Fri Aug 28 15:38:38 2009
@@ -34,6 +34,7 @@
     public static Test suite() {
         TestSuite suite = new TestSuite("XML format test cases");
         suite.addTestSuite(DocumentViewTest.class);
+        suite.addTestSuite(AccessControlImporterTest.class);
         return suite;
     }