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);