You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by st...@apache.org on 2018/03/19 20:08:57 UTC

svn commit: r1827239 [2/2] - in /jackrabbit/oak/trunk: oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/...

Added: jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipals.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipals.java?rev=1827239&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipals.java (added)
+++ jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipals.java Mon Mar 19 20:08:56 2018
@@ -0,0 +1,112 @@
+/*
+ * 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.oak.spi.security.principal;
+
+import java.security.Principal;
+import java.security.acl.Group;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.annotation.Nonnull;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
+
+import com.google.common.base.Function;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterators;
+
+/**
+ * Helper class to deal with the migration between the 2 types of groups
+ *
+ */
+public final class GroupPrincipals {
+
+    private static final GroupTransformer TRANSFORMER = new GroupTransformer();
+
+    private GroupPrincipals() {
+    }
+
+    /**
+     * Checks if the provided principal is a group.
+     *
+     * @param principal
+     *            to be checked.
+     *
+     * @return true if the principal is of type group.
+     */
+    public static boolean isGroup(@Nonnull Principal principal) {
+        return principal instanceof Group || principal instanceof GroupPrincipal;
+    }
+
+    /**
+     * Returns an enumeration of the members in the group.
+     * @param principal the principal whose membership is listed.
+     * @return an enumeration of the group members.
+     */
+    public static Enumeration<? extends Principal> members(@Nonnull Principal principal) {
+        if (principal instanceof Group) {
+            return ((Group) principal).members();
+        }
+        if (principal instanceof GroupPrincipal) {
+            return ((GroupPrincipal) principal).members();
+        }
+        return Collections.emptyEnumeration();
+    }
+
+    /**
+     * Returns true if the passed principal is a member of the group.
+     * @param principal the principal whose members are being checked.
+     * @param member the principal whose membership is to be checked.
+     * @return true if the principal is a member of this group, false otherwise.
+     */
+    public static boolean isMember(@Nonnull Principal principal, @Nonnull Principal member) {
+        if (principal instanceof Group) {
+            return ((Group) principal).isMember(member);
+        }
+        if (principal instanceof GroupPrincipal) {
+            return ((GroupPrincipal) principal).isMember(member);
+        }
+        return false;
+    }
+
+    public static Set<Principal> transform(Set<Group> groups) {
+        ImmutableSet.Builder<Principal> g2 = ImmutableSet.builder();
+        for (Group g : groups) {
+            g2.add(new GroupPrincipalWrapper(g));
+        }
+        return g2.build();
+    }
+
+    public static Enumeration<? extends Principal> transform(Enumeration<? extends Principal> members) {
+        Iterator<Principal> m2 = Iterators.transform(Iterators.forEnumeration(members), TRANSFORMER);
+        return Iterators.asEnumeration(m2);
+    }
+
+    private static class GroupTransformer implements Function<Principal, Principal> {
+
+        @Override
+        public Principal apply(Principal input) {
+            if (input instanceof Group) {
+                return new GroupPrincipalWrapper((Group) input);
+            } else {
+                return input;
+            }
+        }
+    }
+}

Propchange: jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipals.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalManagerImpl.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalManagerImpl.java Mon Mar 19 20:08:56 2018
@@ -68,7 +68,7 @@ public class PrincipalManagerImpl implem
     @Override
     @Nonnull
     public PrincipalIterator getGroupMembership(@Nonnull Principal principal) {
-        return new PrincipalIteratorAdapter(principalProvider.getGroupMembership(principal));
+        return new PrincipalIteratorAdapter(principalProvider.getMembershipPrincipals(principal));
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalProvider.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalProvider.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalProvider.java Mon Mar 19 20:08:56 2018
@@ -18,12 +18,15 @@ package org.apache.jackrabbit.oak.spi.se
 
 import java.security.Principal;
 import java.security.acl.Group;
+import java.util.Collections;
 import java.util.Iterator;
 import java.util.Set;
 import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.osgi.annotation.versioning.ProviderType;
+
 /**
  * The {@code PrincipalProvider} defines methods to provide access to sources
  * of {@link Principal}s. This allows the security framework share any external
@@ -37,6 +40,7 @@ import javax.annotation.Nullable;
  * different sources. See also {@link CompositePrincipalProvider} for a
  * mechanism to combine principals of different providers.
  */
+@ProviderType
 public interface PrincipalProvider {
 
     /**
@@ -59,12 +63,34 @@ public interface PrincipalProvider {
      * If Principal is member of Group A, and Group A is member of
      * Group B, this method will return Group A and Group B.
      *
+     * @deprecated use {@link #getMembershipPrincipals(Principal)}
      * @param principal the principal to return it's membership from.
      * @return an iterator returning all groups the given principal is member of.
      * @see java.security.acl.Group#isMember(java.security.Principal)
      */
     @Nonnull
-    Set<Group> getGroupMembership(@Nonnull Principal principal);
+    default Set<Group> getGroupMembership(@Nonnull Principal principal) {
+        return Collections.emptySet();
+    }
+
+    /**
+     * Returns an iterator over all group principals for which the given
+     * principal is either direct or indirect member of. Thus for any principal
+     * returned in the iterator {@link GroupPrincipal#isMember(Principal)}
+     * must return {@code true}.
+     * <p>
+     * Example:<br>
+     * If Principal is member of Group A, and Group A is member of
+     * Group B, this method will return Group A and Group B.
+     *
+     * @param principal the principal to return it's membership from.
+     * @return an iterator returning all groups the given principal is member of.
+     * @see GroupPrincipal#isMember(java.security.Principal)
+     */
+    @Nonnull
+    default Set<Principal> getMembershipPrincipals(@Nonnull Principal principal) {
+        return GroupPrincipals.transform(getGroupMembership(principal));
+    }
 
     /**
      * Tries to resolve the specified {@code userID} to a valid principal and

Modified: jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/package-info.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/package-info.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/package-info.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/package-info.java Mon Mar 19 20:08:56 2018
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@Version("1.5.0")
+@Version("1.6.0")
 package org.apache.jackrabbit.oak.spi.security.principal;
 
 import org.osgi.annotation.versioning.Version;

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModuleTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModuleTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModuleTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/AbstractLoginModuleTest.java Mon Mar 19 20:08:56 2018
@@ -457,7 +457,7 @@ public class AbstractLoginModuleTest {
         Principal principal = principalProvider.findPrincipals(PrincipalManager.SEARCH_TYPE_NOT_GROUP).next();
         Set<Principal> expected = new HashSet<>();
         expected.add(principal);
-        expected.addAll(principalProvider.getGroupMembership(principal));
+        expected.addAll(principalProvider.getMembershipPrincipals(principal));
 
         Set<? extends Principal> principals = loginModule.getPrincipals(principal);
 

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java Mon Mar 19 20:08:56 2018
@@ -18,8 +18,6 @@ package org.apache.jackrabbit.oak.spi.se
 
 import java.lang.reflect.Field;
 import java.security.Principal;
-import java.security.acl.Group;
-import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
@@ -28,6 +26,7 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
 import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterators;
 
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.oak.api.Root;
@@ -151,37 +150,7 @@ public class CompositePrincipalConfigura
         @Nonnull
         @Override
         public PrincipalProvider getPrincipalProvider(Root root, NamePathMapper namePathMapper) {
-            return new PrincipalProvider() {
-                @CheckForNull
-                @Override
-                public Principal getPrincipal(@Nonnull String principalName) {
-                    return null;
-                }
-
-                @Nonnull
-                @Override
-                public Set<Group> getGroupMembership(@Nonnull Principal principal) {
-                    return ImmutableSet.of();
-                }
-
-                @Nonnull
-                @Override
-                public Set<? extends Principal> getPrincipals(@Nonnull String userID) {
-                    return ImmutableSet.of();
-                }
-
-                @Nonnull
-                @Override
-                public Iterator<? extends Principal> findPrincipals(@Nullable String nameHint, int searchType) {
-                    return Collections.emptyIterator();
-                }
-
-                @Nonnull
-                @Override
-                public Iterator<? extends Principal> findPrincipals(int searchType) {
-                    return Collections.emptyIterator();
-                }
-            };
+            return new TestPrincipalProvider();
         }
 
         @Nonnull
@@ -191,6 +160,39 @@ public class CompositePrincipalConfigura
         }
     }
 
+    private static class TestPrincipalProvider implements PrincipalProvider {
+
+        @CheckForNull
+        @Override
+        public Principal getPrincipal(@Nonnull String principalName) {
+            return null;
+        }
+
+        @Nonnull
+        @Override
+        public Set<Principal> getMembershipPrincipals(@Nonnull Principal principal) {
+            return ImmutableSet.of();
+        }
+
+        @Nonnull
+        @Override
+        public Set<? extends Principal> getPrincipals(@Nonnull String userID) {
+            return ImmutableSet.of();
+        }
+
+        @Nonnull
+        @Override
+        public Iterator<? extends Principal> findPrincipals(@Nullable String nameHint, int searchType) {
+            return Iterators.emptyIterator();
+        }
+
+        @Nonnull
+        @Override
+        public Iterator<? extends Principal> findPrincipals(int searchType) {
+            return Iterators.emptyIterator();
+        }
+    }
+
     private final class TestEmptyConfiguration extends ConfigurationBase implements PrincipalConfiguration {
 
         @Nonnull

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProviderTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProviderTest.java Mon Mar 19 20:08:56 2018
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.oak.spi.security.principal;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Iterator;
 import javax.annotation.Nonnull;
 
@@ -25,6 +24,8 @@ import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.junit.Test;
 
@@ -82,14 +83,14 @@ public class CompositePrincipalProviderT
     @Test
     public void getGroupMembership() {
         for (Principal principal : testPrincipals()) {
-            boolean atleastEveryone = cpp.getGroupMembership(principal).contains(EveryonePrincipal.getInstance());
+            boolean atleastEveryone = cpp.getMembershipPrincipals(principal).contains(EveryonePrincipal.getInstance());
             assertTrue("All principals (except everyone) must be member of the everyone group. Violation: "+principal.getName(), atleastEveryone);
         }
     }
 
     @Test
     public void getGroupMembershipUnknown() {
-        assertTrue(cpp.getGroupMembership(TestPrincipalProvider.UNKNOWN).isEmpty());
+        assertTrue(cpp.getMembershipPrincipals(TestPrincipalProvider.UNKNOWN).isEmpty());
     }
 
     @Test
@@ -109,7 +110,7 @@ public class CompositePrincipalProviderT
         Iterable<? extends Principal> expected = Iterables.concat(ImmutableSet.of(EveryonePrincipal.getInstance()), Iterables.filter(testPrincipals(), new Predicate<Principal>() {
             @Override
             public boolean apply(Principal input) {
-                return input instanceof Group;
+                return input instanceof GroupPrincipal;
             }
         }));
 
@@ -122,7 +123,7 @@ public class CompositePrincipalProviderT
         Iterable<? extends Principal> expected = Iterables.filter(testPrincipals(), new Predicate<Principal>() {
             @Override
             public boolean apply(Principal input) {
-                return !(input instanceof Group);
+                return !(input instanceof GroupPrincipal);
             }
         });
 

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProviderTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProviderTest.java Mon Mar 19 20:08:56 2018
@@ -39,9 +39,9 @@ public class EmptyPrincipalProviderTest
 
     @Test
     public void testGetGroupMembership() {
-        assertTrue(principalProvider.getGroupMembership(EveryonePrincipal.getInstance()).isEmpty());
-        assertTrue(principalProvider.getGroupMembership(new PrincipalImpl(EveryonePrincipal.NAME)).isEmpty());
-        assertTrue(principalProvider.getGroupMembership(testPrincipal).isEmpty());
+        assertTrue(principalProvider.getMembershipPrincipals(EveryonePrincipal.getInstance()).isEmpty());
+        assertTrue(principalProvider.getMembershipPrincipals(new PrincipalImpl(EveryonePrincipal.NAME)).isEmpty());
+        assertTrue(principalProvider.getMembershipPrincipals(testPrincipal).isEmpty());
     }
 
     @Test

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipalTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipalTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipalTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipalTest.java Mon Mar 19 20:08:56 2018
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.spi.se
 import java.security.Principal;
 import java.util.Enumeration;
 
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.JackrabbitPrincipal;
 import org.junit.Test;
 
@@ -48,21 +49,6 @@ public class EveryonePrincipalTest  {
         assertFalse(EveryonePrincipal.getInstance().isMember(everyone));
     }
 
-    @Test
-    public void testAddMember() {
-        assertFalse(EveryonePrincipal.getInstance().addMember(new PrincipalImpl("test")));
-    }
-
-    @Test
-    public void testAddMemberSelf() {
-        assertFalse(EveryonePrincipal.getInstance().addMember(everyone));
-    }
-
-    @Test(expected = UnsupportedOperationException.class)
-    public void testRemoveMember() {
-        EveryonePrincipal.getInstance().removeMember(everyone);
-    }
-
     @Test(expected = UnsupportedOperationException.class)
     public void testMembers() {
         EveryonePrincipal.getInstance().members();
@@ -130,17 +116,7 @@ public class EveryonePrincipalTest  {
         }
     }
 
-    private class OtherEveryoneGroup extends OtherEveryone implements java.security.acl.Group {
-
-        @Override
-        public boolean addMember(Principal principal) {
-            return false;
-        }
-
-        @Override
-        public boolean removeMember(Principal principal) {
-            return false;
-        }
+    private class OtherEveryoneGroup extends OtherEveryone implements GroupPrincipal {
 
         @Override
         public boolean isMember(Principal principal) {

Added: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalsTest.java?rev=1827239&view=auto
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalsTest.java (added)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalsTest.java Mon Mar 19 20:08:56 2018
@@ -0,0 +1,115 @@
+/*
+ * 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.oak.spi.security.principal;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.security.Principal;
+import java.security.acl.Group;
+import java.util.Enumeration;
+import java.util.Set;
+
+import org.junit.Test;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterators;
+import com.google.common.collect.Sets;
+
+public class GroupPrincipalsTest {
+
+    @Test
+    public void testIsGroup() {
+        Principal p0 = new PrincipalImpl("test");
+        assertFalse(GroupPrincipals.isGroup(p0));
+
+        Group g = new Group() {
+
+            @Override
+            public String getName() {
+                return "testG";
+            }
+
+            @Override
+            public boolean removeMember(Principal user) {
+                return false;
+            }
+
+            @Override
+            public Enumeration<? extends Principal> members() {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean isMember(Principal member) {
+                return false;
+            }
+
+            @Override
+            public boolean addMember(Principal user) {
+                return false;
+            }
+        };
+
+        assertTrue(GroupPrincipals.isGroup(g));
+        assertTrue(GroupPrincipals.isGroup(new GroupPrincipalWrapper(g)));
+    }
+
+    @Test
+    public void testTransform() {
+        Group g = new Group() {
+
+            @Override
+            public String getName() {
+                return "testG";
+            }
+
+            @Override
+            public boolean removeMember(Principal user) {
+                return false;
+            }
+
+            @Override
+            public Enumeration<? extends Principal> members() {
+                throw new UnsupportedOperationException();
+            }
+
+            @Override
+            public boolean isMember(Principal member) {
+                return false;
+            }
+
+            @Override
+            public boolean addMember(Principal user) {
+                return false;
+            }
+        };
+
+        Set<Principal> t = GroupPrincipals.transform(ImmutableSet.of(g));
+        assertEquals(1, t.size());
+        Principal p = t.iterator().next();
+        assertEquals(p.getName(), g.getName());
+
+        Enumeration<? extends Principal> e = GroupPrincipals
+                .transform(Iterators.asEnumeration(ImmutableSet.of(g).iterator()));
+        Set<Principal> t2 = Sets.newHashSet(Iterators.forEnumeration(e));
+        assertEquals(1, t2.size());
+        Principal p2 = t2.iterator().next();
+        assertEquals(p2.getName(), g.getName());
+    }
+}

Propchange: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/GroupPrincipalsTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalManagerImplTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalManagerImplTest.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalManagerImplTest.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalManagerImplTest.java Mon Mar 19 20:08:56 2018
@@ -17,13 +17,14 @@
 package org.apache.jackrabbit.oak.spi.security.principal;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Enumeration;
 import java.util.Iterator;
 import javax.annotation.Nonnull;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterators;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalIterator;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.junit.Test;
@@ -42,7 +43,7 @@ public class PrincipalManagerImplTest {
     private Iterable<Principal> testPrincipals = provider.getTestPrincipals();
 
     private static boolean isGroup(Principal p) {
-        return p instanceof Group;
+        return p instanceof GroupPrincipal;
     }
 
     private static void assertIterator(@Nonnull Iterator<? extends Principal> expected, @Nonnull Iterator<? extends Principal> result) {
@@ -144,7 +145,7 @@ public class PrincipalManagerImplTest {
     public void testAllMembersKnown() {
         for (Principal p : testPrincipals) {
             if (isGroup(p)) {
-                Enumeration<? extends Principal> en = ((Group) p).members();
+                Enumeration<? extends Principal> en = ((GroupPrincipal) p).members();
                 while (en.hasMoreElements()) {
                     Principal memb = en.nextElement();
                     assertTrue(principalMgr.hasPrincipal(memb.getName()));
@@ -209,7 +210,7 @@ public class PrincipalManagerImplTest {
 
             assertTrue(isGroup(p));
 
-            Enumeration<? extends Principal> members = ((Group) p).members();
+            Enumeration<? extends Principal> members = ((GroupPrincipal) p).members();
             while (members.hasMoreElements()) {
                 Principal memb = members.nextElement();
 

Modified: jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/TestPrincipalProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/TestPrincipalProvider.java?rev=1827239&r1=1827238&r2=1827239&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/TestPrincipalProvider.java (original)
+++ jackrabbit/oak/trunk/oak-security-spi/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/TestPrincipalProvider.java Mon Mar 19 20:08:56 2018
@@ -17,7 +17,6 @@
 package org.apache.jackrabbit.oak.spi.security.principal;
 
 import java.security.Principal;
-import java.security.acl.Group;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.Map;
@@ -34,6 +33,8 @@ import com.google.common.collect.Iterabl
 import com.google.common.collect.Iterators;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
+
+import org.apache.jackrabbit.api.security.principal.GroupPrincipal;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 
 public final class TestPrincipalProvider implements PrincipalProvider {
@@ -67,7 +68,7 @@ public final class TestPrincipalProvider
     }
 
     public Iterable<Principal> all() {
-        Set all = Sets.newHashSet(principals.values());
+        Set<Principal> all = Sets.newHashSet(principals.values());
         all.add(EveryonePrincipal.getInstance());
         return all;
     }
@@ -97,11 +98,11 @@ public final class TestPrincipalProvider
 
     @Nonnull
     @Override
-    public Set<Group> getGroupMembership(@Nonnull Principal principal) {
+    public Set<Principal> getMembershipPrincipals(@Nonnull Principal principal) {
         if (principals.equals(TestPrincipals.asMap())) {
             return TestPrincipals.membership(principal.getName());
         } else if (principals.values().contains(principal)) {
-            return ImmutableSet.<Group>of(EveryonePrincipal.getInstance());
+            return ImmutableSet.of(EveryonePrincipal.getInstance());
         } else {
             return ImmutableSet.of();
         }
@@ -114,8 +115,8 @@ public final class TestPrincipalProvider
         if (pName != null) {
             Principal p = principals.get(pName);
             if (p != null) {
-                Set s = Sets.newHashSet(p);
-                s.addAll(getGroupMembership(p));
+                Set<Principal> s = Sets.newHashSet(p);
+                s.addAll(getMembershipPrincipals(p));
                 return s;
             }
         }
@@ -153,14 +154,14 @@ public final class TestPrincipalProvider
 
             switch (searchType) {
                 case PrincipalManager.SEARCH_TYPE_ALL: return true;
-                case PrincipalManager.SEARCH_TYPE_GROUP: return principal instanceof Group;
-                case PrincipalManager.SEARCH_TYPE_NOT_GROUP: return !(principal instanceof Group);
+                case PrincipalManager.SEARCH_TYPE_GROUP: return principal instanceof GroupPrincipal;
+                case PrincipalManager.SEARCH_TYPE_NOT_GROUP: return !(principal instanceof GroupPrincipal);
                 default: throw new IllegalArgumentException();
             }
         }
     }
 
-    private static final class TestGroup extends PrincipalImpl implements Group {
+    private static final class TestGroup extends PrincipalImpl implements GroupPrincipal {
 
         private final Enumeration<? extends Principal> members;
 
@@ -171,16 +172,6 @@ public final class TestPrincipalProvider
         }
 
         @Override
-        public boolean addMember(Principal user) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
-        public boolean removeMember(Principal user) {
-            throw new UnsupportedOperationException();
-        }
-
-        @Override
         public boolean isMember(Principal member) {
             throw new UnsupportedOperationException();
         }
@@ -195,9 +186,9 @@ public final class TestPrincipalProvider
 
         private static final Principal a = new PrincipalImpl("a");
         private static final Principal ac = new PrincipalImpl("ac");
-        private static final Group gr1 = new TestGroup("tGr1");
-        private static final Group gr2 = new TestGroup("tGr2", a);
-        private static final Group gr3 = new TestGroup("gr2", gr2, ac);
+        private static final GroupPrincipal gr1 = new TestGroup("tGr1");
+        private static final GroupPrincipal gr2 = new TestGroup("tGr2", a);
+        private static final GroupPrincipal gr3 = new TestGroup("gr2", gr2, ac);
 
         private static final Map<String, Principal> principals = ImmutableMap.<String, Principal>builder()
                 .put(a.getName(), a)
@@ -211,7 +202,7 @@ public final class TestPrincipalProvider
             return principals;
         }
 
-        private static Set<Group> membership(@Nonnull String name) {
+        private static Set<Principal> membership(@Nonnull String name) {
             if ("a".equals(name)) {
                 return ImmutableSet.of(EveryonePrincipal.getInstance(), gr2, gr3);
             } else if ("ac".equals(name)) {
@@ -219,7 +210,7 @@ public final class TestPrincipalProvider
             } else if (gr2.getName().equals(name)) {
                 return ImmutableSet.of(EveryonePrincipal.getInstance(), gr3);
             } else if (principals.containsKey(name)) {
-                return ImmutableSet.<Group>of(EveryonePrincipal.getInstance());
+                return ImmutableSet.of(EveryonePrincipal.getInstance());
             } else {
                 return ImmutableSet.of();
             }