org.wso2.identity.integration.test.user.mgt.UserMgtServiceAbstractTestCase.java Source code

Java tutorial

Introduction

Here is the source code for org.wso2.identity.integration.test.user.mgt.UserMgtServiceAbstractTestCase.java

Source

/*
*  Copyright (c)  WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
*  WSO2 Inc. 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.wso2.identity.integration.test.user.mgt;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.wso2.carbon.automation.engine.annotations.ExecutionEnvironment;
import org.wso2.carbon.automation.engine.annotations.SetEnvironment;
import org.wso2.carbon.integration.common.admin.client.AuthenticatorClient;
import org.wso2.identity.integration.common.clients.UserManagementClient;
import org.wso2.identity.integration.common.utils.ISIntegrationTest;
import org.wso2.carbon.user.mgt.stub.types.carbon.ClaimValue;
import org.wso2.carbon.user.mgt.stub.types.carbon.FlaggedName;
import org.wso2.carbon.user.mgt.stub.types.carbon.UIPermissionNode;
import org.wso2.carbon.user.mgt.stub.types.carbon.UserRealmInfo;

public abstract class UserMgtServiceAbstractTestCase extends ISIntegrationTest {

    private static final Log log = LogFactory.getLog(UserMgtServiceAbstractTestCase.class);
    protected UserManagementClient userMgtClient;
    protected AuthenticatorClient loginManger;
    private String adminUsername;
    private String adminPassword;

    protected void testInit() throws Exception {
        super.init();

        userMgtClient = new UserManagementClient(backendURL, sessionCookie);
        loginManger = new AuthenticatorClient(backendURL);
        adminUsername = userInfo.getUserName();
        adminPassword = userInfo.getPassword();
    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Get all the role names")
    public void testGetAllRoleNames() throws Exception {
        Assert.assertTrue(nameExists(userMgtClient.listRoles("umRole1", 100), "umRole1"),
                "Getting all user role names has " + "failed.");
    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check role addition", dependsOnMethods = "testGetAllRoleNames")
    public void testAddRole() throws Exception {
        userMgtClient.addRole("umRole2", null, new String[] { "login" }, false);
        Assert.assertTrue(nameExists(userMgtClient.listRoles("umRole2", 100), "umRole2"),
                "Adding a user role has failed");
    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check delete role", dependsOnMethods = "testAddRole")
    public void testDeleteRole() throws Exception {
        userMgtClient.deleteRole("umRole2");
        Assert.assertFalse(nameExists(userMgtClient.listRoles("umRole2", 100), "umRole2"),
                "Deleting the added user role " + "has failed");

    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check delete role", dependsOnMethods = "testDeleteRole")
    public void testListAllUsers() throws Exception {
        Assert.assertTrue(nameExists(userMgtClient.listAllUsers("user1", 100), "user1"),
                "List all users has failed");
    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check delete role", dependsOnMethods = "testListAllUsers")
    public void testListUsers() throws Exception {
        boolean exists = false;
        FlaggedName[] usersList = userMgtClient.listAllUsers("user1", 100);
        for (FlaggedName user : usersList) {
            if ("user1".equals(user.getItemName())) {
                exists = true;
                break;
            }
        }
        Assert.assertTrue(exists, "List users has failed");
    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check internal role operations", dependsOnMethods = "testListUsers")
    public void testAddDeleteInternalRoleOperations() throws Exception {

        FlaggedName[] allRoles = null;
        String[] permissionList = new String[] { "/permission" };

        //       Test add internal role without user
        userMgtClient.addInternalRole("manager", null, permissionList);
        allRoles = userMgtClient.listRoles("manager", 0);

        Assert.assertTrue(nameExists(allRoles, "Internal/manager"), "The internal role add has failed");

        userMgtClient.deleteRole("Internal/manager");
        allRoles = userMgtClient.listRoles("manager", 0);
        Assert.assertFalse(nameExists(allRoles, "Internal/manager"),
                "The internal role without user delete has failed");

        String[] userList = new String[] { "user1" };
        //       Test add internal role with user
        userMgtClient.addInternalRole("sales", userList, permissionList);
        allRoles = userMgtClient.listRoles("sales", 0);

        Assert.assertTrue(nameExists(allRoles, "Internal/sales"), "The internal role add has failed");

        userMgtClient.deleteRole("Internal/sales");
        allRoles = userMgtClient.listRoles("manager", 0);
        Assert.assertFalse(nameExists(allRoles, "Internal/sales"), "The internal role with user delete has failed");
    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check add remove users of role ", dependsOnMethods = "testAddDeleteInternalRoleOperations")
    public void testAddRemoveUsersOfRole() throws Exception {

        String[] newUsers = new String[] { "user1" };
        String[] deletedUsers = new String[] { "user2" };

        userMgtClient.updateUserListOfRole("admin", newUsers, deletedUsers);

        Assert.assertTrue(nameExists(userMgtClient.getUsersOfRole("admin", "user1", 0), "user1"),
                "Getting user added to admin role failed");
        Assert.assertFalse(nameExists(userMgtClient.getUsersOfRole("admin", "user2", 0), "user2"),
                "User user2 still exists in the admin role");

        //       Clean up the modified users of role and test it.
        userMgtClient.updateUserListOfRole("admin", null, newUsers);
        Assert.assertFalse(nameExists(userMgtClient.getUsersOfRole("admin", "user1", 0), "user1"),
                "User user1 still exists in the admin role");
    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check add remove roles of user", dependsOnMethods = "testAddRemoveUsersOfRole")
    public void testAddRemoveRolesOfUser() throws Exception {

        String[] newRoles = new String[] { "umRole1" };
        String[] deletedRoles = new String[] { "umRole3" };

        userMgtClient.addRemoveRolesOfUser("user1", newRoles, deletedRoles);

        Assert.assertTrue(nameExists(userMgtClient.getRolesOfUser("user1", "umRole1", 0), "umRole1"),
                "Adding role to user1 has failed");
        Assert.assertFalse(nameExists(userMgtClient.getRolesOfUser("user1", "umRole3", 0), "umRole3"),
                "Role still exists in the user1 roles");

        //       Clean up the modified roles of user and test it.
        userMgtClient.addRemoveRolesOfUser("user1", null, newRoles);
        Assert.assertFalse(nameExists(userMgtClient.getRolesOfUser("user1", "umRole1", 0), "umRole1"),
                "Role still exists in the user1 roles");
    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check update users of role", dependsOnMethods = "testAddRemoveRolesOfUser")
    public void testUpdateUsersOfRole() throws Exception {

        String[] userList = new String[] { "user1", "user2" };
        FlaggedName[] userFlagList = new FlaggedName[userList.length];

        for (int i = 0; i < userFlagList.length; i++) {
            FlaggedName flaggedName = new FlaggedName();
            flaggedName.setItemName(userList[i]);
            flaggedName.setSelected(true);
            userFlagList[i] = flaggedName;
        }

        userMgtClient.updateUserListOfRole("umRole1", userList, null);
        Assert.assertTrue(nameExists(userMgtClient.getUsersOfRole("umRole1", "user1", 0), "user1"),
                "Adding user1 to role has failed");
        Assert.assertTrue(nameExists(userMgtClient.getUsersOfRole("umRole1", "user2", 0), "user2"),
                "Adding user2 to role has failed");

        //       Calling with same user list should delete the users.
        for (int i = 0; i < userFlagList.length; i++) {
            userFlagList[i].setSelected(false);
        }

        userMgtClient.updateUsersOfRole("umRole1", userFlagList);
        Assert.assertFalse(nameExists(userMgtClient.getUsersOfRole("umRole1", "user1", 0), "user1"),
                "Deleting user1 from role has failed");
        Assert.assertFalse(nameExists(userMgtClient.getUsersOfRole("umRole1", "user2", 0), "user2"),
                "Deleting user2 from role has failed");
    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check update role name", dependsOnMethods = "testUpdateUsersOfRole")
    public void testUpdateRoleName() throws Exception {

        loginManger.login(isServer.getSuperTenant().getTenantAdmin().getUserName(),
                isServer.getSuperTenant().getTenantAdmin().getPassword(),
                isServer.getInstance().getHosts().get("default"));

        userMgtClient.addRole("umRole7", null, new String[] { "login" }, false);
        userMgtClient.updateRoleName("umRole7", "umRole7_1");

        Assert.assertFalse(nameExists(userMgtClient.getAllRolesNames("umRole7", 10), "umRole7"),
                "Role umRole7 update failed.");
        Assert.assertTrue(nameExists(userMgtClient.getAllRolesNames("umRole7_1", 10), "umRole7_1"),
                "Updating role umRole7 to umRole7_1 has failed.");

        userMgtClient.deleteRole("umRole7_1");
        loginManger.logOut();
    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check update roles of user", dependsOnMethods = "testUpdateRoleName")
    public void testUpdateRolesOfUser() throws Exception {

        List<String> newRoleList = new ArrayList<String>();
        FlaggedName[] currentRoleList = userMgtClient.getRolesOfUser("user3", null, 0);
        if (currentRoleList != null) {
            for (FlaggedName role : currentRoleList) {
                if (role.getSelected()) {
                    newRoleList.add(role.getItemName());
                }
            }
        }

        if (!newRoleList.contains("umRole1")) {
            newRoleList.add("umRole1");
        }

        userMgtClient.updateRolesOfUser("user3", newRoleList.toArray(new String[newRoleList.size()]));
        Assert.assertTrue(nameExists(userMgtClient.getRolesOfUser("user3", "umRole1", 10), "umRole1"),
                "Adding umRole1 to user has failed");

        newRoleList.remove("umRole1");
        userMgtClient.updateRolesOfUser("user3", newRoleList.toArray(new String[newRoleList.size()]));
        Assert.assertFalse(nameExists(userMgtClient.getUsersOfRole("user3", "umRole1", 10), "umRole1"),
                "Deleting umRole1 from user has failed");

    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check change user password", dependsOnMethods = "testUpdateRolesOfUser")
    public void testChangePassword() throws Exception {

        loginManger.login("user4", "passWord1@", isServer.getInstance().getHosts().get("default"));
        loginManger.logOut();

        userMgtClient.changePassword("user4", "passWord2@");
        loginManger.logOut();

        String value = loginManger.login("user4", "passWord2@", isServer.getInstance().getHosts().get("default"));

        Assert.assertTrue((value.indexOf("JSESSIONID") != -1), "User password change failed.");
        //Before logout try to revert the password change
        userMgtClient.changePassword("user4", "passWord1@");
        loginManger.logOut();

    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check get shared of current user", dependsOnMethods = "testChangePassword")
    public void testGetRolesOfCurrentUser() throws Exception {

        userMgtClient.addRole("umRole5", new String[] { "user4" }, new String[] { "admin" }, false);

        loginManger.login("user4", "passWord1@", isServer.getInstance().getHosts().get("default"));

        Assert.assertTrue(nameExists(userMgtClient.getRolesOfCurrentUser(), "umRole5"),
                "Getting current user roles has failed.");

        loginManger.logOut();
        userMgtClient.deleteRole("umRole5");
    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check list users by claim value", dependsOnMethods = "testGetRolesOfCurrentUser")
    public void testListUserByClaim() throws Exception {

        ClaimValue claimValue = new ClaimValue();
        claimValue.setClaimURI("http://wso2.org/claims/lastname");
        claimValue.setValue("user3");

        loginManger.login(isServer.getSuperTenant().getTenantAdmin().getUserName(),
                isServer.getSuperTenant().getTenantAdmin().getPassword(),
                isServer.getInstance().getHosts().get("default"));

        FlaggedName[] allNames = userMgtClient.listUserByClaim(claimValue, "user3", 10);

        Assert.assertTrue(nameExists(allNames, "user3"), "List user with claim value has failed");

        loginManger.logOut();
    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check set role UI permissions to resource", dependsOnMethods = "testListUserByClaim")
    public void testSetRoleUIPermission() throws Exception {

        String resourceName = "/permission/testlogin";

        userMgtClient.setRoleUIPermission("umRole1", new String[] { resourceName });
        UIPermissionNode uiPermissions = userMgtClient.getAllUIPermissions();

        Assert.assertNotNull(uiPermissions.getResourcePath(), "Setting ui permissions to resource has failed.");

    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check getting user realm info", dependsOnMethods = "testSetRoleUIPermission")
    public void testGetUserRealmInfo() throws Exception {

        loginManger.login(isServer.getSuperTenant().getTenantAdmin().getUserName(),
                isServer.getSuperTenant().getTenantAdmin().getPassword(),
                isServer.getInstance().getHosts().get("default"));
        UserRealmInfo realmInfo = userMgtClient.getUserRealmInfo();

        Assert.assertNotNull(realmInfo);

        loginManger.logOut();
    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check shared role enable", dependsOnMethods = "testGetUserRealmInfo")
    public void testIsSharedRolesEnabled() throws Exception {

        Assert.assertFalse(userMgtClient.isSharedRolesEnabled());

    }

    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    @Test(groups = "wso2.is", description = "Check getting permissions for role", dependsOnMethods = "testIsSharedRolesEnabled")
    public void testGetRolePermissions() throws Exception {

        UIPermissionNode permission = userMgtClient.getRolePermissions("umRole2");
        Assert.assertEquals(permission.getDisplayName(), "All Permissions");
    }

    //todo need to fix properly
    @SetEnvironment(executionEnvironments = { ExecutionEnvironment.ALL })
    //    @Test(groups = "wso2.is", description = "Check importing bulk users", dependsOnMethods = "testGetRolePermissions")
    public void testBulkImportUsers() throws Exception {

        //ToDo:get userStoreDomain properly
        String userStoreDomain = "PRIMARY";
        File bulkUserFile = new File(
                getISResourceLocation() + File.separator + "userMgt" + File.separator + "bulkUserImport.csv");

        DataHandler handler = new DataHandler(new FileDataSource(bulkUserFile));
        userMgtClient.bulkImportUsers(userStoreDomain, "bulkUserImport.csv", handler, "PassWord1@");

        String[] userList = userMgtClient.listUsers("*", 100);

        Assert.assertNotNull(userList);
        Assert.assertEquals(userMgtClient.listUsers("bulkUser1", 10), new String[] { "bulkUser1" });
        Assert.assertEquals(userMgtClient.listUsers("bulkUser2", 10), new String[] { "bulkUser2" });
        Assert.assertEquals(userMgtClient.listUsers("bulkUser3", 10), new String[] { "bulkUser3" });

        userMgtClient.deleteUser("bulkUser1");
        userMgtClient.deleteUser("bulkUser2");
        userMgtClient.deleteUser("bulkUser3");
    }

    /**
     * Checks whether the passed Name exists in the FlaggedName array.
     * 
     * @param allNames
     * @param inputName
     * @return
     */
    protected boolean nameExists(FlaggedName[] allNames, String inputName) {
        boolean exists = false;

        for (FlaggedName flaggedName : allNames) {
            String name = flaggedName.getItemName();

            if (name.equals(inputName)) {
                exists = true;
                break;
            } else {
                exists = false;
            }
        }

        return exists;
    }

    protected boolean userNameExists(String[] allNames, String inputName) {

        boolean exists = false;

        for (String name : allNames) {
            if (inputName.equals(name)) {
                return true;
            } else {
                exists = false;
            }
        }

        return exists;
    }

}