Author: angela
Date: Thu Jun 16 18:38:05 2016
New Revision: 1748769

URL: http://svn.apache.org/viewvc?rev=1748769&view=rev
Log:
OAK-4479 : Move EmptyPrincipalProvider to oak-core
minor improvement: more tests for o.a.j.o.spi.security.principal package

Added:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProvider.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProviderTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProviderTest.java
      - copied, changed from r1748626, 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/EmptyPrincipalProviderTest.java
Removed:
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/EmptyPrincipalProviderTest.java
Modified:
    
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalPrincipalConfiguration.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfiguration.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProvider.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/package-info.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipalTest.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalImplTest.java

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalPrincipalConfiguration.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalPrincipalConfiguration.java?rev=1748769&r1=1748768&r2=1748769&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalPrincipalConfiguration.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalPrincipalConfiguration.java
 Thu Jun 16 18:38:05 2016
@@ -21,7 +21,6 @@ import java.security.acl.Group;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -31,9 +30,7 @@ import javax.annotation.Nullable;
 import com.google.common.base.Function;
 import com.google.common.base.Predicates;
 import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
-import com.google.common.collect.Iterators;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -53,6 +50,7 @@ import org.apache.jackrabbit.oak.spi.sec
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.impl.DefaultSyncConfigImpl;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.impl.ExternalLoginModuleFactory;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.impl.SyncHandlerMapping;
+import org.apache.jackrabbit.oak.spi.security.principal.EmptyPrincipalProvider;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalConfiguration;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalManagerImpl;
 import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider;
@@ -171,46 +169,6 @@ public class ExternalPrincipalConfigurat
     }
 
     /**
-     * Implementation of the {@code PrincipalProvider} interface that never
-     * returns any principals.
-     */
-    private static final class EmptyPrincipalProvider implements 
PrincipalProvider {
-
-        private static final PrincipalProvider INSTANCE = new 
EmptyPrincipalProvider();
-
-        private EmptyPrincipalProvider() {}
-
-        @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 Iterators.emptyIterator();
-        }
-
-        @Nonnull
-        @Override
-        public Iterator<? extends Principal> findPrincipals(int searchType) {
-            return Iterators.emptyIterator();
-        }
-    }
-
-    /**
      * {@code ServiceTracker} to detect any {@link SyncHandler} that has
      * dynamic membership enabled.
      */

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfiguration.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfiguration.java?rev=1748769&r1=1748768&r2=1748769&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfiguration.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfiguration.java
 Thu Jun 16 18:38:05 2016
@@ -16,10 +16,10 @@
  */
 package org.apache.jackrabbit.oak.spi.security.principal;
 
+import java.util.ArrayList;
+import java.util.List;
 import javax.annotation.Nonnull;
 
-import com.google.common.base.Function;
-import com.google.common.collect.Lists;
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
 import org.apache.jackrabbit.oak.api.Root;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
@@ -49,11 +49,19 @@ public class CompositePrincipalConfigura
     @Nonnull
     @Override
     public PrincipalProvider getPrincipalProvider(final Root root, final 
NamePathMapper namePathMapper) {
-        return new 
CompositePrincipalProvider(Lists.transform(getConfigurations(), new 
Function<PrincipalConfiguration, PrincipalProvider>() {
-            @Override
-            public PrincipalProvider apply(PrincipalConfiguration 
principalConfiguration) {
-                return principalConfiguration.getPrincipalProvider(root, 
namePathMapper);
-            }
-        }));
+        List<PrincipalConfiguration> configurations = getConfigurations();
+        switch (configurations.size()) {
+            case 0: return EmptyPrincipalProvider.INSTANCE;
+            case 1: return configurations.get(0).getPrincipalProvider(root, 
namePathMapper);
+            default:
+                List<PrincipalProvider> pps = new 
ArrayList<>(configurations.size());
+                for (PrincipalConfiguration principalConfig : configurations) {
+                    PrincipalProvider principalProvider = 
principalConfig.getPrincipalProvider(root, namePathMapper);
+                    if (!(principalProvider instanceof 
EmptyPrincipalProvider)) {
+                        pps.add(principalProvider);
+                    }
+                }
+                return CompositePrincipalProvider.of(pps);
+        }
     }
 }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProvider.java?rev=1748769&r1=1748768&r2=1748769&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProvider.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProvider.java
 Thu Jun 16 18:38:05 2016
@@ -22,7 +22,6 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
-
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
@@ -42,6 +41,21 @@ public class CompositePrincipalProvider
         this.providers = checkNotNull(providers);
     }
 
+    public static PrincipalProvider of(@Nonnull List<PrincipalProvider> 
providers) {
+        PrincipalProvider pp;
+        switch (providers.size()) {
+            case 0 :
+                pp = EmptyPrincipalProvider.INSTANCE;
+                break;
+            case 1 :
+                pp = providers.get(0);
+                break;
+            default :
+                pp = new CompositePrincipalProvider(providers);
+        }
+        return pp;
+    }
+
     //--------------------------------------------------< PrincipalProvider 
>---
     @Override
     public Principal getPrincipal(@Nonnull String principalName) {

Added: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProvider.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProvider.java?rev=1748769&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProvider.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProvider.java
 Thu Jun 16 18:38:05 2016
@@ -0,0 +1,67 @@
+/*
+ * 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.Iterator;
+import java.util.Set;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterators;
+
+/**
+ * Implementation of the {@code PrincipalProvider} interface that never
+ * returns any principals.
+ */
+public final class EmptyPrincipalProvider implements PrincipalProvider {
+
+    public static final PrincipalProvider INSTANCE = new 
EmptyPrincipalProvider();
+
+    private EmptyPrincipalProvider() {}
+
+    @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 Iterators.emptyIterator();
+    }
+
+    @Nonnull
+    @Override
+    public Iterator<? extends Principal> findPrincipals(int searchType) {
+        return Iterators.emptyIterator();
+    }
+}
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/package-info.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/package-info.java?rev=1748769&r1=1748768&r2=1748769&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/package-info.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/principal/package-info.java
 Thu Jun 16 18:38:05 2016
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-@Version("1.3.0")
+@Version("1.4.0")
 @Export(optional = "provide:=true")
 package org.apache.jackrabbit.oak.spi.security.principal;
 

Added: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java?rev=1748769&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalConfigurationTest.java
 Thu Jun 16 18:38:05 2016
@@ -0,0 +1,201 @@
+/*
+ * 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.lang.reflect.Field;
+import java.security.Principal;
+import java.security.acl.Group;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+import javax.annotation.CheckForNull;
+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.AbstractSecurityTest;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.spi.security.ConfigurationBase;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+public class CompositePrincipalConfigurationTest extends AbstractSecurityTest {
+
+    private CompositePrincipalConfiguration cpConfig = new 
CompositePrincipalConfiguration();
+
+    private static void assertSize(int expected, CompositePrincipalProvider 
pp) throws Exception {
+        Field f = 
CompositePrincipalProvider.class.getDeclaredField("providers");
+        f.setAccessible(true);
+
+        List<PrincipalProvider> providers = (List<PrincipalProvider>) 
f.get(pp);
+        assertEquals(expected, providers.size());
+    }
+
+    @Test
+    public void testEmptyGetPrincipalManager() {
+        PrincipalManager pMgr = cpConfig.getPrincipalManager(root, 
NamePathMapper.DEFAULT);
+        assertTrue(pMgr instanceof PrincipalManagerImpl);
+    }
+
+    @Test
+    public void testEmptyGetProvider() throws Exception {
+        PrincipalProvider pp = cpConfig.getPrincipalProvider(root, 
NamePathMapper.DEFAULT);
+        assertFalse(pp instanceof CompositePrincipalProvider);
+        assertSame(EmptyPrincipalProvider.INSTANCE, pp);
+    }
+
+    @Test
+    public void testSingleGetPrincipalManager() {
+        PrincipalConfiguration testConfig = new TestPrincipalConfiguration();
+        cpConfig.addConfiguration(testConfig);
+
+        PrincipalManager pMgr = cpConfig.getPrincipalManager(root, 
NamePathMapper.DEFAULT);
+        assertTrue(pMgr instanceof PrincipalManagerImpl);
+    }
+
+    @Test
+    public void testSingleGetProvider() throws Exception {
+        PrincipalConfiguration testConfig = new TestPrincipalConfiguration();
+        cpConfig.addConfiguration(testConfig);
+
+        PrincipalProvider pp = cpConfig.getPrincipalProvider(root, 
NamePathMapper.DEFAULT);
+
+        assertFalse(pp instanceof CompositePrincipalProvider);
+        assertEquals(testConfig.getPrincipalProvider(root, 
NamePathMapper.DEFAULT).getClass(), pp.getClass());
+    }
+
+    @Test
+    public void testMultipleGetPrincipalManager() {
+        
cpConfig.addConfiguration(getSecurityProvider().getConfiguration(PrincipalConfiguration.class));
+        cpConfig.addConfiguration(new TestPrincipalConfiguration());
+
+        PrincipalManager pMgr = cpConfig.getPrincipalManager(root, 
NamePathMapper.DEFAULT);
+        assertTrue(pMgr instanceof PrincipalManagerImpl);
+    }
+
+    @Test
+    public void testMultipleGetPrincipalProvider() throws Exception {
+        
cpConfig.addConfiguration(getSecurityProvider().getConfiguration(PrincipalConfiguration.class));
+        cpConfig.addConfiguration(new TestPrincipalConfiguration());
+
+        PrincipalProvider pp = cpConfig.getPrincipalProvider(root, 
NamePathMapper.DEFAULT);
+
+        assertTrue(pp instanceof CompositePrincipalProvider);
+        assertSize(2, (CompositePrincipalProvider) pp);
+    }
+
+    @Test
+    public void testWithEmptyPrincipalProvider() throws Exception {
+        cpConfig.addConfiguration(new TestEmptyConfiguration());
+        PrincipalProvider pp = cpConfig.getPrincipalProvider(root, 
NamePathMapper.DEFAULT);
+        assertSame(EmptyPrincipalProvider.INSTANCE, pp);
+
+        cpConfig.addConfiguration(new TestPrincipalConfiguration());
+        pp = cpConfig.getPrincipalProvider(root, NamePathMapper.DEFAULT);
+        assertFalse(pp instanceof CompositePrincipalProvider);
+
+        
cpConfig.addConfiguration(getSecurityProvider().getConfiguration(PrincipalConfiguration.class));
+        pp = cpConfig.getPrincipalProvider(root, NamePathMapper.DEFAULT);
+        assertTrue(pp instanceof CompositePrincipalProvider);
+        assertSize(2, (CompositePrincipalProvider) pp);
+
+        cpConfig.addConfiguration(new TestEmptyConfiguration());
+        pp = cpConfig.getPrincipalProvider(root, NamePathMapper.DEFAULT);
+        assertTrue(pp instanceof CompositePrincipalProvider);
+        assertSize(2, (CompositePrincipalProvider) pp);
+    }
+
+
+    private final class TestPrincipalConfiguration extends ConfigurationBase 
implements PrincipalConfiguration {
+
+        @Nonnull
+        @Override
+        public PrincipalManager getPrincipalManager(Root root, NamePathMapper 
namePathMapper) {
+            return new PrincipalManagerImpl(getPrincipalProvider(root, 
namePathMapper));
+        }
+
+        @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 Iterators.emptyIterator();
+                }
+
+                @Nonnull
+                @Override
+                public Iterator<? extends Principal> findPrincipals(int 
searchType) {
+                    return Iterators.emptyIterator();
+                }
+            };
+        }
+
+        @Nonnull
+        @Override
+        public String getName() {
+            return PrincipalConfiguration.NAME;
+        }
+    }
+
+    private final class TestEmptyConfiguration extends ConfigurationBase 
implements PrincipalConfiguration {
+
+        @Nonnull
+        @Override
+        public PrincipalManager getPrincipalManager(Root root, NamePathMapper 
namePathMapper) {
+            return new PrincipalManagerImpl(getPrincipalProvider(root, 
namePathMapper));
+        }
+
+        @Nonnull
+        @Override
+        public PrincipalProvider getPrincipalProvider(Root root, 
NamePathMapper namePathMapper) {
+            return EmptyPrincipalProvider.INSTANCE;
+        }
+
+        @Nonnull
+        @Override
+        public String getName() {
+            return PrincipalConfiguration.NAME;
+        }
+    }
+}
\ No newline at end of file

Added: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProviderTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProviderTest.java?rev=1748769&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProviderTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/CompositePrincipalProviderTest.java
 Thu Jun 16 18:38:05 2016
@@ -0,0 +1,49 @@
+/*
+ * 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 com.google.common.collect.ImmutableList;
+import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.junit.Test;
+
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+public class CompositePrincipalProviderTest extends AbstractSecurityTest{
+
+    @Test
+    public void testOfEmptyList() {
+        assertSame(EmptyPrincipalProvider.INSTANCE, 
CompositePrincipalProvider.of(ImmutableList.<PrincipalProvider>of()));
+    }
+
+    @Test
+    public void testOfSingletonList() {
+        PrincipalProvider pp = 
getSecurityProvider().getConfiguration(PrincipalConfiguration.class).getPrincipalProvider(root,
 NamePathMapper.DEFAULT);
+        assertSame(pp, CompositePrincipalProvider.of(ImmutableList.of(pp)));
+    }
+
+    @Test
+    public void testOfList() {
+        PrincipalProvider pp = 
getSecurityProvider().getConfiguration(PrincipalConfiguration.class).getPrincipalProvider(root,
 NamePathMapper.DEFAULT);
+
+        PrincipalProvider of = 
CompositePrincipalProvider.of(ImmutableList.of(pp, pp));
+        assertNotSame(pp, of);
+        assertTrue(of instanceof CompositePrincipalProvider);
+    }
+}
\ No newline at end of file

Copied: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProviderTest.java
 (from r1748626, 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/EmptyPrincipalProviderTest.java)
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProviderTest.java?p2=jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProviderTest.java&p1=jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/EmptyPrincipalProviderTest.java&r1=1748626&r2=1748769&rev=1748769&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/EmptyPrincipalProviderTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EmptyPrincipalProviderTest.java
 Thu Jun 16 18:38:05 2016
@@ -14,64 +14,53 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package 
org.apache.jackrabbit.oak.spi.security.authentication.external.impl.principal;
+package org.apache.jackrabbit.oak.spi.security.principal;
 
 import java.security.Principal;
-import javax.annotation.Nonnull;
 
 import org.apache.jackrabbit.api.security.principal.PrincipalManager;
-import org.apache.jackrabbit.oak.namepath.NamePathMapper;
-import 
org.apache.jackrabbit.oak.spi.security.authentication.external.impl.ExternalIdentityConstants;
-import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl;
-import org.apache.jackrabbit.oak.spi.security.principal.PrincipalProvider;
+import org.apache.jackrabbit.oak.AbstractSecurityTest;
 import org.junit.Test;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-public class EmptyPrincipalProviderTest extends AbstractPrincipalTest {
+public class EmptyPrincipalProviderTest extends AbstractSecurityTest {
 
-    private String externalPrincipalName;
+    private PrincipalProvider principalProvider = 
EmptyPrincipalProvider.INSTANCE;
     private Principal testPrincipal;
 
     @Override
     public void before() throws Exception {
         super.before();
-
-        assertFalse(principalProvider instanceof 
ExternalGroupPrincipalProvider);
-
-        externalPrincipalName = 
getUserManager(root).getAuthorizable(USER_ID).getProperty(ExternalIdentityConstants.REP_EXTERNAL_PRINCIPAL_NAMES)[0].getString();
         testPrincipal = getTestUser().getPrincipal();
     }
 
-    @Nonnull
-    @Override
-    PrincipalProvider createPrincipalProvider() {
-        return new ExternalPrincipalConfiguration().getPrincipalProvider(root, 
NamePathMapper.DEFAULT);
-    }
-
     @Test
     public void testGetPrincipal() {
-        assertNull(principalProvider.getPrincipal(externalPrincipalName));
+        assertNull(principalProvider.getPrincipal(EveryonePrincipal.NAME));
         assertNull(principalProvider.getPrincipal(testPrincipal.getName()));
     }
 
     @Test
     public void testGetGroupMembership() {
-        assertTrue(principalProvider.getGroupMembership(new 
PrincipalImpl(externalPrincipalName)).isEmpty());
+        
assertTrue(principalProvider.getGroupMembership(EveryonePrincipal.getInstance()).isEmpty());
+        assertTrue(principalProvider.getGroupMembership(new 
PrincipalImpl(EveryonePrincipal.NAME)).isEmpty());
         
assertTrue(principalProvider.getGroupMembership(testPrincipal).isEmpty());
     }
 
     @Test
     public void testGetPrincipals() throws Exception {
-        assertTrue(principalProvider.getPrincipals(USER_ID).isEmpty());
         
assertTrue(principalProvider.getPrincipals(getTestUser().getID()).isEmpty());
     }
 
     @Test
     public void testFindPrincipalsByHint() {
-        assertFalse(principalProvider.findPrincipals("a", 
PrincipalManager.SEARCH_TYPE_ALL).hasNext());
+        assertFalse(principalProvider.findPrincipals(EveryonePrincipal.NAME, 
PrincipalManager.SEARCH_TYPE_ALL).hasNext());
+        
assertFalse(principalProvider.findPrincipals(EveryonePrincipal.NAME.substring(0,
 1), PrincipalManager.SEARCH_TYPE_ALL).hasNext());
+        assertFalse(principalProvider.findPrincipals(testPrincipal.getName(), 
PrincipalManager.SEARCH_TYPE_ALL).hasNext());
+        
assertFalse(principalProvider.findPrincipals(testPrincipal.getName().substring(0,
 2), PrincipalManager.SEARCH_TYPE_ALL).hasNext());
     }
 
     @Test

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipalTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipalTest.java?rev=1748769&r1=1748768&r2=1748769&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipalTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/EveryonePrincipalTest.java
 Thu Jun 16 18:38:05 2016
@@ -37,6 +37,36 @@ public class EveryonePrincipalTest  {
     }
 
     @Test
+    public void testIsMember() {
+        assertTrue(EveryonePrincipal.getInstance().isMember(new 
PrincipalImpl("test")));
+    }
+
+    @Test
+    public void testIsMemberSelf() {
+        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();
+    }
+
+    @Test
     public void testEquals() {
         assertEquals(everyone, EveryonePrincipal.getInstance());
     }

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalImplTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalImplTest.java?rev=1748769&r1=1748768&r2=1748769&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalImplTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/security/principal/PrincipalImplTest.java
 Thu Jun 16 18:38:05 2016
@@ -25,6 +25,7 @@ import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
 
 /**
  * PrincipalImplTest...
@@ -39,6 +40,11 @@ public class PrincipalImplTest {
     }
 
     @Test
+    public void testEqualsSame() {
+        assertTrue(principal.equals(principal));
+    }
+
+    @Test
     public void testEquals() {
         List<Principal> principals = new ArrayList<Principal>();
         principals.add(new PrincipalImpl("name"));


Reply via email to