org.wso2.carbon.user.core.jdbc.AdvancedJDBCRealmTest.java Source code

Java tutorial

Introduction

Here is the source code for org.wso2.carbon.user.core.jdbc.AdvancedJDBCRealmTest.java

Source

/*
*  Copyright (c) 2005-2010, 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.carbon.user.core.jdbc;

import junit.framework.TestCase;
import org.apache.commons.dbcp.BasicDataSource;
import org.wso2.carbon.user.api.RealmConfiguration;
import org.wso2.carbon.user.core.AuthorizationManager;
import org.wso2.carbon.user.core.BaseTestCase;
import org.wso2.carbon.user.core.ClaimTestUtil;
import org.wso2.carbon.user.core.Permission;
import org.wso2.carbon.user.core.UserCoreConstants;
import org.wso2.carbon.user.core.UserCoreTestConstants;
import org.wso2.carbon.user.core.UserRealm;
import org.wso2.carbon.user.core.UserStoreManager;
import org.wso2.carbon.user.core.UserStoreException;
import org.wso2.carbon.user.core.common.DefaultRealm;
import org.wso2.carbon.user.core.config.TestRealmConfigBuilder;
import org.wso2.carbon.user.core.config.RealmConfigXMLProcessor;
import org.wso2.carbon.user.core.util.DatabaseUtil;
import org.wso2.carbon.utils.dbcreator.DatabaseCreator;

import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;

public class AdvancedJDBCRealmTest extends BaseTestCase {

    private static Log log = LogFactory.getLog(AdvancedJDBCRealmTest.class);
    private UserRealm realm = null;
    private String TEST_URL = "jdbc:h2:target/advjdbctest/CARBON_TEST";

    public void testStuff() throws Exception {
        DatabaseUtil.closeDatabasePoolConnection();
        initRealmStuff();
        doUserStuff();
        doUserRoleStuff();
        doAuthorizationStuff();
        doClaimStuff();
    }

    public void initRealmStuff() throws Exception {

        String dbFolder = "target/advjdbctest";
        if ((new File(dbFolder)).exists()) {
            deleteDir(new File(dbFolder));
        }

        BasicDataSource ds = new BasicDataSource();
        ds.setDriverClassName(UserCoreTestConstants.DB_DRIVER);
        ds.setUrl(TEST_URL);

        DatabaseCreator creator = new DatabaseCreator(ds);
        creator.createRegistryDatabase();

        realm = new DefaultRealm();
        InputStream inStream = this.getClass().getClassLoader().getResource(JDBCRealmTest.JDBC_TEST_USERMGT_XML)
                .openStream();
        RealmConfiguration realmConfig = TestRealmConfigBuilder.buildRealmConfigWithJDBCConnectionUrl(inStream,
                TEST_URL);
        realm.init(realmConfig, ClaimTestUtil.getClaimTestData(), ClaimTestUtil.getProfileTestData(),
                MultitenantConstants.SUPER_TENANT_ID);
    }

    public void doUserStuff() throws Exception {

        UserStoreManager admin = realm.getUserStoreManager();

        Map<String, String> userProps = new HashMap<String, String>();
        userProps.put(ClaimTestUtil.CLAIM_URI1, "1claim1Value");
        userProps.put(ClaimTestUtil.CLAIM_URI2, "2claim2Value");

        Permission[] permisions = new Permission[2];
        permisions[0] = new Permission("high security", "read");
        permisions[1] = new Permission("low security", "write");

        //add USER
        admin.addUser("dimuthu", "credential", null, null, null, false);
        try {
            admin.addUser(null, null, null, null, null, false);
            TestCase.assertTrue(false);
        } catch (Exception ex) {
            //expected error
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", ex);
            }
        }
        try {
            admin.addUser("dimuthu", null, null, null, null, false);
            TestCase.assertTrue(false);
        } catch (Exception ex) {
            //expected error
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", ex);
            }
        }
        try {
            admin.addUser(null, "credential", null, null, null, false);
            TestCase.assertTrue(false);
        } catch (Exception ex) {
            //expected error
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", ex);
            }
        }
        try {
            admin.addUser(" ", "credential", null, null, null, false);
            TestCase.assertTrue(false);
        } catch (Exception ex) {
            //expected error
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", ex);
            }
        }
        try {
            admin.addUser("dimuthu", "credential", null, null, null, false);
            fail("Exception at adding the same user again");
        } catch (Exception ex) {
            //expected error
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", ex);
            }
        }

        // add ROLE
        admin.addRole("role1", new String[] { "dimuthu" }, permisions);//dimuthu added to the role
        try {
            admin.addRole(null, null, null);
            fail("Exception at defining a roll with No information");
        } catch (Exception ex) {
            //expected error
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", ex);
            }
        }
        try {
            admin.addRole(null, new String[] { "dimuthu" }, permisions);
            fail("Exception at adding user to a non specified role");
        } catch (Exception ex) {
            //expected error
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", ex);
            }
        }
        try {
            admin.addRole("role1", new String[] { "isuru" }, permisions);
            fail("Exception at adding a non existing user to the role");
        } catch (Exception ex) {
            //expected error
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", ex);
            }
        }

        //add USER to a ROLE
        admin.addUser("vajira", "credential", new String[] { "role1" }, userProps, null, false);
        try {
            admin.addUser("Bence", "credential", new String[] { "rolexxx" }, userProps, null, false);
            fail("Exception at adding user to a Non-existing role");
        } catch (Exception ex) {
            //expected user
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", ex);
            }
        }
        try {
            admin.addUser(null, "credential", new String[] { "role1" }, userProps, null, false);
            fail("Exception at adding user to a role with no user name");
        } catch (Exception ex) {
            //expected user
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", ex);
            }
        }
        try {
            admin.addUser("vajira", "credential", new String[] { "role1" }, userProps, null, false);
            fail("Exception at adding same user to the same roll");
        } catch (Exception ex) {
            //expected user
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", ex);
            }
        }

        //Authenticate USER
        assertTrue(admin.authenticate("dimuthu", "credential"));
        assertFalse(admin.authenticate(null, "credential"));
        assertFalse(admin.authenticate("dimuthu", null));

        //update by ADMIN
        admin.updateCredentialByAdmin("dimuthu", "topsecret");
        assertTrue(admin.authenticate("dimuthu", "topsecret"));

        //isExistingUser
        assertTrue(admin.isExistingUser("dimuthu"));
        assertFalse(admin.isExistingUser("muhaha"));

        // update by USER
        admin.updateCredential("dimuthu", "password", "topsecret");
        //assertTrue(admin.authenticate("dimuthu", "password")); //TO DO
        assertFalse(admin.authenticate("dimuthu", "credential"));
        try {
            admin.updateCredential("dimuthu", "password", "xxx");
            TestCase.assertTrue(false);
        } catch (Exception ex) {
            //expected exception
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", ex);
            }
        }

        String[] names = admin.listUsers("*", 100);
        assertEquals(3, names.length);

        String[] names1 = admin.listUsers("*", 0);
        assertEquals(0, names1.length);

        String[] names2 = admin.listUsers("*", 2);
        assertEquals(2, names2.length);

        String[] names3 = admin.listUsers("di?uthu", 100);
        assertEquals(1, names3.length);

        String[] names4 = admin.listUsers("is?ru", 100);
        assertEquals(0, names4.length);

        String[] roleNames = admin.getRoleNames();
        assertEquals(3, roleNames.length);

        // delete
        admin.deleteUser("vajira");
        assertFalse(admin.isExistingUser("vajira"));
        assertFalse(admin.authenticate("vajira", "credential"));

        //delete ROLE
        admin.addUser("vajira", "credential", new String[] { "role1" }, userProps, null, false);
        assertTrue(admin.isExistingUser("vajira"));
        admin.deleteRole("role1");

        //add role
        admin.addRole("role1", new String[] { "dimuthu" }, permisions);

    }

    public void doUserRoleStuff() throws Exception {
        UserStoreManager admin = realm.getUserStoreManager();

        InputStream inStream = this.getClass().getClassLoader().getResource(JDBCRealmTest.JDBC_TEST_USERMGT_XML)
                .openStream();
        RealmConfigXMLProcessor realmConfigProcessor = new RealmConfigXMLProcessor();
        RealmConfiguration realmConfig = realmConfigProcessor.buildRealmConfiguration(inStream);

        admin.addRole("role2", null, null);
        admin.addRole("role3", null, null);
        admin.addRole("role4", null, null);
        assertEquals(6, admin.getRoleNames().length);//admin,everyone,role1,role2,role3,role4

        //Test delete role method
        assertTrue(admin.isExistingRole("role3"));
        admin.deleteRole("role3");
        admin.deleteRole("role4");
        assertFalse(admin.isExistingRole("role3"));
        admin.addRole("role3", null, null);
        admin.addRole("role4", null, null);

        //add users
        admin.addUser("saman", "pass1", null, null, null, false);
        admin.addUser("amara", "pass2", null, null, null, false);
        admin.addUser("sunil", "pass3", null, null, null, false);

        //update the ROLE list of USERS
        admin.updateRoleListOfUser("saman", null, new String[] { "role2" });
        admin.updateRoleListOfUser("saman", new String[] { "role2" }, new String[] { "role4", "role3" });
        try {
            admin.updateRoleListOfUser(null, null, new String[] { "role2" });
            fail("Exceptions at missing user name");
        } catch (Exception ex) {
            //expected user
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", ex);
            }
        }

        // Renaming Role
        admin.updateRoleName("role4", "role5");

        String[] rolesOfSaman = admin.getRoleListOfUser("saman");
        assertEquals(3, rolesOfSaman.length);

        // according to new implementation, getRoleListOfUser method would return everyone role name for all users
        boolean userExist = admin.isExistingUser("isuru");
        if (userExist) {
            TestCase.assertTrue(false);
        } else {
            String[] rolesOfisuru = admin.getRoleListOfUser("isuru");
            assertEquals(1, rolesOfisuru.length);
            assertEquals(admin.getRealmConfiguration().getEveryOneRoleName(), rolesOfisuru[0]);
        }

        admin.updateUserListOfRole("role2", new String[] { "saman" }, null);
        admin.updateUserListOfRole("role3", null, new String[] { "amara", "sunil" });

        String[] userOfRole5 = admin.getUserListOfRole("role5");
        assertEquals(1, userOfRole5.length);

        String[] userOfRole4 = admin.getUserListOfRole("role4");
        assertEquals(0, userOfRole4.length);

        try {
            admin.updateUserListOfRole("rolexx", null, new String[] { "amara", "sunil" });
            TestCase.assertTrue(false);
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }
        try {
            admin.updateUserListOfRole("role2", null, new String[] { "d" });
            TestCase.assertTrue(false);
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }

        try {
            admin.updateRoleListOfUser("saman", new String[] { "x" }, new String[] { "y" });
            TestCase.assertTrue(false);
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }

        try {
            admin.updateUserListOfRole(realmConfig.getAdminRoleName(), null,
                    new String[] { realmConfig.getAdminUserName() });
            TestCase.assertTrue(false);
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }

        try {
            admin.updateRoleListOfUser(realmConfig.getAdminUserName(),
                    new String[] { realmConfig.getAdminRoleName() }, null);
            TestCase.assertTrue(false);
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }

        try {
            admin.updateUserListOfRole(realmConfig.getEveryOneRoleName(), new String[] { "saman" }, null);
            TestCase.assertTrue(false);
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }

        try {
            admin.updateRoleListOfUser("sunil", new String[] { realmConfig.getEveryOneRoleName() }, null);
            TestCase.assertTrue(false);
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }

        try {
            admin.updateRoleName("role2", "role5");
            TestCase.assertTrue(false);
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }

    }

    public void doAuthorizationStuff() throws Exception {
        AuthorizationManager authMan = realm.getAuthorizationManager();
        UserStoreManager usWriter = realm.getUserStoreManager();

        usWriter.addRole("rolex", new String[] { "saman", "amara" }, null);
        usWriter.addRole("roley", null, null);
        authMan.authorizeRole("rolex", "wall", "write");
        authMan.authorizeRole("roley", "table", "write");

        try {
            authMan.authorizeRole(null, "wall", "write");
            fail("Exception at authorizing a role with Null role");
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }
        try {
            authMan.authorizeRole("rollee", null, "write");
            fail("Exception at authorizing a role with Null resourceID");
        } catch (Exception e) {
            // exptected error in negative testing
        }
        try {
            authMan.authorizeRole("rollee", "wall", null);
            fail("Exception at authorizing a role with Null action");
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }
        try {
            authMan.authorizeRole("rolleex", "wall", "run");
            fail("Exception at authorizing a role with Invalid action");
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }

        //***authorize user
        authMan.authorizeUser("sunil", "wall", "read");
        try {
            authMan.authorizeUser(null, "wall", "read");
            fail("Exception at authorizing a user with Null name");
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }
        try {
            authMan.authorizeUser("isuru", null, "read");
            fail("Exception at authorizing a user with Null resourceID");
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }
        try {
            authMan.authorizeUser("isuru", "wall", null);
            fail("Exception at authorizing a user with Null action");
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }
        try {
            authMan.authorizeUser("isuru", "wall", "run");
            fail("Exception at authorizing a user with Invalid action");
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }

        assertTrue(authMan.isUserAuthorized("saman", "wall", "write"));
        assertTrue(authMan.isUserAuthorized("sunil", "wall", "read"));
        assertTrue(authMan.isRoleAuthorized("roley", "table", "write"));
        assertFalse(authMan.isRoleAuthorized("roley", "chair", "write"));
        assertFalse(authMan.isUserAuthorized("saman", "wall", "read"));
        assertFalse(authMan.isUserAuthorized("sunil", "wall", "write"));
        assertFalse(authMan.isUserAuthorized("isuru", "wall", "write"));
        try {
            boolean b = authMan.isUserAuthorized("isuru", "wall", "run");
            fail("Exception at check authorization of a user with Invalid action");
        } catch (Exception e) {
            // exptected error in negative testing
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }

        String[] AllowedRolesForResource = authMan.getAllowedRolesForResource("wall", "write");
        assertEquals(1, AllowedRolesForResource.length);
        //assertEquals(2,authMan.getAllowedUsersForResource("wall", "write").length);
        //String[] AllowedUsersForResource = authMan.getAllowedUsersForResource("wall", "read");
        //assertEquals(1, AllowedUsersForResource.length);

        authMan.clearUserAuthorization("sunil", "wall", "read");
        try {
            authMan.clearUserAuthorization("isuru", "wall", "run");
            fail("Exception at clear user authorization");
        } catch (Exception e) {
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }
        try {
            authMan.clearUserAuthorization(null, "wall", "run");
            fail("Exception at clear user authorization");
        } catch (Exception e) {
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }

        }
        try {
            authMan.clearUserAuthorization("isuru", null, "run");
            fail("Exception at clear user authorization");
        } catch (Exception e) {
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }

        }
        try {
            authMan.clearUserAuthorization("isuru", "wall", null);
            fail("Exception at clear user authorization");
        } catch (Exception e) {
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }

        }

        authMan.clearRoleAuthorization("roley", "table", "write");
        try {
            authMan.clearRoleAuthorization(null, "table", "write");
            fail("Exception at clear role authorization");
        } catch (Exception e) {
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }

        }
        try {
            authMan.clearRoleAuthorization("roleee", null, "write");
            fail("Exception at clear role authorization");
        } catch (Exception e) {
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }

        }
        try {
            authMan.clearRoleAuthorization("roleee", "table", null);
            fail("Exception at clear role authorization");
        } catch (Exception e) {
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }

        }

        authMan.clearResourceAuthorizations("wall");
        try {
            authMan.clearResourceAuthorizations(null);
            fail("Exception at clear Resource Authorizations");
        } catch (Exception e) {
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }

        }

        assertFalse(authMan.isUserAuthorized("saman", "wall", "write"));
        assertFalse(authMan.isUserAuthorized("sunil", "wall", "read"));
        assertFalse(authMan.isRoleAuthorized("roley", "table", "write"));
    }

    public void doClaimStuff() throws Exception {
        UserStoreManager usWriter = realm.getUserStoreManager();
        String[] allClaims = { ClaimTestUtil.CLAIM_URI1, ClaimTestUtil.CLAIM_URI2, ClaimTestUtil.CLAIM_URI3 };

        // add DEFAULT
        usWriter.setUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI1, "claim1default", null);
        try {
            usWriter.setUserClaimValue(null, ClaimTestUtil.CLAIM_URI1, "claim1default", null);
            fail("Exception at set claim values to null users");
        } catch (Exception e) {
            //expected exception
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }
        try {
            usWriter.setUserClaimValue("isuru", null, "claim1default", null);
            fail("Exception at set claim values to null claimURI");
        } catch (Exception e) {
            //expected exception
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }
        try {
            usWriter.setUserClaimValue("isuru", ClaimTestUtil.CLAIM_URI1, null, null);
            fail("Exception at set claim values to null claimValue");
        } catch (Exception e) {
            //expected exception
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }

        String value = usWriter.getUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI1, null);
        assertEquals("claim1default", value);
        //Non existing user
        try {
            usWriter.getUserClaimValue("isuru", ClaimTestUtil.CLAIM_URI1, null);
        } catch (UserStoreException e) {
            assertTrue(e.getMessage().contains("UserNotFound"));
        }
        // update default
        usWriter.setUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI1, "dimzi lee", null);
        value = usWriter.getUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI1, null);
        assertEquals("dimzi lee", value);

        // multiple additions
        Map<String, String> map = new HashMap<String, String>();
        map.put(ClaimTestUtil.CLAIM_URI1, "lee");
        map.put(ClaimTestUtil.CLAIM_URI3, "muthu");

        usWriter.setUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI2, "claim2default", null);
        assertEquals("dimzi lee", usWriter.getUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI1, null));
        assertEquals("claim2default", usWriter.getUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI2, null));
        assertNull(usWriter.getUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI3, null));

        usWriter.setUserClaimValues("dimuthu", map, ClaimTestUtil.HOME_PROFILE_NAME);
        assertEquals("lee",
                usWriter.getUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI1, ClaimTestUtil.HOME_PROFILE_NAME));
        assertNull(
                usWriter.getUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI2, ClaimTestUtil.HOME_PROFILE_NAME));
        assertEquals("muthu",
                usWriter.getUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI3, ClaimTestUtil.HOME_PROFILE_NAME));

        usWriter.setUserClaimValue("dimuthu", UserCoreConstants.PROFILE_CONFIGURATION,
                ClaimTestUtil.HOME_PROFILE_NAME, ClaimTestUtil.HOME_PROFILE_NAME);
        Map<String, String> obtained = usWriter.getUserClaimValues("dimuthu", allClaims,
                ClaimTestUtil.HOME_PROFILE_NAME);
        //assertNull(obtained.get(ClaimTestUtil.CLAIM_URI1)); // hidden
        //assertEquals("claim2default", obtained.get(ClaimTestUtil.CLAIM_URI2)); // overridden
        assertEquals("muthu", obtained.get(ClaimTestUtil.CLAIM_URI3)); // normal

        //UPDATE
        map.put(ClaimTestUtil.CLAIM_URI3, "muthulee");
        usWriter.setUserClaimValues("dimuthu", map, ClaimTestUtil.HOME_PROFILE_NAME);
        value = usWriter.getUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI3, ClaimTestUtil.HOME_PROFILE_NAME);
        assertEquals("muthulee", value);

        //DELETE
        usWriter.deleteUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI1, null);
        value = usWriter.getUserClaimValue("dimuthu", ClaimTestUtil.CLAIM_URI1, null);
        assertNull(value);
        try {
            usWriter.deleteUserClaimValue("dimuthu", null, null);
            fail("Exception at null Claim URI");
        } catch (Exception e) {
            //expected exception
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }
        try {
            usWriter.deleteUserClaimValue(null, ClaimTestUtil.CLAIM_URI1, null);
            fail("Exception at giving null user name to delete user claim values");
        } catch (Exception e) {
            //expected exception
            if (log.isDebugEnabled()) {
                log.debug("Expected error, hence ignored", e);
            }
        }

        usWriter.deleteUserClaimValues("dimuthu", allClaims, ClaimTestUtil.HOME_PROFILE_NAME);
        obtained = usWriter.getUserClaimValues("dimuthu", allClaims, ClaimTestUtil.HOME_PROFILE_NAME);
        assertNull(obtained.get(ClaimTestUtil.CLAIM_URI2)); // overridden
        assertNull(obtained.get(ClaimTestUtil.CLAIM_URI3));

        //UserStoreManager admin = realm.getUserStoreManager();
        //admin.deleteUser("dimuthu");
    }

}