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