/** * Licensed to The Apereo Foundation under one or more contributor license * agreements. See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * * The Apereo Foundation licenses this file to you under the Educational * Community 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://opensource.org/licenses/ecl2.txt * * 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.opencastproject.kernel.userdirectory; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import org.opencastproject.security.api.DefaultOrganization; import org.opencastproject.security.api.JaxbOrganization; import org.opencastproject.security.api.JaxbRole; import org.opencastproject.security.api.JaxbUser; import org.opencastproject.security.api.Role; import org.opencastproject.security.api.RoleProvider; import org.opencastproject.security.api.SecurityService; import org.opencastproject.security.api.User; import org.opencastproject.security.api.UserProvider; import org.apache.commons.collections.IteratorUtils; import org.easymock.EasyMock; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.List; import java.util.Set; /** * Tests the combined user and role directory service. */ public class UserAndRoleDirectoryServiceImplTest { /** The user and role directory */ private UserAndRoleDirectoryServiceImpl directory = null; /** A username */ private String userName = null; /** An organization */ private JaxbOrganization org = null; private JaxbRole role1; private JaxbRole role2; private JaxbRole role3; @Before public void setUp() throws Exception { org = new DefaultOrganization(); userName = "sampleUser"; role1 = new JaxbRole("role1", org); role2 = new JaxbRole("role2", org); role3 = new JaxbRole("role3", org); JaxbUser user1 = new JaxbUser(userName, "matterhorn", org, role1, role2); user1.setManageable(true); User user2 = new JaxbUser(userName, "secret", "test", true, org, role2, role3); User user3 = new JaxbUser("userSample", "test", org, role2, role3); List<User> users = new ArrayList<User>(); users.add(user1); UserProvider provider1 = EasyMock.createNiceMock(UserProvider.class); EasyMock.expect(provider1.getOrganization()).andReturn(org.getId()).anyTimes(); EasyMock.expect(provider1.loadUser((String) EasyMock.anyObject())).andReturn(user1).anyTimes(); EasyMock.expect(provider1.findUsers("%mple%", 0, 0)).andReturn(users.iterator()).once(); EasyMock.expect(provider1.findUsers("%mple%", 0, 0)).andReturn(users.iterator()).once(); EasyMock.expect(provider1.getUsers()).andReturn(users.iterator()).once(); EasyMock.expect(provider1.getName()).andReturn("test").once(); List<User> users2 = new ArrayList<User>(); users2.add(user3); UserProvider provider2 = EasyMock.createNiceMock(UserProvider.class); EasyMock.expect(provider2.getOrganization()).andReturn(org.getId()).anyTimes(); EasyMock.expect(provider2.loadUser((String) EasyMock.anyObject())).andReturn(user2).anyTimes(); EasyMock.expect(provider2.findUsers("%mple%", 0, 0)).andReturn(users2.iterator()).once(); EasyMock.expect(provider2.findUsers("%mple%", 0, 0)).andReturn(users2.iterator()).once(); EasyMock.expect(provider2.getUsers()).andReturn(users2.iterator()).once(); EasyMock.expect(provider2.getName()).andReturn("matterhorn").once(); List<Role> roles1 = new ArrayList<Role>(); roles1.add(new JaxbRole("ROLE_ASTRO_2011", org)); roles1.add(new JaxbRole("ROLE_ASTRO_2012", org)); List<Role> rolesForUser1 = new ArrayList<Role>(); rolesForUser1.add(new JaxbRole("ROLE_ASTRO_2012", org)); List<Role> findRoles1 = new ArrayList<Role>(); findRoles1.add(new JaxbRole("ROLE_ASTRO_2012", org)); RoleProvider roleProvider1 = EasyMock.createNiceMock(RoleProvider.class); EasyMock.expect(roleProvider1.getOrganization()).andReturn(org.getId()).anyTimes(); EasyMock.expect(roleProvider1.getRoles()).andReturn(roles1.iterator()).anyTimes(); EasyMock.expect(roleProvider1.getRolesForUser((String) EasyMock.anyObject())).andReturn(rolesForUser1).anyTimes(); EasyMock.expect(roleProvider1.findRoles("%2012%", Role.Target.ALL, 0, 0)).andReturn(findRoles1.iterator()).once(); EasyMock.expect(roleProvider1.findRoles("%2012%", Role.Target.ALL, 0, 0)).andReturn(findRoles1.iterator()).once(); List<Role> roles2 = new ArrayList<Role>(); roles2.add(new JaxbRole("ROLE_MATH_2011", org)); roles2.add(new JaxbRole("ROLE_MATH_2012", org)); List<Role> rolesForUser2 = new ArrayList<Role>(); rolesForUser2.add(new JaxbRole("ROLE_MATH_2012", org)); List<Role> findRoles2 = new ArrayList<Role>(); findRoles2.add(new JaxbRole("ROLE_MATH_2012", org)); RoleProvider roleProvider2 = EasyMock.createNiceMock(RoleProvider.class); EasyMock.expect(roleProvider2.getOrganization()).andReturn(org.getId()).anyTimes(); EasyMock.expect(roleProvider2.getRoles()).andReturn(roles2.iterator()).anyTimes(); EasyMock.expect(roleProvider2.getRolesForUser((String) EasyMock.anyObject())).andReturn(rolesForUser2).anyTimes(); EasyMock.expect(roleProvider2.findRoles("%2012%", Role.Target.ALL, 0, 0)).andReturn(findRoles2.iterator()).once(); EasyMock.expect(roleProvider2.findRoles("%2012%", Role.Target.ALL, 0, 0)).andReturn(findRoles2.iterator()).once(); RoleProvider otherOrgRoleProvider = EasyMock.createNiceMock(RoleProvider.class); EasyMock.expect(otherOrgRoleProvider.getOrganization()).andReturn("otherOrg").anyTimes(); EasyMock.expect(otherOrgRoleProvider.getRoles()).andReturn(roles2.iterator()).anyTimes(); EasyMock.expect(otherOrgRoleProvider.getRolesForUser((String) EasyMock.anyObject())).andReturn(rolesForUser2) .anyTimes(); EasyMock.expect(otherOrgRoleProvider.findRoles("%2012%", Role.Target.ALL, 0, 0)).andReturn(new ArrayList<Role>().iterator()) .anyTimes(); SecurityService securityService = EasyMock.createNiceMock(SecurityService.class); EasyMock.expect(securityService.getOrganization()).andReturn(org).anyTimes(); EasyMock.replay(provider1, provider2, roleProvider1, roleProvider2, otherOrgRoleProvider, securityService); directory = new UserAndRoleDirectoryServiceImpl(); directory.activate(null); directory.setSecurityService(securityService); directory.addUserProvider(provider1); directory.addUserProvider(provider2); directory.addRoleProvider(roleProvider1); directory.addRoleProvider(roleProvider2); directory.addRoleProvider(otherOrgRoleProvider); } @Test public void testUserMerge() throws Exception { User mergedUser = directory.loadUser(userName); Set<Role> roles = mergedUser.getRoles(); assertTrue(roles.contains(role1)); assertTrue(roles.contains(role2)); assertTrue(roles.contains(role3)); assertNotNull(mergedUser.getPassword()); assertEquals(org.getId(), mergedUser.getOrganization().getId()); assertEquals(userName, mergedUser.getUsername()); assertEquals("matterhorn,test", mergedUser.getProvider()); assertTrue(mergedUser.isManageable()); assertTrue(((JaxbUser) mergedUser).isManageable()); } @Test @SuppressWarnings("unchecked") public void testGetRoles() { List<Role> roles = IteratorUtils.toList(directory.getRoles()); Assert.assertEquals(4, roles.size()); } @Test @SuppressWarnings("unchecked") public void testGetUsers() { List<User> users = IteratorUtils.toList(directory.getUsers()); Assert.assertEquals(2, users.size()); } @Test @SuppressWarnings("unchecked") public void testFindUsers() { List<User> users = IteratorUtils.toList(directory.findUsers("%mple%", 0, 0)); Assert.assertEquals(2, users.size()); Assert.assertTrue(userName.equals(users.get(0).getUsername()) || userName.equals(users.get(1).getUsername())); Assert.assertTrue("userSample".equals(users.get(0).getUsername()) || "userSample".equals(users.get(1).getUsername())); // Test limit and offset users = IteratorUtils.toList(directory.findUsers("%mple%", 1, 1)); Assert.assertEquals(1, users.size()); } @Test @SuppressWarnings("unchecked") public void testFindRoles() { List<Role> roles = IteratorUtils.toList(directory.findRoles("%2012%", Role.Target.ALL, 0, 0)); Assert.assertEquals(2, roles.size()); Assert.assertTrue("ROLE_MATH_2012".equals(roles.get(0).getName()) || "ROLE_MATH_2012".equals(roles.get(1).getName())); Assert.assertTrue("ROLE_ASTRO_2012".equals(roles.get(0).getName()) || "ROLE_ASTRO_2012".equals(roles.get(1).getName())); // Test limit and offset roles = IteratorUtils.toList(directory.findRoles("%2012%", Role.Target.ALL, 1, 1)); Assert.assertEquals(1, roles.size()); Assert.assertTrue("ROLE_ASTRO_2012".equals(roles.get(0).getName()) || "ROLE_MATH_2012".equals(roles.get(0).getName())); } }