/*
* (C) Copyright 2006-2007 Nuxeo SA (http://nuxeo.com/) and others.
*
* Licensed 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.
*
* Contributors:
* Florent Guillaume
*
* $Id: TestUserService.java 28010 2007-12-07 19:23:44Z fguillaume $
*/
package org.nuxeo.ecm.platform.usermanager;
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;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.nuxeo.ecm.platform.usermanager.UserManager.MatchType;
import org.nuxeo.runtime.api.Framework;
import org.nuxeo.runtime.test.NXRuntimeTestCase;
/**
* @author Florent Guillaume
*/
public class TestUserService extends NXRuntimeTestCase {
UserManager userManager;
@Before
public void setUp() throws Exception {
super.setUp();
deployContrib("org.nuxeo.ecm.platform.usermanager", "OSGI-INF/UserService.xml");
deployContrib("org.nuxeo.ecm.platform.usermanager.tests", "test-userservice-config.xml");
userManager = Framework.getService(UserManager.class);
}
@Test
public void testGetUserManagerFromFramework() {
assertNotNull(userManager);
}
@Test
public void testConfig() throws Exception {
FakeUserManagerImpl fum = (FakeUserManagerImpl) userManager;
assertEquals("search_only", userManager.getUserListingMode());
assertEquals("search_oh_yeah", userManager.getGroupListingMode());
assertEquals(Arrays.asList("tehroot"), fum.defaultAdministratorIds);
assertEquals(Collections.<String> emptyList(), fum.administratorsGroups);
assertEquals("defgr", userManager.getDefaultGroup());
assertEquals("name", userManager.getUserSortField());
assertEquals("sn", fum.groupSortField);
assertEquals("somedir", fum.userDirectoryName);
assertEquals("mail", fum.userEmailField);
// append mode:
assertEquals(new HashSet<>(Arrays.asList("first", "last", "username", "firstName", "lastName", "email")),
fum.getUserSearchFields());
assertEquals(MatchType.SUBSTRING, fum.userSearchFields.get("username"));
assertEquals(MatchType.SUBSTRING, fum.userSearchFields.get("firstName"));
assertEquals(MatchType.SUBSTRING, fum.userSearchFields.get("lastName"));
assertEquals(MatchType.SUBSTRING, fum.userSearchFields.get("first"));
assertEquals(MatchType.EXACT, fum.userSearchFields.get("last"));
assertEquals(MatchType.SUBSTRING, fum.userSearchFields.get("email"));
assertEquals("somegroupdir", fum.groupDirectoryName);
assertEquals("members", fum.groupMembersField);
assertEquals("subg", fum.groupSubGroupsField);
assertEquals("parentg", fum.groupParentGroupsField);
// anonymous user
Map<String, Serializable> props = new HashMap<String, Serializable>();
props.put("first", "Anonymous");
props.put("last", "Coward");
assertEquals("Guest", fum.getAnonymousUserId());
assertEquals(props, fum.anonymousUser.getProperties());
// virtual users
// custom admin
assertTrue(fum.virtualUsers.containsKey("MyCustomAdministrator"));
VirtualUser customAdmin = fum.virtualUsers.get("MyCustomAdministrator");
assertNotNull(customAdmin);
assertEquals("MyCustomAdministrator", customAdmin.getId());
assertEquals(1, customAdmin.getGroups().size());
assertTrue(customAdmin.getGroups().contains("administrators"));
assertEquals("secret", customAdmin.getPassword());
props.clear();
props.put("first", "My Custom");
props.put("last", "Administrator");
assertEquals(props, customAdmin.getProperties());
// custom member
assertTrue(fum.virtualUsers.containsKey("MyCustomMember"));
VirtualUser customMember = fum.virtualUsers.get("MyCustomMember");
assertNotNull(customMember);
assertEquals("MyCustomMember", customMember.getId());
assertEquals(2, customMember.getGroups().size());
assertTrue(customMember.getGroups().contains("members"));
assertTrue(customMember.getGroups().contains("othergroup"));
assertEquals("secret", customMember.getPassword());
props.clear();
props.put("first", "My Custom");
props.put("last", "Member");
assertEquals(props, customMember.getProperties());
}
@Test
public void testOverride() throws Exception {
deployContrib("org.nuxeo.ecm.platform.usermanager.tests", "test-userservice-override-config.xml");
userManager = Framework.getService(UserManager.class);
FakeUserManagerImpl fum = (FakeUserManagerImpl) userManager;
assertEquals(Arrays.asList("tehroot", "bob", "bobette"), fum.defaultAdministratorIds);
assertEquals(Arrays.asList("myAdministrators"), fum.administratorsGroups);
assertEquals("id", userManager.getUserSortField());
// the rest should be unchanged
assertEquals("search_only", userManager.getUserListingMode());
assertEquals("search_oh_yeah", userManager.getGroupListingMode());
assertEquals("defgr", userManager.getDefaultGroup());
assertEquals("sn", fum.groupSortField);
// anonymous user removed
assertNull(fum.anonymousUser);
// custom admin overridden
assertTrue(fum.virtualUsers.containsKey("MyCustomAdministrator"));
VirtualUser customAdmin = fum.virtualUsers.get("MyCustomAdministrator");
assertNotNull(customAdmin);
assertEquals("MyCustomAdministrator", customAdmin.getId());
assertEquals(1, customAdmin.getGroups().size());
assertTrue(customAdmin.getGroups().contains("administrators2"));
assertEquals("secret2", customAdmin.getPassword());
Map<String, Serializable> props = new HashMap<String, Serializable>();
props.put("first", "My Custom 2");
props.put("last", "Administrator 2");
assertEquals(props, customAdmin.getProperties());
// custom member removed
assertFalse(fum.virtualUsers.containsKey("MyCustomMember"));
assertNull(fum.virtualUsers.get("MyCustomMember"));
}
@Test
public void testValidatePassword() throws Exception {
FakeUserManagerImpl fum = (FakeUserManagerImpl) userManager;
assertTrue(fum.validatePassword(""));
deployContrib("org.nuxeo.ecm.platform.usermanager.tests", "test-userservice-override-config.xml");
userManager = Framework.getService(UserManager.class);
fum = (FakeUserManagerImpl) userManager;
assertFalse(fum.validatePassword(""));
assertFalse(fum.validatePassword("azerty"));
assertFalse(fum.validatePassword("az\u00e9rtyyy"));
assertFalse(fum.validatePassword("aZeRtYuIoP"));
assertFalse(fum.validatePassword("aZ1\u00e9R2tY3"));
assertFalse(fum.validatePassword("aZE1RTY2"));
assertTrue(fum.validatePassword("aZ1eR2tY3"));
}
}