Author: angela
Date: Fri Jan 18 14:50:29 2019
New Revision: 1851625

URL: http://svn.apache.org/viewvc?rev=1851625&view=rev
Log:
OAK-7993 : CompositeAuthorizationConfiguration.getRestrictionProvider() should 
filter duplications

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfiguration.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfigurationTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfiguration.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfiguration.java?rev=1851625&r1=1851624&r2=1851625&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfiguration.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfiguration.java
 Fri Jan 18 14:50:29 2019
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.oak.securi
 
 import java.security.Principal;
 import java.util.ArrayList;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
 import javax.jcr.security.AccessControlManager;
@@ -146,7 +147,7 @@ public class CompositeAuthorizationConfi
             case 0: return RestrictionProvider.EMPTY;
             case 1: return configurations.get(0).getRestrictionProvider();
             default:
-                List<RestrictionProvider> rps = new 
ArrayList<>(configurations.size());
+                Set<RestrictionProvider> rps = new 
LinkedHashSet<>(configurations.size());
                 for (AuthorizationConfiguration c : configurations) {
                     RestrictionProvider rp = c.getRestrictionProvider();
                     if (RestrictionProvider.EMPTY != rp) {

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfigurationTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfigurationTest.java?rev=1851625&r1=1851624&r2=1851625&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfigurationTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfigurationTest.java
 Fri Jan 18 14:50:29 2019
@@ -25,6 +25,7 @@ import javax.jcr.security.AccessControlM
 import org.apache.jackrabbit.oak.AbstractSecurityTest;
 import org.apache.jackrabbit.oak.namepath.NamePathMapper;
 import 
org.apache.jackrabbit.oak.security.authorization.AuthorizationConfigurationImpl;
+import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.OpenAuthorizationConfiguration;
 import 
org.apache.jackrabbit.oak.spi.security.authorization.permission.EmptyPermissionProvider;
@@ -33,11 +34,13 @@ import org.apache.jackrabbit.oak.spi.sec
 import 
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
 import org.jetbrains.annotations.NotNull;
 import org.junit.Test;
+import org.mockito.Mockito;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotSame;
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
 
 public class CompositeAuthorizationConfigurationTest extends 
AbstractSecurityTest {
 
@@ -141,15 +144,35 @@ public class CompositeAuthorizationConfi
 
     @Test
     public void testMultipleRestrictionProvider() {
-        CompositeAuthorizationConfiguration cc = getCompositeConfiguration(
-                createAuthorizationConfigurationImpl(),
-                createAuthorizationConfigurationImpl());
+        // 2 authorization configuration with different RestrictionProvider
+        AuthorizationConfiguration ac = createAuthorizationConfigurationImpl();
+        AuthorizationConfiguration ac2 = 
Mockito.mock(AuthorizationConfiguration.class);
+        
when(ac2.getRestrictionProvider()).thenReturn(Mockito.mock(RestrictionProvider.class));
+        when(ac2.getParameters()).thenReturn(ConfigurationParameters.EMPTY);
+
+        CompositeAuthorizationConfiguration cc = getCompositeConfiguration(ac, 
ac2);
 
         RestrictionProvider rp = cc.getRestrictionProvider();
         assertTrue(rp instanceof CompositeRestrictionProvider);
     }
 
     @Test
+    public void testRedundantRestrictionProvider() {
+        // 2 authorization configuration sharing the same RestrictionProvider
+        AuthorizationConfiguration ac = createAuthorizationConfigurationImpl();
+        AuthorizationConfiguration ac2 = 
Mockito.mock(AuthorizationConfiguration.class);
+        
when(ac2.getRestrictionProvider()).thenReturn(ac.getRestrictionProvider());
+        when(ac2.getParameters()).thenReturn(ConfigurationParameters.EMPTY);
+
+        CompositeAuthorizationConfiguration cc = getCompositeConfiguration(ac, 
ac2);
+
+        // composite should detect the duplication
+        RestrictionProvider rp = cc.getRestrictionProvider();
+        assertFalse(rp instanceof CompositeRestrictionProvider);
+        assertSame(ac.getRestrictionProvider(), rp);
+    }
+
+    @Test
     public void testMultipleWithEmptyRestrictionProvider() {
         CompositeAuthorizationConfiguration cc = getCompositeConfiguration(
                 createAuthorizationConfigurationImpl(),


Reply via email to