Author: angela
Date: Mon Nov 25 10:53:33 2013
New Revision: 1545217

URL: http://svn.apache.org/r1545217
Log:
OAK-1218 : NPE in PrincipalManagerTest#testMembers

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/GroupImpl.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java
    jackrabbit/oak/trunk/oak-jcr/pom.xml
    
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/principal/PrincipalManagerTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java?rev=1545217&r1=1545216&r2=1545217&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/identifier/IdentifierManager.java
 Mon Nov 25 10:53:33 2013
@@ -16,19 +16,11 @@
  */
 package org.apache.jackrabbit.oak.plugins.identifier;
 
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Predicates.notNull;
-import static com.google.common.collect.Iterators.emptyIterator;
-import static com.google.common.collect.Iterators.filter;
-import static com.google.common.collect.Iterators.singletonIterator;
-import static com.google.common.collect.Iterators.transform;
-
 import java.text.ParseException;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.UUID;
-
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import javax.jcr.PropertyType;
@@ -54,6 +46,13 @@ import org.apache.jackrabbit.oak.spi.que
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static com.google.common.base.Preconditions.checkArgument;
+import static com.google.common.base.Predicates.notNull;
+import static com.google.common.collect.Iterators.emptyIterator;
+import static com.google.common.collect.Iterators.filter;
+import static com.google.common.collect.Iterators.singletonIterator;
+import static com.google.common.collect.Iterators.transform;
+
 /**
  * TODO document
  */
@@ -172,6 +171,24 @@ public class IdentifierManager {
     }
 
     /**
+     * Returns the path of the tree references by the specified (weak)
+     * reference {@code PropertyState}.
+     *
+     * @param referenceValue A (weak) reference value.
+     * @return The tree with the given {@code identifier} or {@code null} if no
+     *         such tree exists or isn't accessible to the content session.
+     */
+    @CheckForNull
+    public String getPath(PropertyValue referenceValue) {
+        int type = referenceValue.getType().tag();
+        if (type == PropertyType.REFERENCE || type == 
PropertyType.WEAKREFERENCE) {
+            return resolveUUID(referenceValue);
+        } else {
+            throw new IllegalArgumentException("Invalid value type");
+        }
+    }
+
+    /**
      * Searches all reference properties to the specified {@code tree} that 
match
      * the given name and node type constraints.
      *
@@ -274,8 +291,12 @@ public class IdentifierManager {
     }
 
     private String resolveUUID(PropertyState uuid) {
+        return resolveUUID(PropertyValues.create(uuid));
+    }
+
+    private String resolveUUID(PropertyValue uuid) {
         try {
-            Map<String, PropertyValue> bindings = 
Collections.singletonMap("id", PropertyValues.create(uuid));
+            Map<String, PropertyValue> bindings = 
Collections.singletonMap("id", uuid);
             Result result = root.getQueryEngine().executeQuery(
                     "SELECT * FROM [nt:base] WHERE [jcr:uuid] = $id", 
Query.JCR_SQL2,
                     Long.MAX_VALUE, 0, bindings, new NamePathMapper.Default());

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/GroupImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/GroupImpl.java?rev=1545217&r1=1545216&r2=1545217&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/GroupImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/GroupImpl.java
 Mon Nov 25 10:53:33 2013
@@ -191,7 +191,7 @@ class GroupImpl extends AuthorizableImpl
                     }
             );
         } else {
-            Iterator oakPaths = getMembershipProvider().getMembers(getTree(), 
AuthorizableType.AUTHORIZABLE, includeInherited);
+            Iterator<String> oakPaths = 
getMembershipProvider().getMembers(getTree(), AuthorizableType.AUTHORIZABLE, 
includeInherited);
             if (oakPaths.hasNext()) {
                 AuthorizableIterator iterator = 
AuthorizableIterator.create(oakPaths, userMgr, AuthorizableType.AUTHORIZABLE);
                 return new RangeIteratorAdapter(iterator, iterator.getSize());

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java?rev=1545217&r1=1545216&r2=1545217&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/MembershipProvider.java
 Mon Nov 25 10:53:33 2013
@@ -28,7 +28,7 @@ import org.apache.jackrabbit.oak.api.Pro
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
+import org.apache.jackrabbit.oak.spi.query.PropertyValues;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import org.apache.jackrabbit.oak.spi.security.user.AuthorizableType;
 import org.apache.jackrabbit.oak.spi.security.user.util.UserUtil;
@@ -263,10 +263,10 @@ class MembershipProvider extends Authori
                         break;
                     } else {
                         String value = references.next();
-                        next = 
identifierManager.getPath(PropertyStates.createProperty("", value, 
Type.WEAKREFERENCE));
+                        next = 
identifierManager.getPath(PropertyValues.newWeakReference(value));
 
                         // filter by authorizable type, and/or get inherited 
members
-                        if (includeInherited || authorizableType != 
AuthorizableType.AUTHORIZABLE) {
+                        if (next != null && (includeInherited || 
authorizableType != AuthorizableType.AUTHORIZABLE)) {
                             Tree auth = getByPath(next);
                             AuthorizableType type = UserUtil.getType(auth);
 

Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1545217&r1=1545216&r2=1545217&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Mon Nov 25 10:53:33 2013
@@ -170,8 +170,6 @@
 
       <!-- Node Types -->
       
org.apache.jackrabbit.oak.jcr.nodetype.MixinTest#testRemoveAddMixVersionable1   
               <!-- OAK-1118 -->
-
-      
org.apache.jackrabbit.oak.jcr.security.principal.PrincipalManagerTest#testMembers
              <!-- OAK-1218 -->
     </known.issues>
   </properties>
 

Modified: 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/principal/PrincipalManagerTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/principal/PrincipalManagerTest.java?rev=1545217&r1=1545216&r2=1545217&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/principal/PrincipalManagerTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/principal/PrincipalManagerTest.java
 Mon Nov 25 10:53:33 2013
@@ -28,6 +28,7 @@ import javax.jcr.SimpleCredentials;
 import org.apache.jackrabbit.api.JackrabbitSession;
 import org.apache.jackrabbit.api.security.principal.PrincipalIterator;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
+import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
 import org.apache.jackrabbit.test.AbstractJCRTest;
 import org.apache.jackrabbit.test.NotExecutableException;
@@ -175,7 +176,6 @@ public class PrincipalManagerTest extend
     }
 
     @Test
-    // FIXME See OAK-1218
     public void testMembers() {
         PrincipalIterator it = 
principalMgr.getPrincipals(PrincipalManager.SEARCH_TYPE_ALL);
         while (it.hasNext()) {
@@ -194,6 +194,34 @@ public class PrincipalManagerTest extend
     }
 
     @Test
+    public void testMembers2() throws Exception {
+        Authorizable gr = null;
+        try {
+            gr = ((JackrabbitSession) 
superuser).getUserManager().createGroup(getClass().getName());
+            superuser.save();
+            PrincipalIterator it = 
principalMgr.getPrincipals(PrincipalManager.SEARCH_TYPE_ALL);
+            while (it.hasNext()) {
+                Principal p = it.nextPrincipal();
+                if (p.equals(principalMgr.getEveryone())) {
+                    continue;
+                }
+                if (isGroup(p)) {
+                    Enumeration<? extends Principal> en = 
((java.security.acl.Group) p).members();
+                    while (en.hasMoreElements()) {
+                        Principal memb = en.nextElement();
+                        assertTrue(principalMgr.hasPrincipal(memb.getName()));
+                    }
+                }
+            }
+        } finally {
+            if (gr != null) {
+                gr.remove();
+                superuser.save();
+            }
+        }
+    }
+
+    @Test
     public void testGroupMembership() {
         testMembership(PrincipalManager.SEARCH_TYPE_NOT_GROUP);
         testMembership(PrincipalManager.SEARCH_TYPE_GROUP);


Reply via email to