Package org.apache.felix.useradmin.impl

Source Code of org.apache.felix.useradmin.impl.UserAdminImplTest$StubUserAdminListenerList

/**
*  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.felix.useradmin.impl;

import java.util.Arrays;
import java.util.List;

import junit.framework.TestCase;

import org.apache.felix.useradmin.RoleFactory;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.service.event.Event;
import org.osgi.service.event.EventAdmin;
import org.osgi.service.useradmin.Authorization;
import org.osgi.service.useradmin.Group;
import org.osgi.service.useradmin.Role;
import org.osgi.service.useradmin.User;
import org.osgi.service.useradmin.UserAdminListener;

/**
* Test cases for {@link UserAdminImpl}.
*/
public class UserAdminImplTest extends TestCase {
   
    /**
     * Provides a stub implementation for {@link EventAdmin}.
     */
    static class StubEventAdmin implements EventAdmin {
       
        public void postEvent(Event event) {
        }

        public void sendEvent(Event event) {
        }
    }

    /**
     * Provides a stub implementation for {@link UserAdminListenerList}.
     */
    static class StubUserAdminListenerList implements UserAdminListenerList {

        public UserAdminListener[] getListeners() {
            return new UserAdminListener[0];
        }
    }

    private UserAdminImpl m_userAdmin;
    private RoleRepository m_roleRepository;
    private EventDispatcher m_dispatcher;

    /**
     * Tests that adding a basic member to a group works.
     */
    public void testAddGroupMemberOk() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
        Group group1 = (Group) m_userAdmin.createRole("group1", Role.GROUP);
       
        assertTrue(group1.addMember(user1));
        assertFalse(group1.addMember(user1));
    }

    /**
     * Tests that adding a required member to a group works.
     */
    public void testAddRequiredGroupMemberOk() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
        Group group1 = (Group) m_userAdmin.createRole("group1", Role.GROUP);
       
        assertTrue(group1.addRequiredMember(user1));
        assertFalse(group1.addRequiredMember(user1));
    }
   
    /**
     * Tests that adding a property of an invalid type to a role does not work and yields an exception.
     */
    public void testAddRolePropertyOfInvalidTypeFail() {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);
       
        try {
            user1.getProperties().put("key", Integer.valueOf(1));
           
            fail("Expected IllegalArgumentException!");
        } catch (IllegalArgumentException e) {
            // Ok; expected
        }
    }

    /**
     * Tests that adding a property to a role works.
     */
    public void testAddRolePropertyOk() {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);

        assertNull(user1.getProperties().get("key"));
       
        user1.getProperties().put("key", "value");

        assertEquals("value", user1.getProperties().get("key"));
    }

    /**
     * Tests that adding a credential of an invalid type to a user does not work and yields an exception.
     */
    public void testAddUserCredentialInvalidTypeFails() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
       
        try {
            user1.getCredentials().put("key", Integer.valueOf(1));
           
            fail("Expected IllegalArgumentException!");
        } catch (IllegalArgumentException e) {
            // Ok; expected
        }
    }

    /**
     * Tests that adding a String credential to a user works.
     */
    public void testAddUserCredentialOk() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);

        assertNull(user1.getCredentials().get("key"));

        user1.getCredentials().put("key", "value");

        assertEquals("value", user1.getCredentials().get("key"));
       
        user1.getCredentials().put("key2", "value2".getBytes());

        assertTrue(Arrays.equals("value2".getBytes(), (byte[]) user1.getCredentials().get("key2")));
    }

    /**
     * Tests that testing for basic group membership works.
     */
    public void testBasicGroupMembershipOk() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
        User user2 = (User) m_userAdmin.createRole("user2", Role.USER);
        User user3 = (User) m_userAdmin.createRole("user3", Role.USER);

        Group reqGroup = (Group) m_userAdmin.createRole("reqGroup", Role.GROUP);
        reqGroup.addMember(user1);
        reqGroup.addMember(user2);
        reqGroup.addMember(user3);
       
        Group group = (Group) m_userAdmin.createRole("group", Role.GROUP);
        group.addRequiredMember(reqGroup);
        group.addMember(user1);
        group.addMember(user2);

        Authorization auth = m_userAdmin.getAuthorization(user1);
        assertTrue(auth.hasRole("group"));
       
        auth = m_userAdmin.getAuthorization(user2);
        assertTrue(auth.hasRole("group"));
       
        auth = m_userAdmin.getAuthorization(user3);
        assertFalse(auth.hasRole("group"));
    }

    /**
     * Tests that changing a property to an invalid type does not work and yields an exception.
     */
    public void testChangeRolePropertyOfInvalidTypeFail() {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);
        user1.getProperties().put("key", "value");
       
        try {
            user1.getProperties().put("key", Integer.valueOf(1));
           
            fail("Expected IllegalArgumentException!");
        } catch (IllegalArgumentException e) {
            // Ok; expected
        }
    }

    /**
     * Tests that changing a property of a role works.
     */
    public void testChangeRolePropertyOk() {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);
        user1.getProperties().put("key", "value");

        assertEquals("value", user1.getProperties().get("key"));
       
        user1.getProperties().put("key", "changed");

        assertEquals("changed", user1.getProperties().get("key"));
    }

    /**
     * Tests that changing a credential of a user works.
     */
    public void testChangeUserCredentialOk() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
        user1.getCredentials().put("key", "value");

        assertEquals("value", user1.getCredentials().get("key"));
       
        user1.getCredentials().put("key", "changed");

        assertEquals("changed", user1.getCredentials().get("key"));
    }

    /**
     * Tests that creating an existing group does not succeed and yields null.
     */
    public void testCreateExistingGroupFail() {
        Role role = null;

        role = m_userAdmin.createRole("group1", Role.GROUP);
        assertNotNull(role);

        role = m_userAdmin.createRole("group1", Role.GROUP);
        assertNull(role);
    }

    /**
     * Tests that creating an existing role does not succeed and yields null.
     */
    public void testCreateExistingUserFail() {
        Role role = null;

        role = m_userAdmin.createRole("user1", Role.USER);
        assertNotNull(role);

        role = m_userAdmin.createRole("user1", Role.USER);
        assertNull(role);
    }

    /**
     * Tests that creating a role without a name does not succeed and yields an exception.
     */
    public void testCreateInvalidRoleNameFail() {
        try {
            m_userAdmin.createRole(null, Role.USER);
           
            fail("Expected an IllegalArgumentException!");
        } catch (IllegalArgumentException e) {
            // Ok; expected
        }
    }

    /**
     * Tests that creating a role with an invalid type does not succeed and yields an exception.
     */
    public void testCreateInvalidRoleTypeFail() {
        try {
            m_userAdmin.createRole("role1", Role.ROLE);
           
            fail("Expected an IllegalArgumentException!");
        } catch (IllegalArgumentException e) {
            // Ok; expected
        }
    }

    /**
     * Tests that creating a non-existing group succeeds and yields a valid role instance.
     */
    public void testCreateNonExistingGroupOk() {
        Role role = null;
       
        role = m_userAdmin.createRole("group1", Role.GROUP);
        assertNotNull(role);
        assertEquals("group1", role.getName());
    }

    /**
     * Tests that creating a non-existing role succeeds and yields a valid role instance.
     */
    public void testCreateNonExistingUserOk() {
        Role role = null;
       
        role = m_userAdmin.createRole("user1", Role.USER);
        assertNotNull(role);
        assertEquals("user1", role.getName());
    }

    /**
     * Tests that creating a role without a name does not succeed and yields an exception.
     */
    public void testCreateRoleWithEmptyNameFail() {
        try {
            m_userAdmin.createRole("", Role.USER);
           
            fail("Expected an IllegalArgumentException!");
        } catch (IllegalArgumentException e) {
            // Ok; expected
        }
    }

    /**
     * Tests that creating a {@link UserAdminImpl} with a null event dispatcher fails.
     */
    public void testCreateUserAdminImplWithNullDispatcherFail() {
        try {
            new UserAdminImpl(m_roleRepository, null);
           
            fail("Expected IllegalArgumentException!");
        } catch (IllegalArgumentException e) {
            // Ok; expected
        }
    }

    /**
     * Tests that creating a {@link UserAdminImpl} with a null role repository fails.
     */
    public void testCreateUserAdminImplWithNullRepositoryFail() {
        try {
            new UserAdminImpl(null, m_dispatcher);
           
            fail("Expected IllegalArgumentException!");
        } catch (IllegalArgumentException e) {
            // Ok; expected
        }
    }

    /**
     * Tests that obtaining the authorization for a non-existing user yields null.
     */
    public void testGetAuthorizationForAnonymousUserOk() {
        Authorization auth = m_userAdmin.getAuthorization(null);
       
        assertNotNull(auth);

        assertNull(auth.getRoles());
        assertNull(auth.getName());
    }

    /**
     * Tests that obtaining the authorization for a non-existing user yields null.
     */
    public void testGetAuthorizationForNonExistingUserOk() {
        User nonExistingUser = RoleFactory.createUser("non-existing-user");
        Authorization auth = m_userAdmin.getAuthorization(nonExistingUser);

        assertNotNull(auth);

        assertNull(auth.getRoles());
        assertNotNull(auth.getName());
    }

    /**
     * Tests that getting a existing group with an unique key-value pair does not work and yields null.
     */
    public void testGetExistingGroupFail() {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);
        user1.getProperties().put("key1", "value1");
        user1.getProperties().put("key2", "constant");
        Role user2 = m_userAdmin.createRole("user2", Role.USER);
        user2.getProperties().put("key1", "value2");
        user1.getProperties().put("key2", "constant");
        Role group1 = m_userAdmin.createRole("group1", Role.GROUP);
        group1.getProperties().put("key1", "value3");

        assertNull(m_userAdmin.getUser("key1", "value3"));
    }

    /**
     * Tests that getting roles based on existing names works correctly.
     */
    public void testGetExistingRolesOk() {
        m_userAdmin.createRole("user1", Role.USER);
        m_userAdmin.createRole("user2", Role.USER);
        m_userAdmin.createRole("user3", Role.USER);
        m_userAdmin.createRole("group1", Role.GROUP);
       
        assertEquals("user1", m_userAdmin.getRole("user1").getName());
        assertEquals("user2", m_userAdmin.getRole("user2").getName());
        assertEquals("user3", m_userAdmin.getRole("user3").getName());
        assertEquals("group1", m_userAdmin.getRole("group1").getName());
    }

    /**
     * Tests that getting an existing user with a non unique key-value pair does not work and yields null.
     */
    public void testGetExistingUserWithNonUniqueKeyValueFail() {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);
        user1.getProperties().put("key1", "value1");
        user1.getProperties().put("key2", "constant");
        Role user2 = m_userAdmin.createRole("user2", Role.USER);
        user2.getProperties().put("key1", "value2");
        user2.getProperties().put("key2", "constant");
        Role group1 = m_userAdmin.createRole("group1", Role.GROUP);
        group1.getProperties().put("key1", "value3");

        assertNull(m_userAdmin.getUser("key2", "constant"));
    }

    /**
     * Tests that getting an existing user with an unique key-value pair works and yields the expected result.
     */
    public void testGetExistingUserWithUniqueKeyValueOk() {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);
        user1.getProperties().put("key1", "value1");
        user1.getProperties().put("key2", "constant");
        Role user2 = m_userAdmin.createRole("user2", Role.USER);
        user2.getProperties().put("key1", "value2");
        user2.getProperties().put("key2", "constant");
        Role group1 = m_userAdmin.createRole("group1", Role.GROUP);
        group1.getProperties().put("key1", "value3");

        assertEquals(user1, m_userAdmin.getUser("key1", "value1"));
        assertEquals(user2, m_userAdmin.getUser("key1", "value2"));
    }

    /**
     * Tests that retrieving the basic members from a group works.
     */
    public void testGetGroupMemberOk() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
       
        Group group1 = (Group) m_userAdmin.createRole("group1", Role.GROUP);
        assertNull(group1.getMembers());
       
        assertTrue(group1.addMember(user1));
       
        assertEquals(1, group1.getMembers().length);
    }

    /**
     * Tests that getting a non existing role by its name does not work and yields null.
     */
    public void testGetNonExistingRoleFails() {
        assertNull(m_userAdmin.getRole("user1"));
    }

    /**
     * Tests that getting a non-existing user does not work and yields null.
     */
    public void testGetNonExistingUserFail() {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);
        user1.getProperties().put("key1", "value1");
        user1.getProperties().put("key2", "constant");
        Role user2 = m_userAdmin.createRole("user2", Role.USER);
        user2.getProperties().put("key1", "value2");
        user1.getProperties().put("key2", "constant");
        Role group1 = m_userAdmin.createRole("group1", Role.GROUP);
        group1.getProperties().put("key1", "value3");

        assertNull(m_userAdmin.getUser("key1", "value4"));
    }

    /**
     * Tests that getting roles based on a OSGi-filter that does not match any roles yields null.
     */
    public void testGetNonMatchingRolesOk() throws Exception {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);
        user1.getProperties().put("key", "value1");
        Role user2 = m_userAdmin.createRole("user2", Role.USER);
        user2.getProperties().put("key", "value2");
        Role group1 = m_userAdmin.createRole("group1", Role.GROUP);
        group1.getProperties().put("key", "value3");

        Role[] roles = m_userAdmin.getRoles("(nonExisting=value*)");
        assertNull(roles);
    }

    /**
     * Tests that getting predefined roles based on their names works correctly.
     */
    public void testGetPredefinedRolesOk() {
        assertEquals(Role.USER_ANYONE, m_userAdmin.getRole(Role.USER_ANYONE).getName());
    }

    /**
     * Tests that getting a removed role yields null.
     */
    public void testGetRemovedRoleFail() {
        m_userAdmin.createRole("user1", Role.USER);
        assertEquals("user1", m_userAdmin.getRole("user1").getName());
       
        assertTrue(m_userAdmin.removeRole("user1"));
        assertNull(m_userAdmin.getRole("user1"));
    }

    /**
     * Tests that retrieving the required members from a group works.
     */
    public void testGetRequiredGroupMemberOk() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
       
        Group group1 = (Group) m_userAdmin.createRole("group1", Role.GROUP);
        assertNull(group1.getRequiredMembers());
       
        assertTrue(group1.addRequiredMember(user1));
       
        assertEquals(1, group1.getRequiredMembers().length);
    }

    /**
     * Tests that getting the various names of defined roles works and yields the expected result.
     */
    public void testGetRoleNamesOk() {
        m_userAdmin.createRole("user1", Role.USER);
        m_userAdmin.createRole("group1", Role.GROUP);

        assertEquals(Role.USER_ANYONE, m_userAdmin.getRole(Role.USER_ANYONE).getName());
        assertEquals("user1", m_userAdmin.getRole("user1").getName());
        assertEquals("group1", m_userAdmin.getRole("group1").getName());
    }

    /**
     * Tests that getting multiple roles based on a OSGi-filter works and yields the correct result.
     */
    public void testGetRolesWithFilterOk() throws Exception {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);
        user1.getProperties().put("key", "value1");
        Role user2 = m_userAdmin.createRole("user2", Role.USER);
        user2.getProperties().put("key", "value2");
        Role group1 = m_userAdmin.createRole("group1", Role.GROUP);
        group1.getProperties().put("key", "value3");
        Role group2 = m_userAdmin.createRole("group2", Role.GROUP);
        group2.getProperties().put("key", "otherValue3");

        Role[] roles = m_userAdmin.getRoles("(key=value*)");
        assertNotNull(roles);

        assertEquals(3, roles.length);
       
        List roleList = Arrays.asList(roles);
        assertTrue(roleList.contains(user1));
        assertTrue(roleList.contains(user2));
        assertTrue(roleList.contains(group1));
    }

    /**
     * Tests that getting roles based on an invalid OSGi-filter yields an exception.
     */
    public void testGetRolesWithInvalidFilterFails() throws Exception {
        try {
            m_userAdmin.getRoles("(nonExisting=value*");

            fail("Expected an InvalidSyntaxException!");
        } catch (InvalidSyntaxException e) {
            // Ok; expected
        }
    }

    /**
     * Tests that getting multiple roles based on a OSGi-filter works and yields the correct result.
     */
    public void testGetRolesWithoutFilterOk() throws Exception {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);
        user1.getProperties().put("key", "value1");
        Role user2 = m_userAdmin.createRole("user2", Role.USER);
        user2.getProperties().put("key", "value2");
        Role group1 = m_userAdmin.createRole("group1", Role.GROUP);
        group1.getProperties().put("key", "value3");
        Role group2 = m_userAdmin.createRole("group2", Role.GROUP);
        group2.getProperties().put("key", "otherValue3");

        Role[] roles = m_userAdmin.getRoles(null);
        assertNotNull(roles);

        assertEquals(4, roles.length);
       
        List roleList = Arrays.asList(roles);
        assertTrue(roleList.contains(user1));
        assertTrue(roleList.contains(user2));
        assertTrue(roleList.contains(group1));
        assertTrue(roleList.contains(group2));
    }

    /**
     * Tests that getting the various types of defined roles works and yields the expected result.
     */
    public void testGetRoleTypesOk() {
        m_userAdmin.createRole("user1", Role.USER);
        m_userAdmin.createRole("group1", Role.GROUP);

        assertEquals(Role.ROLE, m_userAdmin.getRole(Role.USER_ANYONE).getType());
        assertEquals(Role.USER, m_userAdmin.getRole("user1").getType());
        assertEquals(Role.GROUP, m_userAdmin.getRole("group1").getType());
    }

    /**
     * Tests that testing for group membership with anonymous users works.
     */
    public void testGroupMembershipWithAnonymousUserOk() {
        Role user = m_userAdmin.createRole("user", Role.USER);

        Group group = (Group) m_userAdmin.createRole("group", Role.GROUP);
        group.addMember(user);

        Authorization auth = m_userAdmin.getAuthorization(null);
        assertTrue(auth.hasRole(Role.USER_ANYONE));
        assertFalse(auth.hasRole("group"));
    }

    /**
     * Tests that testing for group membership with "user.anyone" works.
     */
    public void testGroupMembershipWithUserAnyoneOk() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
        User user2 = (User) m_userAdmin.createRole("user2", Role.USER);
        User user3 = (User) m_userAdmin.createRole("user3", Role.USER);
        User user4 = (User) m_userAdmin.createRole("user4", Role.USER);

        Group reqGroup = (Group) m_userAdmin.createRole("reqGroup", Role.GROUP);
        reqGroup.addMember(user1);
        reqGroup.addMember(user2);
       
        Group group = (Group) m_userAdmin.createRole("group", Role.GROUP);
        group.addRequiredMember(reqGroup);
        group.addMember(m_userAdmin.getRole(Role.USER_ANYONE));

        Authorization auth = m_userAdmin.getAuthorization(user1);
        assertTrue(auth.hasRole("group"));

        auth = m_userAdmin.getAuthorization(user2);
        assertTrue(auth.hasRole("group"));

        auth = m_userAdmin.getAuthorization(user3);
        assertFalse(auth.hasRole("group"));

        auth = m_userAdmin.getAuthorization(user4);
        assertFalse(auth.hasRole("group"));
    }

    /**
     * Tests that testing the credentials for a user works and yields the correct result.
     */
    public void testHasUserCredentialOk() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
        user1.getCredentials().put("key1", "value");
        user1.getCredentials().put("key2", "value".getBytes());

        assertTrue(user1.hasCredential("key1", "value"));
        assertTrue(user1.hasCredential("key1", "value".getBytes()));
        assertTrue(user1.hasCredential("key2", "value"));
        assertTrue(user1.hasCredential("key2", "value".getBytes()));
        assertFalse(user1.hasCredential("otherKey", "value"));
    }

    /**
     * Tests that removing an existing role works.
     */
    public void testRemoveExistingRoleOk() {
        Role role = null;

        role = m_userAdmin.createRole("group1", Role.GROUP);
        assertNotNull(role);

        assertTrue(m_userAdmin.removeRole("group1"));
        assertFalse(m_userAdmin.removeRole("group1"));
    }

    /**
     * Tests that removing a non existing role does not work, yields a false result.
     */
    public void testRemoveNonExistingRoleOk() {
        assertFalse(m_userAdmin.removeRole("group1"));
    }

    /**
     * Tests that removing a predefined role does not work, and yields a false result.
     */
    public void testRemovePredefinedRoleOk() {
        assertFalse(m_userAdmin.removeRole(Role.USER_ANYONE));
    }

    /**
     * Tests that remove a property of a role works.
     */
    public void testRemoveRolePropertyOk() {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);
        user1.getProperties().put("key", "value");

        assertEquals("value", user1.getProperties().get("key"));
       
        user1.getProperties().remove("key");

        assertNull(user1.getProperties().get("key"));
    }

    /**
     * Tests that remove of a role also removes that role as member from any group (FELIX-3755).
     */
    public void testRemoveRoleRemovesItAsGroupMemberOk() {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);
        Role user2 = m_userAdmin.createRole("user2", Role.USER);

        Group group1 = (Group) m_userAdmin.createRole("group1", Role.GROUP);
        group1.addMember(user1);

        Group group2 = (Group) m_userAdmin.createRole("group2", Role.GROUP);
        group2.addMember(user1);
        group2.addMember(user2);
       
        // Remove user...
        m_userAdmin.removeRole(user1.getName());

        // Retrieve an up-to-date instance of the first group...
        group1 = (Group) m_userAdmin.getRole("group1");
        assertNull(group1.getMembers());

        // Retrieve an up-to-date instance of the second group...
        group2 = (Group) m_userAdmin.getRole("group2");

        Role[] members = group2.getMembers();
    assertNotNull(members);
    assertEquals(1, members.length);
        assertEquals(user2, members[0]);
    }

    /**
     * Tests that remove of a role also removes that role as required member from any group (FELIX-3755).
     */
    public void testRemoveRoleRemovesItAsRequiredGroupMemberOk() {
        Role user1 = m_userAdmin.createRole("user1", Role.USER);
        Role user2 = m_userAdmin.createRole("user2", Role.USER);

        Group group1 = (Group) m_userAdmin.createRole("group1", Role.GROUP);
        group1.addRequiredMember(user1);
        group1.addMember(user2);

        Group group2 = (Group) m_userAdmin.createRole("group2", Role.GROUP);
        group2.addRequiredMember(user1);
        group2.addRequiredMember(user2);

        // Remove user...
        m_userAdmin.removeRole(user1.getName());
       
        // Retrieve an up-to-date instance of the group...
        group1 = (Group) m_userAdmin.getRole("group1");
       
        assertNull(group1.getRequiredMembers());

        Role[] members = group1.getMembers();
    assertNotNull(members);
        assertEquals(1, members.length);
        assertEquals(user2, members[0]);
       
        // Retrieve an up-to-date instance of the group...
        group2 = (Group) m_userAdmin.getRole("group2");
       
        assertNull(group2.getMembers());

        members = group2.getRequiredMembers();
    assertNotNull(members);
        assertEquals(1, members.length);
        assertEquals(user2, members[0]);
    }

    /**
     * Tests that remove a credential of a user works.
     */
    public void testRemoveUserCredentialOk() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
        user1.getCredentials().put("key", "value");

        assertEquals("value", user1.getCredentials().get("key"));
       
        user1.getCredentials().remove("key");

        assertNull(user1.getCredentials().get("key"));
    }

    /**
     * Tests that removing a basic member from a group works.
     */
    public void testRemovingGroupMemberOk() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
        Group group1 = (Group) m_userAdmin.createRole("group1", Role.GROUP);
       
        assertTrue(group1.addMember(user1));
       
        assertTrue(group1.removeMember(user1));
        assertFalse(group1.removeMember(user1));
    }

    /**
     * Tests that removing a required member from a group works.
     */
    public void testRemovingRequiredGroupMemberOk() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
        Group group1 = (Group) m_userAdmin.createRole("group1", Role.GROUP);
       
        assertTrue(group1.addRequiredMember(user1));
       
        assertTrue(group1.removeMember(user1));
        assertFalse(group1.removeMember(user1));
    }

    /**
     * Tests that testing for required group membership works.
     */
    public void testRequiredGroupMembershipOk() {
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
        User user2 = (User) m_userAdmin.createRole("user2", Role.USER);
        User user3 = (User) m_userAdmin.createRole("user3", Role.USER);

        Group reqGroup = (Group) m_userAdmin.createRole("reqGroup", Role.GROUP);
        reqGroup.addMember(user1);
        reqGroup.addMember(user2);
        reqGroup.addMember(user3);
       
        Group group = (Group) m_userAdmin.createRole("group", Role.GROUP);
        group.addRequiredMember(reqGroup);

        Authorization auth = m_userAdmin.getAuthorization(user1);
        assertFalse(auth.hasRole("group"));

        auth = m_userAdmin.getAuthorization(user2);
        assertFalse(auth.hasRole("group"));
       
        auth = m_userAdmin.getAuthorization(user3);
        assertFalse(auth.hasRole("group"));
    }

    /**
     * Tests that the list of roles in an {@link Authorization} does not contain the any-user, although it is defined as group member.
     */
    public void testUserAnyoneIsNotPartOfAuthorizedRolesOk() {
        Role userAnyone = m_userAdmin.getRole(Role.USER_ANYONE);
        User user1 = (User) m_userAdmin.createRole("user1", Role.USER);
        Group group1 = (Group) m_userAdmin.createRole("group1", Role.GROUP);

        assertTrue(group1.addRequiredMember(user1));
        assertTrue(group1.addMember(userAnyone));
       
        Authorization auth = m_userAdmin.getAuthorization(user1);
        assertNotNull(auth);
       
        assertTrue(auth.hasRole("group1"));
       
        String[] roles = auth.getRoles();
        assertNotNull(roles);
       
        for (int i = 0; i < roles.length; i++) {
            assertFalse(Role.USER_ANYONE.equals(roles[i]));
        }
    }

    /**
     * {@inheritDoc}
     */
    protected void setUp() throws Exception {
        super.setUp();
       
        m_roleRepository = new RoleRepository(new MemoryRoleRepositoryStore());
        m_dispatcher = new EventDispatcher(new StubEventAdmin(), new StubUserAdminListenerList());

        m_userAdmin = new UserAdminImpl(m_roleRepository, m_dispatcher);
        m_dispatcher.start();
    }
   
    /**
     * {@inheritDoc}
     */
    protected void tearDown() throws Exception {
        m_dispatcher.stop();
       
        super.tearDown();
    }

}
TOP

Related Classes of org.apache.felix.useradmin.impl.UserAdminImplTest$StubUserAdminListenerList

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.