Author: angela
Date: Wed Apr 20 11:22:57 2016
New Revision: 1740114

URL: http://svn.apache.org/viewvc?rev=1740114&view=rev
Log:
OAK-4248 More tests for the exposed 'basic' package 
 OAK-4249 Extract abstract test-base without OSGi registrations
OAK-4251 Guard against NPE in DefaultSyncConfig.Authorizable.setAutoMembership

Added:
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/AbstractExternalAuthTest.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncConfigTest.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncResultImplTest.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncedIdentityTest.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/RepExternalIdTest.java
Modified:
    
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncConfig.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTest.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTestBase.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContextTest.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/CustomCredentialsSupportTest.java
    
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/DefaultSyncHandlerTest.java

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncConfig.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncConfig.java?rev=1740114&r1=1740113&r2=1740114&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncConfig.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncConfig.java
 Wed Apr 20 11:22:57 2016
@@ -118,7 +118,9 @@ public class DefaultSyncConfig {
         }
 
         /**
-         * Sets the auto membership
+         * Sets the auto membership. Note that the passed group names will be 
trimmed
+         * and empty string values will be ignored (along with {@code null} 
values).
+         *
          * @param autoMembership the membership
          * @return {@code this}
          * @see #getAutoMembership()
@@ -127,7 +129,7 @@ public class DefaultSyncConfig {
         public Authorizable setAutoMembership(@Nonnull String ... 
autoMembership) {
             this.autoMembership = new HashSet<String>();
             for (String groupName: autoMembership) {
-                if (!groupName.trim().isEmpty()) {
+                if (groupName != null && !groupName.trim().isEmpty()) {
                     this.autoMembership.add(groupName.trim());
                 }
             }

Added: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/AbstractExternalAuthTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/AbstractExternalAuthTest.java?rev=1740114&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/AbstractExternalAuthTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/AbstractExternalAuthTest.java
 Wed Apr 20 11:22:57 2016
@@ -0,0 +1,130 @@
+/*
+ * 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.authentication.external;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import javax.jcr.RepositoryException;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Iterators;
+import com.google.common.collect.Sets;
+import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.api.security.user.UserManager;
+import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.basic.DefaultSyncConfig;
+import org.junit.After;
+import org.junit.Before;
+
+/**
+ * Abstract base test for external-authentication tests.
+ */
+public abstract class AbstractExternalAuthTest extends AbstractSecurityTest {
+
+    protected static final String USER_ID = TestIdentityProvider.ID_TEST_USER;
+    protected static final String TEST_CONSTANT_PROPERTY_NAME = 
"profile/constantProperty";
+    protected static final String TEST_CONSTANT_PROPERTY_VALUE = 
"constant-value";
+
+    protected ExternalIdentityProvider idp;
+
+    protected DefaultSyncConfig syncConfig;
+
+    private Set<String> ids;
+
+    @Before
+    public void before() throws Exception {
+        super.before();
+
+        getTestUser();
+        ids = Sets.newHashSet(getAllAuthorizableIds(getUserManager(root)));
+
+        idp = createIDP();
+        syncConfig = createSyncConfig();
+    }
+
+    @After
+    public void after() throws Exception {
+        try {
+            destroyIDP();
+            idp = null;
+
+            // discard any pending changes
+            root.refresh();
+
+            UserManager userManager = getUserManager(root);
+            Iterator<String> iter = getAllAuthorizableIds(userManager);
+            while (iter.hasNext()) {
+                String id = iter.next();
+                if (!ids.remove(id)) {
+                    Authorizable a = userManager.getAuthorizable(id);
+                    if (a != null) {
+                        a.remove();
+                    }
+                }
+            }
+            root.commit();
+        } finally {
+            root.refresh();
+            super.after();
+        }
+    }
+
+    private static Iterator<String> getAllAuthorizableIds(@Nonnull UserManager 
userManager) throws Exception {
+        Iterator<Authorizable> iter = 
userManager.findAuthorizables("jcr:primaryType", null);
+        return Iterators.filter(Iterators.transform(iter, new 
Function<Authorizable, String>() {
+            @Nullable
+            @Override
+            public String apply(Authorizable input) {
+                try {
+                    if (input != null) {
+                        return input.getID();
+                    }
+                } catch (RepositoryException e) {
+                    // failed to retrieve ID
+                }
+                return null;
+            }
+        }), Predicates.notNull());
+    }
+
+
+    protected ExternalIdentityProvider createIDP() {
+        return new TestIdentityProvider();
+    }
+
+    protected void destroyIDP() {
+        // nothing to do
+    }
+
+    protected DefaultSyncConfig createSyncConfig() {
+        DefaultSyncConfig syncConfig = new DefaultSyncConfig();
+        Map<String, String> mapping = new HashMap<String, String>();
+        mapping.put("name", "name");
+        mapping.put("email", "email");
+        mapping.put("profile/name", "profile/name");
+        mapping.put("profile/age", "profile/age");
+        mapping.put(TEST_CONSTANT_PROPERTY_NAME, "\"" + 
TEST_CONSTANT_PROPERTY_VALUE + "\"");
+        syncConfig.user().setPropertyMapping(mapping);
+        syncConfig.user().setMembershipNestingDepth(1);
+        return syncConfig;
+    }
+}
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTest.java?rev=1740114&r1=1740113&r2=1740114&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTest.java
 Wed Apr 20 11:22:57 2016
@@ -53,15 +53,6 @@ public class ExternalLoginModuleTest ext
         super.after();
     }
 
-    protected ExternalIdentityProvider createIDP() {
-        return new TestIdentityProvider();
-    }
-
-    @Override
-    protected void destroyIDP(ExternalIdentityProvider idp) {
-    // ignore
-    }
-
     @Test
     public void testLoginFailed() throws Exception {
         UserManager userManager = getUserManager(root);

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTestBase.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTestBase.java?rev=1740114&r1=1740113&r2=1740114&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTestBase.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/ExternalLoginModuleTestBase.java
 Wed Apr 20 11:22:57 2016
@@ -19,23 +19,9 @@ package org.apache.jackrabbit.oak.spi.se
 
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
-import javax.jcr.RepositoryException;
 import javax.security.auth.login.AppConfigurationEntry;
 import javax.security.auth.login.Configuration;
 
-import com.google.common.base.Function;
-import com.google.common.base.Predicates;
-import com.google.common.collect.Iterators;
-import com.google.common.collect.Sets;
-import org.apache.jackrabbit.api.security.user.Authorizable;
-import org.apache.jackrabbit.api.security.user.UserManager;
-import org.apache.jackrabbit.oak.AbstractSecurityTest;
 import org.apache.jackrabbit.oak.Oak;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.basic.DefaultSyncConfig;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.impl.DefaultSyncHandler;
@@ -49,106 +35,47 @@ import org.junit.After;
 import org.junit.Before;
 
 /**
- * Abstract base test for external-authentication tests.
+ * Abstract base test for external-authentication including proper OSGi service
+ * registrations required for repository login respecting the {@link 
ExternalLoginModule}.
  */
-public abstract class ExternalLoginModuleTestBase extends AbstractSecurityTest 
{
-
-    protected static final String USER_ID = TestIdentityProvider.ID_TEST_USER;
-    protected static final String TEST_CONSTANT_PROPERTY_NAME = 
"profile/constantProperty";
-    protected static final String TEST_CONSTANT_PROPERTY_VALUE = 
"constant-value";
-
-    private Set<String> ids;
+public abstract class ExternalLoginModuleTestBase extends 
AbstractExternalAuthTest {
 
     private Registration testIdpReg;
-
     private Registration syncHandlerReg;
 
     protected final HashMap<String, Object> options = new HashMap<String, 
Object>();
 
     protected Whiteboard whiteboard;
 
-    protected ExternalIdentityProvider idp;
-
     protected SyncManager syncManager;
 
     protected ExternalIdentityProviderManager idpManager;
 
-    protected DefaultSyncConfig syncConfig;
-
     @Before
     public void before() throws Exception {
         super.before();
-        ids = Sets.newHashSet(getAllAuthorizableIds(getUserManager(root)));
-        idp = createIDP();
 
         testIdpReg = whiteboard.register(ExternalIdentityProvider.class, idp, 
Collections.<String, Object>emptyMap());
 
         options.put(ExternalLoginModule.PARAM_SYNC_HANDLER_NAME, "default");
         options.put(ExternalLoginModule.PARAM_IDP_NAME, idp.getName());
 
-        // set default sync config
-        syncConfig = new DefaultSyncConfig();
-        Map<String, String> mapping = new HashMap<String, String>();
-        mapping.put("name", "name");
-        mapping.put("email", "email");
-        mapping.put("profile/name", "profile/name");
-        mapping.put("profile/age", "profile/age");
-        mapping.put(TEST_CONSTANT_PROPERTY_NAME, "\"" + 
TEST_CONSTANT_PROPERTY_VALUE + "\"");
-        syncConfig.user().setPropertyMapping(mapping);
-        syncConfig.user().setMembershipNestingDepth(1);
         setSyncConfig(syncConfig);
     }
 
     @After
     public void after() throws Exception {
-        if (testIdpReg != null) {
-            testIdpReg.unregister();
-            testIdpReg = null;
-        }
-        destroyIDP(idp);
-        idp = null;
-        setSyncConfig(null);
-
         try {
-            // discard any pending changes
-            root.refresh();
-
-            UserManager userManager = getUserManager(root);
-            Iterator<String> iter = getAllAuthorizableIds(userManager);
-            while (iter.hasNext()) {
-                String id = iter.next();
-                if (!ids.remove(id)) {
-                    Authorizable a = userManager.getAuthorizable(id);
-                    if (a != null) {
-                        a.remove();
-                    }
-                }
+            if (testIdpReg != null) {
+                testIdpReg.unregister();
+                testIdpReg = null;
             }
-            root.commit();
+            setSyncConfig(null);
         } finally {
-            root.refresh();
             super.after();
         }
     }
 
-    private static Iterator<String> getAllAuthorizableIds(@Nonnull UserManager 
userManager) throws Exception {
-        Iterator<Authorizable> iter = 
userManager.findAuthorizables("jcr:primaryType", null);
-        return Iterators.filter(Iterators.transform(iter, new 
Function<Authorizable, String>() {
-            @Nullable
-            @Override
-            public String apply(Authorizable input) {
-                try {
-                    if (input != null) {
-                        return input.getID();
-                    }
-                } catch (RepositoryException e) {
-                    // failed to retrieve ID
-                }
-                return null;
-            }
-        }), Predicates.notNull());
-    }
-
     @Override
     protected Oak withEditors(Oak oak) {
         super.withEditors(oak);
@@ -163,10 +90,6 @@ public abstract class ExternalLoginModul
         return oak;
     }
 
-    protected abstract ExternalIdentityProvider createIDP();
-
-    protected abstract void destroyIDP(ExternalIdentityProvider idp);
-
     protected SynchronizationMBean createMBean() {
         // todo: how to retrieve JCR repository here? maybe we should base the 
sync mbean on oak directly (=> OAK-4218).
         // JackrabbitRepository repository =  null;

Added: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncConfigTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncConfigTest.java?rev=1740114&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncConfigTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncConfigTest.java
 Wed Apr 20 11:22:57 2016
@@ -0,0 +1,101 @@
+/*
+ * 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.authentication.external.basic;
+
+import java.util.Map;
+import java.util.Set;
+import javax.annotation.Nonnull;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+public class DefaultSyncConfigTest {
+
+    private DefaultSyncConfig config = new DefaultSyncConfig();
+
+    private static void assertAuthorizableConfig(@Nonnull 
DefaultSyncConfig.Authorizable authorizableConfig) {
+        assertEquals("", authorizableConfig.getPathPrefix());
+        assertSame(authorizableConfig, authorizableConfig.setPathPrefix(null));
+        assertEquals("", authorizableConfig.getPathPrefix());
+        assertEquals("hu/hu", 
authorizableConfig.setPathPrefix("hu/hu").getPathPrefix());
+
+        Set<String> autoMembership = authorizableConfig.getAutoMembership();
+        assertNotNull(autoMembership);
+        assertTrue(autoMembership.isEmpty());
+
+        assertSame(authorizableConfig, authorizableConfig.setAutoMembership());
+        assertTrue(authorizableConfig.getAutoMembership().isEmpty());
+
+        assertEquals(ImmutableSet.of("gr1", "gr2"), 
authorizableConfig.setAutoMembership("gr1", "gr2").getAutoMembership());
+        assertEquals(ImmutableSet.of("gr"), 
authorizableConfig.setAutoMembership("", " gr ", null, "").getAutoMembership());
+
+        Map<String, String> mapping = authorizableConfig.getPropertyMapping();
+        assertNotNull(mapping);
+        assertTrue(mapping.isEmpty());
+
+        assertSame(authorizableConfig, 
authorizableConfig.setPropertyMapping(ImmutableMap.of("a", "b")));
+        assertEquals(ImmutableMap.of("a", "b"), 
authorizableConfig.getPropertyMapping());
+        assertEquals(ImmutableMap.of(), 
authorizableConfig.setPropertyMapping(null).getPropertyMapping());
+
+        assertEquals(0, authorizableConfig.getExpirationTime());
+        assertSame(authorizableConfig, 
authorizableConfig.setExpirationTime(Long.MAX_VALUE));
+        assertEquals(Long.MAX_VALUE, authorizableConfig.getExpirationTime());
+    }
+
+
+    @Test
+    public void testName() {
+        assertEquals("default", config.getName());
+
+        assertSame(config, config.setName("name"));
+        assertEquals("name", config.getName());
+    }
+
+    @Test
+    public void testUserConfig() {
+        DefaultSyncConfig.User userConfig = config.user();
+
+        assertNotNull(userConfig);
+        assertAuthorizableConfig(userConfig);
+
+        assertEquals(0, userConfig.getMembershipExpirationTime());
+
+        assertSame(userConfig, userConfig.setMembershipExpirationTime(1));
+        assertEquals(1, userConfig.getMembershipExpirationTime());
+        assertEquals(Long.MIN_VALUE, 
userConfig.setMembershipExpirationTime(Long.MIN_VALUE).getMembershipExpirationTime());
+
+        assertEquals(0, userConfig.getMembershipNestingDepth());
+
+        assertSame(userConfig, userConfig.setMembershipNestingDepth(5));
+        assertEquals(5, userConfig.getMembershipNestingDepth());
+        assertEquals(0, 
userConfig.setMembershipExpirationTime(0).getMembershipExpirationTime());
+    }
+
+    @Test
+    public void testGroupConfig() {
+        DefaultSyncConfig.Group groupConfig = config.group();
+
+        assertNotNull(groupConfig);
+        assertAuthorizableConfig(groupConfig);
+    }
+}
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContextTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContextTest.java?rev=1740114&r1=1740113&r2=1740114&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContextTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncContextTest.java
 Wed Apr 20 11:22:57 2016
@@ -24,7 +24,6 @@ import java.util.Calendar;
 import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.UUID;
@@ -40,13 +39,12 @@ import com.google.common.collect.Immutab
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Iterables;
-import com.google.common.collect.Iterators;
 import com.google.common.collect.Lists;
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.api.security.user.Group;
 import org.apache.jackrabbit.api.security.user.User;
 import org.apache.jackrabbit.api.security.user.UserManager;
-import org.apache.jackrabbit.oak.AbstractSecurityTest;
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.AbstractExternalAuthTest;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalGroup;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentity;
 import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityException;
@@ -69,10 +67,9 @@ import static org.junit.Assert.assertNul
 import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 
-public class DefaultSyncContextTest extends AbstractSecurityTest {
+public class DefaultSyncContextTest extends AbstractExternalAuthTest {
 
     private TestIdentityProvider idp = new TestIdentityProvider();
-    private DefaultSyncConfig config = new DefaultSyncConfig();
 
     private DefaultSyncContext syncCtx;
 
@@ -81,7 +78,7 @@ public class DefaultSyncContextTest exte
     @Before
     public void before() throws Exception {
         super.before();
-        syncCtx = new DefaultSyncContext(config, idp, getUserManager(root), 
getValueFactory());
+        syncCtx = new DefaultSyncContext(syncConfig, idp, 
getUserManager(root), getValueFactory());
     }
 
     @After
@@ -90,13 +87,6 @@ public class DefaultSyncContextTest exte
             syncCtx.close();
             root.refresh();
             UserManager umgr = getUserManager(root);
-            Iterator<ExternalIdentity> ids = 
Iterators.concat(idp.listGroups(), idp.listUsers());
-            while (ids.hasNext()) {
-                Authorizable a = umgr.getAuthorizable(ids.next().getId());
-                if (a != null) {
-                    a.remove();
-                }
-            }
             for (String id : authorizableIds) {
                 Authorizable a = umgr.getAuthorizable(id);
                 if (a != null) {
@@ -109,6 +99,11 @@ public class DefaultSyncContextTest exte
         }
     }
 
+    @Override
+    protected DefaultSyncConfig createSyncConfig() {
+        return new DefaultSyncConfig();
+    }
+
     private Group createTestGroup() throws Exception {
         Group gr = getUserManager(root).createGroup("group" + 
UUID.randomUUID());
         authorizableIds.add(gr.getID());
@@ -459,7 +454,7 @@ public class DefaultSyncContextTest exte
     public void testSyncAutoMembership() throws Exception {
         Group gr = createTestGroup();
 
-        config.user().setAutoMembership(gr.getID());
+        syncConfig.user().setAutoMembership(gr.getID());
 
         SyncResult result = syncCtx.sync(idp.listUsers().next());
         assertEquals(SyncResult.Status.ADD, result.getStatus());
@@ -470,7 +465,7 @@ public class DefaultSyncContextTest exte
 
     @Test
     public void testSyncAutoMembershipListsNonExistingGroup() throws Exception 
{
-        config.user().setAutoMembership("nonExistingGroup");
+        syncConfig.user().setAutoMembership("nonExistingGroup");
 
         SyncResult result = syncCtx.sync(idp.listUsers().next());
         assertEquals(SyncResult.Status.ADD, result.getStatus());
@@ -479,7 +474,7 @@ public class DefaultSyncContextTest exte
     @Test
     public void testSyncAutoMembershipListsUser() throws Exception {
         // set auto-membership config to point to a user instead a group
-        config.user().setAutoMembership(getTestUser().getID());
+        syncConfig.user().setAutoMembership(getTestUser().getID());
         syncCtx.sync(idp.listUsers().next());
     }
 
@@ -500,15 +495,15 @@ public class DefaultSyncContextTest exte
 
         // enforce synchronization of the user and it's group membership
         syncCtx.setForceUserSync(true);
-        config.user().setMembershipExpirationTime(-1);
+        syncConfig.user().setMembershipExpirationTime(-1);
 
         // 1. membership nesting is < 0 => membership not synchronized
-        config.user().setMembershipNestingDepth(-1);
+        syncConfig.user().setMembershipNestingDepth(-1);
         syncCtx.sync(user.getID()).getStatus();
         assertTrue(gr.isDeclaredMember(user));
 
         // 2. membership nesting is > 0 => membership gets synchronized
-        config.user().setMembershipNestingDepth(1);
+        syncConfig.user().setMembershipNestingDepth(1);
         assertEquals(SyncResult.Status.UPDATE, 
syncCtx.sync(user.getID()).getStatus());
 
         assertFalse(gr.isDeclaredMember(user));
@@ -530,8 +525,8 @@ public class DefaultSyncContextTest exte
 
         // enforce synchronization of the user and it's group membership
         syncCtx.setForceUserSync(true);
-        config.user().setMembershipExpirationTime(-1);
-        config.user().setMembershipNestingDepth(1);
+        syncConfig.user().setMembershipExpirationTime(-1);
+        syncConfig.user().setMembershipNestingDepth(1);
 
         assertEquals(SyncResult.Status.UPDATE, 
syncCtx.sync(user.getID()).getStatus());
 
@@ -891,7 +886,7 @@ public class DefaultSyncContextTest exte
     @Test
     public void testIsExpiredLocalGroup() throws Exception {
         Group gr = createTestGroup();
-        assertTrue(syncCtx.isExpired(gr, config.group().getExpirationTime(), 
"any"));
+        assertTrue(syncCtx.isExpired(gr, 
syncConfig.group().getExpirationTime(), "any"));
     }
 
     @Test
@@ -899,7 +894,7 @@ public class DefaultSyncContextTest exte
         Group gr = createTestGroup();
         gr.setProperty(DefaultSyncContext.REP_LAST_SYNCED, new Value[0]);
 
-        assertTrue(syncCtx.isExpired(gr, config.group().getExpirationTime(), 
"any"));
+        assertTrue(syncCtx.isExpired(gr, 
syncConfig.group().getExpirationTime(), "any"));
     }
 
     @Test
@@ -908,16 +903,16 @@ public class DefaultSyncContextTest exte
         sync(externalUser);
 
         Authorizable a = 
getUserManager(root).getAuthorizable(externalUser.getId());
-        assertFalse(syncCtx.isExpired(a, config.user().getExpirationTime(), 
"any"));
+        assertFalse(syncCtx.isExpired(a, 
syncConfig.user().getExpirationTime(), "any"));
         assertTrue(syncCtx.isExpired(a, -1, "any"));
 
         // create a ctx with a newer 'now'
-        DefaultSyncContext ctx = new DefaultSyncContext(config, idp, 
getUserManager(root), getValueFactory());
+        DefaultSyncContext ctx = new DefaultSyncContext(syncConfig, idp, 
getUserManager(root), getValueFactory());
         assertTrue(ctx.isExpired(a, 1, "any"));
 
         // remove last-sync property
         a.removeProperty(DefaultSyncContext.REP_LAST_SYNCED);
-        assertTrue(syncCtx.isExpired(a, config.user().getExpirationTime(), 
"any"));
+        assertTrue(syncCtx.isExpired(a, syncConfig.user().getExpirationTime(), 
"any"));
     }
 
     @Test
@@ -926,16 +921,16 @@ public class DefaultSyncContextTest exte
         sync(externalGroup);
 
         Authorizable a = 
getUserManager(root).getAuthorizable(externalGroup.getId());
-        assertFalse(syncCtx.isExpired(a, config.group().getExpirationTime(), 
"any"));
+        assertFalse(syncCtx.isExpired(a, 
syncConfig.group().getExpirationTime(), "any"));
         assertTrue(syncCtx.isExpired(a, -1, "any"));
 
         // create a ctx with a newer 'now'
-        DefaultSyncContext ctx = new DefaultSyncContext(config, idp, 
getUserManager(root), getValueFactory());
+        DefaultSyncContext ctx = new DefaultSyncContext(syncConfig, idp, 
getUserManager(root), getValueFactory());
         assertTrue(ctx.isExpired(a, 1, "any"));
 
         // remove last-sync property
         a.removeProperty(DefaultSyncContext.REP_LAST_SYNCED);
-        assertTrue(syncCtx.isExpired(a, config.group().getExpirationTime(), 
"any"));
+        assertTrue(syncCtx.isExpired(a, 
syncConfig.group().getExpirationTime(), "any"));
     }
 
     @Test

Added: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncResultImplTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncResultImplTest.java?rev=1740114&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncResultImplTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncResultImplTest.java
 Wed Apr 20 11:22:57 2016
@@ -0,0 +1,64 @@
+/*
+ * 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.authentication.external.basic;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityRef;
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.SyncResult;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+
+public class DefaultSyncResultImplTest {
+
+    @Test
+    public void testGetIdentityFromNull() {
+        SyncResult res = new DefaultSyncResultImpl(null, 
SyncResult.Status.NOP);
+        assertNull(res.getIdentity());
+    }
+
+    @Test
+    public void testGetIdentity() {
+        List<DefaultSyncedIdentity> l = new ArrayList();
+        l.add(new DefaultSyncedIdentity("id", null, true, -1));
+        l.add(new DefaultSyncedIdentity("id", new ExternalIdentityRef("id", 
"idp"), false, 500));
+
+        for (DefaultSyncedIdentity si : l) {
+            assertEquals(si, new DefaultSyncResultImpl(si, 
SyncResult.Status.NOP).getIdentity());
+        }
+    }
+
+    @Test
+    public void testGetStatus() {
+        for (SyncResult.Status s : SyncResult.Status.values()) {
+            assertSame(s, new DefaultSyncResultImpl(null, s).getStatus());
+        }
+    }
+
+    @Test
+    public void testSetStatus() {
+        DefaultSyncResultImpl res = new DefaultSyncResultImpl(null, 
SyncResult.Status.NOP);
+        for (SyncResult.Status s : SyncResult.Status.values()) {
+            res.setStatus(s);
+            assertSame(s, res.getStatus());
+        }
+    }
+}
\ No newline at end of file

Added: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncedIdentityTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncedIdentityTest.java?rev=1740114&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncedIdentityTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/DefaultSyncedIdentityTest.java
 Wed Apr 20 11:22:57 2016
@@ -0,0 +1,85 @@
+/*
+ * 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.authentication.external.basic;
+
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalGroup;
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityProvider;
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalUser;
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.SyncedIdentity;
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.TestIdentityProvider;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+public class DefaultSyncedIdentityTest {
+
+    private final ExternalIdentityProvider idp = new TestIdentityProvider();
+
+    private ExternalUser externalUser;
+    private ExternalGroup externalGroup;
+
+    private SyncedIdentity si;
+    private SyncedIdentity siGroup;
+
+    @Before
+    public void before() throws Exception {
+        externalUser = idp.getUser(TestIdentityProvider.ID_TEST_USER);
+        assertNotNull(externalUser);
+        si = new DefaultSyncedIdentity(externalUser.getId(), 
externalUser.getExternalId(), false, 234);
+
+        externalGroup = idp.listGroups().next();
+        siGroup = new DefaultSyncedIdentity(externalGroup.getId(), 
externalGroup.getExternalId(), true, 234);
+    }
+
+    @Test
+    public void testGetId() {
+        assertEquals(externalUser.getId(), si.getId());
+        assertEquals(externalGroup.getId(), siGroup.getId());
+
+        SyncedIdentity siOtherId = new DefaultSyncedIdentity("otherId", 
externalUser.getExternalId(), false, -1);
+        assertEquals("otherId", siOtherId.getId());
+    }
+
+    @Test
+    public void testGetExternalIdRef() {
+        assertEquals(externalUser.getExternalId(), si.getExternalIdRef());
+        assertEquals(externalGroup.getExternalId(), 
siGroup.getExternalIdRef());
+
+        SyncedIdentity siNullExtRef = new 
DefaultSyncedIdentity(TestIdentityProvider.ID_TEST_USER, null, false, 234);
+        assertNull(siNullExtRef.getExternalIdRef());
+    }
+
+    @Test
+    public void testIsGroup() {
+        assertFalse(si.isGroup());
+        assertTrue(siGroup.isGroup());
+    }
+
+    @Test
+    public void testLastSynced() {
+        assertEquals(234, si.lastSynced());
+        assertEquals(234, siGroup.lastSynced());
+
+        SyncedIdentity siNeverSynced = new 
DefaultSyncedIdentity(TestIdentityProvider.ID_TEST_USER, 
externalUser.getExternalId(), false, -1);
+        assertEquals(-1, siNeverSynced.lastSynced());
+    }
+}
\ No newline at end of file

Added: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/RepExternalIdTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/RepExternalIdTest.java?rev=1740114&view=auto
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/RepExternalIdTest.java
 (added)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/basic/RepExternalIdTest.java
 Wed Apr 20 11:22:57 2016
@@ -0,0 +1,90 @@
+/*
+ * 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.authentication.external.basic;
+
+import javax.annotation.Nonnull;
+
+import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.oak.api.PropertyState;
+import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.api.Type;
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.AbstractExternalAuthTest;
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityRef;
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.SyncResult;
+import 
org.apache.jackrabbit.oak.spi.security.authentication.external.SyncedIdentity;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+
+public class RepExternalIdTest extends AbstractExternalAuthTest {
+
+    private DefaultSyncContext syncCtx;
+
+    @Before
+    public void before() throws Exception {
+        super.before();
+
+        syncCtx = new DefaultSyncContext(syncConfig, idp, 
getUserManager(root), getValueFactory());
+    }
+
+    @Override
+    public void after() throws Exception {
+        try {
+            syncCtx.close();
+        } finally {
+            super.after();
+        }
+    }
+
+    private void assertRepExternalId(@Nonnull SyncResult result) throws 
Exception {
+        assertSame(SyncResult.Status.ADD, result.getStatus());
+        SyncedIdentity si = result.getIdentity();
+        assertNotNull(si);
+
+
+        Authorizable authorizable = 
getUserManager(root).getAuthorizable(si.getId());
+        assertNotNull(authorizable);
+
+        Tree userTree = root.getTree(authorizable.getPath());
+        assertTrue(userTree.hasProperty(DefaultSyncContext.REP_EXTERNAL_ID));
+
+        PropertyState ps = 
userTree.getProperty(DefaultSyncContext.REP_EXTERNAL_ID);
+        assertNotNull(ps);
+        assertFalse(ps.isArray());
+        assertSame(Type.STRING, ps.getType());
+        assertEquals(si.getExternalIdRef(), 
ExternalIdentityRef.fromString(ps.getValue(Type.STRING)));
+    }
+
+    @Test
+    public void syncExternalUser() throws Exception {
+        SyncResult res = syncCtx.sync(idp.getUser(USER_ID));
+
+        assertRepExternalId(res);
+    }
+
+    @Test
+    public void syncExternalGroup() throws Exception {
+        SyncResult res = syncCtx.sync(idp.listGroups().next());
+
+        assertRepExternalId(res);
+    }
+}
\ No newline at end of file

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/CustomCredentialsSupportTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/CustomCredentialsSupportTest.java?rev=1740114&r1=1740113&r2=1740114&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/CustomCredentialsSupportTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/CustomCredentialsSupportTest.java
 Wed Apr 20 11:22:57 2016
@@ -52,8 +52,6 @@ import static org.junit.Assert.fail;
  */
 public class CustomCredentialsSupportTest extends ExternalLoginModuleTestBase {
 
-    private final IDP idp = new IDP();
-
     private static void assertAttributes(@Nonnull Map<String, ?> expected, 
@Nonnull AuthInfo info) {
         assertEquals(expected.size(), info.getAttributeNames().length);
         for (String aName : info.getAttributeNames()) {
@@ -69,7 +67,7 @@ public class CustomCredentialsSupportTes
         try {
             AuthInfo info = cs.getAuthInfo();
             assertEquals("testUser", info.getUserID());
-            assertAttributes(idp.getAttributes(creds), info);
+            assertAttributes(((IDP) idp).getAttributes(creds), info);
         } finally {
             cs.close();
         }
@@ -93,12 +91,7 @@ public class CustomCredentialsSupportTes
 
     @Override
     protected ExternalIdentityProvider createIDP() {
-        return idp;
-    }
-
-    @Override
-    protected void destroyIDP(ExternalIdentityProvider idp) {
-        // ignore
+        return new IDP();
     }
 
     private static final class TestCredentials implements Credentials {

Modified: 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/DefaultSyncHandlerTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/DefaultSyncHandlerTest.java?rev=1740114&r1=1740113&r2=1740114&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/DefaultSyncHandlerTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/DefaultSyncHandlerTest.java
 Wed Apr 20 11:22:57 2016
@@ -75,15 +75,6 @@ public class DefaultSyncHandlerTest exte
         super.after();
     }
 
-    protected ExternalIdentityProvider createIDP() {
-        return new TestIdentityProvider();
-    }
-
-    @Override
-    protected void destroyIDP(ExternalIdentityProvider idp) {
-    // ignore
-    }
-
     @Override
     protected void setSyncConfig(DefaultSyncConfig cfg) {
         if (cfg != null) {



Reply via email to