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 2008/05/15 13:49:36 UTC

svn commit: r656595 - in /jackrabbit/trunk/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/security/user/ test/java/org/apache/jackrabbit/core/security/user/

Author: angela
Date: Thu May 15 04:49:36 2008
New Revision: 656595

URL: http://svn.apache.org/viewvc?rev=656595&view=rev
Log:
JCR-1588: JSR 283 Access Control (work in progress)

- fixing TraversingNodeResolver and adding tests

Added:
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/IndexNodeResolverTest.java   (with props)
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/NodeResolverTest.java   (with props)
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolverTest.java   (with props)
Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolver.java
    jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TestAll.java

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolver.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolver.java?rev=656595&r1=656594&r2=656595&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolver.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolver.java Thu May 15 04:49:36 2008
@@ -19,6 +19,7 @@
 
 import org.apache.jackrabbit.commons.iterator.NodeIteratorAdapter;
 import org.apache.jackrabbit.core.NodeImpl;
+import org.apache.jackrabbit.core.SessionImpl;
 import org.apache.jackrabbit.spi.Name;
 import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver;
 import org.slf4j.Logger;
@@ -29,6 +30,8 @@
 import javax.jcr.PathNotFoundException;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.jcr.Property;
+import javax.jcr.Value;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -58,25 +61,42 @@
      * @inheritDoc
      */
     public Node findNode(Name nodeName, Name ntName) throws RepositoryException {
-        Node root = (Node) getSession().getItem(getSearchRoot(ntName));
-        return collectNode(nodeName, ntName, root.getNodes());
+        String sr = getSearchRoot(ntName);
+        // TODO: remove cast once 283 is released
+        SessionImpl sImpl = (SessionImpl) getSession();
+        if (sImpl.nodeExists(sr)) {
+            try {
+                Node root = sImpl.getNode(sr);
+                return collectNode(nodeName, ntName, root.getNodes());
+            } catch (PathNotFoundException e) {
+                // should not get here
+                log.warn("Error while retrieving node " + sr);
+            }
+        } // else: searchRoot does not exist yet -> omit the search
+        return null;
     }
 
     /**
      * @inheritDoc
      */
     public Node findNode(Name propertyName, String value, Name ntName) throws RepositoryException {
-        try {
-            Node root = (Node) getSession().getItem(getSearchRoot(ntName));
-            NodeIterator nodes = collectNodes(value, Collections.singleton(propertyName), ntName,
-                    root.getNodes(), true, 1);
-            if (nodes.hasNext()) {
-                return nodes.nextNode();
+        String sr = getSearchRoot(ntName);
+        // TODO: remove cast once 283 is released
+        SessionImpl sImpl = (SessionImpl) getSession();
+        if (sImpl.nodeExists(sr)) {
+            try {
+                Node root = sImpl.getNode(sr);
+                NodeIterator nodes = collectNodes(value,
+                        Collections.singleton(propertyName), ntName,
+                        root.getNodes(), true, 1);
+                if (nodes.hasNext()) {
+                    return nodes.nextNode();
+                }
+            } catch (PathNotFoundException e) {
+                // should not get here
+                log.warn("Error while retrieving node " + sr);
             }
-        } catch (PathNotFoundException e) {
-            log.warn("Error while searching for node having a property " + propertyName + " with value " + value);
-        }
-
+        } // else: searchRoot does not exist yet -> omit the search
         return null;
     }
 
@@ -85,29 +105,44 @@
      */
     public NodeIterator findNodes(Set propertyNames, String value, Name ntName,
                                   boolean exact, long maxSize) throws RepositoryException {
-
-        NodeImpl root = (NodeImpl) getSession().getItem(getSearchRoot(ntName));
-        return collectNodes(value, propertyNames, ntName, root.getNodes(), exact, maxSize);
+        String sr = getSearchRoot(ntName);
+        // TODO: remove cast once 283 is released
+        SessionImpl sImpl = (SessionImpl) getSession();
+        if (sImpl.nodeExists(sr)) {
+            try {
+                Node root = sImpl.getNode(sr);
+                return collectNodes(value, propertyNames, ntName, root.getNodes(), exact, maxSize);
+            } catch (PathNotFoundException e) {
+                // should not get here
+                log.warn("Error while retrieving node " + sr);
+            }
+        } // else: searchRoot does not exist yet -> omit the search
+        return NodeIteratorAdapter.EMPTY;
     }
 
     //--------------------------------------------------------------------------
-
+    /**
+     *
+     * @param nodeName
+     * @param ntName
+     * @param nodes
+     * @return The first matching node or <code>null</code>.
+     */
     private Node collectNode(Name nodeName, Name ntName, NodeIterator nodes) {
-        while (nodes.hasNext()) {
+        Node match = null;
+        while (match == null && nodes.hasNext()) {
             NodeImpl node = (NodeImpl) nodes.nextNode();
             try {
                 if (node.isNodeType(ntName) && nodeName.equals(node.getQName())) {
-                    return node;
-                }
-                if (node.hasNodes()) {
-                    return collectNode(nodeName, ntName, node.getNodes());
+                    match = node;
+                } else if (node.hasNodes()) {
+                    match = collectNode(nodeName, ntName, node.getNodes());
                 }
             } catch (RepositoryException e) {
                 log.warn("Internal error while accessing node", e);
             }
         }
-        log.debug("Could not find a node matching name '" + nodeName + " and nodetype " + ntName);
-        return null;
+        return match;
     }
 
     /**
@@ -125,9 +160,9 @@
     private NodeIterator collectNodes(String value, Set props, Name ntName,
                                       NodeIterator nodes, boolean exact,
                                       long maxSize) {
-        Set matches = new HashSet();
-        collectNodes(value, props, ntName, nodes, matches, exact, maxSize);
-        return new NodeIteratorAdapter(matches);
+        Set matchSet = new HashSet();
+        collectNodes(value, props, ntName, nodes, matchSet, exact, maxSize);
+        return new NodeIteratorAdapter(matchSet);
     }
 
     /**
@@ -138,23 +173,23 @@
      * @param propertyNames property to be searched, or null if {@link javax.jcr.Item#getName()}
      * @param nodeTypeName  name of nodetypes to search
      * @param itr           range of nodes and descendants to be searched
-     * @param matches       Set of found matches to append results
+     * @param matchSet      Set of found matches to append results
      * @param exact         if set to true the value has to match exact
      * @param maxSize
      */
     private void collectNodes(String value, Set propertyNames,
                               Name nodeTypeName, NodeIterator itr,
-                              Set matches, boolean exact, long maxSize) {
+                              Set matchSet, boolean exact, long maxSize) {
         while (itr.hasNext()) {
             NodeImpl node = (NodeImpl) itr.nextNode();
             try {
                 if (matches(node, nodeTypeName, propertyNames, value, exact)) {
-                    matches.add(node);
+                    matchSet.add(node);
                     maxSize--;
                 }
                 if (node.hasNodes() && maxSize > 0) {
                     collectNodes(value, propertyNames, nodeTypeName,
-                            node.getNodes(), matches, exact, maxSize);
+                            node.getNodes(), matchSet, exact, maxSize);
                 }
             } catch (RepositoryException e) {
                 log.warn("Internal error while accessing node", e);
@@ -172,7 +207,7 @@
      * @return
      * @throws RepositoryException
      */
-    private boolean matches(NodeImpl node, Name nodeTypeName,
+    private static boolean matches(NodeImpl node, Name nodeTypeName,
                             Collection propertyNames, String value,
                             boolean exact) throws RepositoryException {
 
@@ -187,10 +222,15 @@
                     while (!match && pItr.hasNext()) {
                         Name propertyName = (Name) pItr.next();
                         if (node.hasProperty(propertyName)) {
-                            String toMatch = node.getProperty(propertyName).getString();
-                            match = (exact) ?
-                                    toMatch.equals(value) :
-                                    toMatch.matches(".*"+value+".*");
+                            Property prop = node.getProperty(propertyName);
+                            if (prop.getDefinition().isMultiple()) {
+                                Value[] values = prop.getValues();
+                                for (int i = 0; i < values.length && !match; i++) {
+                                    match = matches(value, values[i].getString(), exact);
+                                }
+                            } else {
+                                match = matches(value, prop.getString(), exact);
+                            }
                         }
                     }
                 }
@@ -201,4 +241,8 @@
         }
         return match;
     }
+
+    private static boolean matches(String value, String toMatch, boolean exact) {
+        return (exact) ? toMatch.equals(value) : toMatch.matches(".*"+value+".*");
+    }
 }

Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/IndexNodeResolverTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/IndexNodeResolverTest.java?rev=656595&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/IndexNodeResolverTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/IndexNodeResolverTest.java Thu May 15 04:49:36 2008
@@ -0,0 +1,38 @@
+/*
+ * 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.security.user;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.jackrabbit.test.NotExecutableException;
+import org.apache.jackrabbit.core.SessionImpl;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+/** <code>IndexNodeResolver</code>... */
+public class IndexNodeResolverTest extends NodeResolverTest {
+
+    private static Logger log = LoggerFactory.getLogger(IndexNodeResolver.class);
+
+    protected NodeResolver createNodeResolver(Session session) throws RepositoryException, NotExecutableException {
+        if (!(session instanceof SessionImpl)) {
+            throw new NotExecutableException();
+        }
+        return new IndexNodeResolver(session, (SessionImpl) session);
+    }
+}
\ No newline at end of file

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/IndexNodeResolverTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/IndexNodeResolverTest.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url

Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/NodeResolverTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/NodeResolverTest.java?rev=656595&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/NodeResolverTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/NodeResolverTest.java Thu May 15 04:49:36 2008
@@ -0,0 +1,239 @@
+/*
+ * 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.security.user;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.jackrabbit.test.AbstractJCRTest;
+import org.apache.jackrabbit.test.NotExecutableException;
+import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.spi.Name;
+import org.apache.jackrabbit.core.SessionImpl;
+import org.apache.jackrabbit.api.JackrabbitSession;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.NodeIterator;
+import javax.jcr.Node;
+import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.Session;
+import javax.jcr.Value;
+import java.util.Iterator;
+
+/** <code>NodeResolverTest</code>... */
+public abstract class NodeResolverTest extends AbstractJCRTest {
+
+    private static Logger log = LoggerFactory.getLogger(NodeResolverTest.class);
+
+    NodeResolver nodeResolver;
+
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        nodeResolver = createNodeResolver(superuser);
+    }
+
+    private static UserImpl getCurrentUser(Session session) throws NotExecutableException, RepositoryException {
+        if (!(session instanceof JackrabbitSession)) {
+            throw new NotExecutableException();
+        }
+        try {
+            UserManagerImpl uMgr = (UserManagerImpl) ((JackrabbitSession) session).getUserManager();
+            return uMgr.getCurrentUser();
+        } catch (UnsupportedRepositoryOperationException e) {
+            throw new NotExecutableException(e.getMessage());
+        } catch (UnsupportedOperationException e) {
+            throw new NotExecutableException(e.getMessage());
+        }
+    }
+
+    protected abstract NodeResolver createNodeResolver(Session session) throws RepositoryException, NotExecutableException;
+
+    public void testFindNode() throws NotExecutableException, RepositoryException {
+        UserImpl currentUser = getCurrentUser(superuser);
+
+        NodeResolver nr = createNodeResolver(currentUser.getNode().getSession());
+
+        Node result = nr.findNode(currentUser.getNode().getQName(), UserConstants.NT_REP_USER);
+        assertNotNull(result);
+        assertTrue(currentUser.getNode().isSame(result));
+
+        result = nr.findNode(currentUser.getNode().getQName(), UserConstants.NT_REP_AUTHORIZABLE);
+        assertNotNull(result);
+        assertTrue(currentUser.getNode().isSame(result));
+
+        result = nr.findNode(currentUser.getNode().getQName(), UserConstants.NT_REP_GROUP);
+        assertNull(result);
+
+        Iterator it = currentUser.memberOf();
+        while (it.hasNext()) {
+            GroupImpl gr = (GroupImpl) it.next();
+
+            result = nr.findNode(gr.getNode().getQName(), UserConstants.NT_REP_GROUP);
+            assertNotNull(result);
+            assertTrue(gr.getNode().isSame(result));
+
+            result = nr.findNode(gr.getNode().getQName(), UserConstants.NT_REP_AUTHORIZABLE);
+            assertNotNull(result);
+            assertTrue(gr.getNode().isSame(result));
+
+            result = nr.findNode(gr.getNode().getQName(), UserConstants.NT_REP_USER);
+            assertNull(result);
+        }
+    }
+
+    public void testFindNodeByPrincipalName() throws NotExecutableException, RepositoryException {
+        UserImpl currentUser = getCurrentUser(superuser);
+
+        NodeResolver nr = createNodeResolver(currentUser.getNode().getSession());
+
+        Node result = nr.findNode(UserConstants.P_PRINCIPAL_NAME, currentUser.getPrincipal().getName(), UserConstants.NT_REP_USER);
+        assertNotNull(result);
+        assertTrue(currentUser.getNode().isSame(result));
+
+        Iterator it = currentUser.memberOf();
+        while (it.hasNext()) {
+            GroupImpl gr = (GroupImpl) it.next();
+
+            result = nr.findNode(UserConstants.P_PRINCIPAL_NAME, gr.getPrincipal().getName(), UserConstants.NT_REP_GROUP);
+            assertNotNull(result);
+            assertTrue(gr.getNode().isSame(result));
+
+            result = nr.findNode(UserConstants.P_PRINCIPAL_NAME, gr.getPrincipal().getName(), UserConstants.NT_REP_AUTHORIZABLE_FOLDER);
+            assertNull(result);
+        }
+    }
+
+    public void testFindNodeByUserID() throws NotExecutableException, RepositoryException {
+        UserImpl currentUser = getCurrentUser(superuser);
+
+        NodeResolver nr = createNodeResolver(currentUser.getNode().getSession());
+
+        Node result = nr.findNode(UserConstants.P_USERID, currentUser.getID(), UserConstants.NT_REP_USER);
+        assertNotNull(result);
+        assertTrue(currentUser.getNode().isSame(result));
+    }
+
+    public void testFindNodeByMultiValueProp() throws NotExecutableException, RepositoryException {
+        UserImpl currentUser = getCurrentUser(superuser);
+
+        Value[] vs = new Value[] {
+                superuser.getValueFactory().createValue("blub"),
+                superuser.getValueFactory().createValue("blib")
+        };
+        currentUser.setProperty(propertyName1, vs);
+
+        NodeResolver nr = createNodeResolver(currentUser.getNode().getSession());
+
+        Node result = nr.findNode(((SessionImpl) superuser).getQName(propertyName1),
+                "blib", UserConstants.NT_REP_USER);
+        assertNotNull(result);
+        assertTrue(currentUser.getNode().isSame(result));
+
+        currentUser.removeProperty(propertyName1);
+    }
+
+    public void testFindNodeWithNonExistingSearchRoot() throws NotExecutableException, RepositoryException {
+        String searchRoot = nodeResolver.getSearchRoot(UserConstants.NT_REP_AUTHORIZABLE_FOLDER);
+        SessionImpl sImpl = (SessionImpl) superuser;
+
+        if (sImpl.nodeExists(searchRoot)) {
+            throw new NotExecutableException();
+        }
+        Node result = nodeResolver.findNode(sImpl.getQName(UserConstants.GROUP_ADMIN_GROUP_NAME), UserConstants.NT_REP_AUTHORIZABLE);
+        assertNull(result);
+    }
+
+    public void testFindNodes() throws NotExecutableException, RepositoryException {
+        Value[] vs = new Value[] {
+                superuser.getValueFactory().createValue("blub"),
+                superuser.getValueFactory().createValue("blib")
+        };
+
+        UserImpl currentUser = getCurrentUser(superuser);
+        currentUser.setProperty(propertyName1, vs);
+
+        Iterator it = currentUser.memberOf();
+        while (it.hasNext()) {
+            GroupImpl gr = (GroupImpl) it.next();
+            gr.setProperty(propertyName1, vs);
+        }
+
+        Name propName = ((SessionImpl) superuser).getQName(propertyName1);
+
+        try {
+            NodeResolver nr = createNodeResolver(currentUser.getNode().getSession());
+
+            NodeIterator result = nr.findNodes(propName, "blub", UserConstants.NT_REP_USER, false);
+            assertTrue(result.getSize() == 1);
+            assertTrue(result.nextNode().isSame(currentUser.getNode()));
+
+            result = nr.findNodes(propName, "blub", UserConstants.NT_REP_AUTHORIZABLE, false);
+            assertTrue(result.getSize() > 1);
+
+        } finally {
+            currentUser.removeProperty(propertyName1);
+            it = currentUser.memberOf();
+            while (it.hasNext()) {
+                GroupImpl gr = (GroupImpl) it.next();
+                gr.removeProperty(propertyName1);
+            }
+        }
+    }
+
+    public void testFindNodesWithNonExistingSearchRoot() throws NotExecutableException, RepositoryException {
+        String searchRoot = nodeResolver.getSearchRoot(UserConstants.NT_REP_AUTHORIZABLE);
+        if (((SessionImpl) superuser).nodeExists(searchRoot)) {
+            throw new NotExecutableException();
+        }
+
+        NodeIterator result = nodeResolver.findNodes(UserConstants.P_REFEREES, "anyValue", UserConstants.NT_REP_AUTHORIZABLE, true);
+        assertNotNull(result);
+        assertFalse(result.hasNext());
+    }
+
+    public void testGetSearchRoot() {
+        String searchRoot = nodeResolver.getSearchRoot(UserConstants.NT_REP_AUTHORIZABLE);
+        assertNotNull(searchRoot);
+        assertEquals(UserConstants.AUTHORIZABLES_PATH, searchRoot);
+
+        searchRoot = nodeResolver.getSearchRoot(UserConstants.NT_REP_GROUP);
+        assertNotNull(searchRoot);
+        assertEquals(UserConstants.GROUPS_PATH, searchRoot);
+
+        searchRoot = nodeResolver.getSearchRoot(UserConstants.NT_REP_USER);
+        assertNotNull(searchRoot);
+        assertEquals(UserConstants.USERS_PATH, searchRoot);
+    }
+
+    public void testGetSearchRootDefault() {
+        String searchRoot = nodeResolver.getSearchRoot(UserConstants.NT_REP_AUTHORIZABLE_FOLDER);
+        assertNotNull(searchRoot);
+        assertEquals(UserConstants.AUTHORIZABLES_PATH, searchRoot);
+
+        searchRoot = nodeResolver.getSearchRoot(NameConstants.NT_UNSTRUCTURED);
+        assertNotNull(searchRoot);
+        assertEquals(UserConstants.AUTHORIZABLES_PATH, searchRoot);
+    }
+
+    public void testGetNamePathResolver() {
+        assertNotNull(nodeResolver.getNamePathResolver());
+    }
+
+    public void testGetSession() {
+        assertNotNull(nodeResolver.getSession());
+    }
+}
\ No newline at end of file

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/NodeResolverTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/NodeResolverTest.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url

Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TestAll.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TestAll.java?rev=656595&r1=656594&r2=656595&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TestAll.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TestAll.java Thu May 15 04:49:36 2008
@@ -39,6 +39,9 @@
         suite.addTestSuite(NotUserAdministratorTest.class);
         suite.addTestSuite(GroupAdministratorTest.class);
 
+        suite.addTestSuite(IndexNodeResolverTest.class);
+        suite.addTestSuite(TraversingNodeResolverTest.class);
+
         return suite;
     }
 }

Added: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolverTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolverTest.java?rev=656595&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolverTest.java (added)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolverTest.java Thu May 15 04:49:36 2008
@@ -0,0 +1,38 @@
+/*
+ * 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.security.user;
+
+import org.apache.jackrabbit.core.SessionImpl;
+import org.apache.jackrabbit.test.NotExecutableException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+/** <code>TraversingNodeResolverTest</code>... */
+public class TraversingNodeResolverTest extends NodeResolverTest {
+
+    private static Logger log = LoggerFactory.getLogger(TraversingNodeResolverTest.class);
+
+    protected NodeResolver createNodeResolver(Session session) throws RepositoryException, NotExecutableException {
+        if (!(session instanceof SessionImpl)) {
+            throw new NotExecutableException();
+        }
+        return new TraversingNodeResolver(session, (SessionImpl) session);
+    }
+}
\ No newline at end of file

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolverTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TraversingNodeResolverTest.java
------------------------------------------------------------------------------
    svn:keywords = author date id revision url