/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: TestDatabaseUsers.java 3936 2008-04-26 12:05:37Z gbevin $
*/
package com.uwyn.rife.authentication.credentialsmanagers;
import com.uwyn.rife.authentication.credentials.RoleUser;
import com.uwyn.rife.authentication.credentialsmanagers.exceptions.DuplicateLoginException;
import com.uwyn.rife.authentication.credentialsmanagers.exceptions.DuplicateRoleException;
import com.uwyn.rife.authentication.credentialsmanagers.exceptions.DuplicateUserIdException;
import com.uwyn.rife.authentication.credentialsmanagers.exceptions.UnknownRoleErrorException;
import com.uwyn.rife.authentication.exceptions.CredentialsManagerException;
import com.uwyn.rife.database.Datasource;
import com.uwyn.rife.tools.ExceptionUtils;
import com.uwyn.rife.tools.StringEncryptor;
import java.util.ArrayList;
import junit.framework.TestCase;
public class TestDatabaseUsers extends TestCase
{
private Datasource mDatasource = null;
public TestDatabaseUsers(Datasource datasource, String datasourceName, String name)
{
super(name);
mDatasource = datasource;
}
public void testInstantiation()
{
DatabaseUsers manager = DatabaseUsersFactory.getInstance(mDatasource);
assertNotNull(manager);
}
public void testInstall()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
assertTrue(true == users.install());
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testRemove()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
assertTrue(true == users.remove());
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
public void testAddRoles()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3");
try
{
users.addRole("role2");
fail();
}
catch (DuplicateRoleException e)
{
assertEquals("role2", e.getRole());
}
assertEquals(3, users.countRoles());
assertTrue(users.containsRole("role1"));
assertTrue(users.containsRole("role2"));
assertTrue(users.containsRole("role3"));
assertTrue(!users.containsRole("role4"));
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
public void testRolesList()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3");
ListDatabaseRoles listroles = new ListDatabaseRoles();
assertTrue(users.listRoles(listroles));
assertEquals(3, listroles.getRoles().size());
assertTrue(listroles.getRoles().contains("role1"));
assertTrue(listroles.getRoles().contains("role2"));
assertTrue(listroles.getRoles().contains("role3"));
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
class ListDatabaseRoles implements ListRoles
{
private ArrayList<String> mRoles = new ArrayList<String>();
public ArrayList<String> getRoles()
{
return mRoles;
}
public boolean foundRole(String name)
{
mRoles.add(name);
return true;
}
}
public void testAddUsers()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3");
RoleUserAttributes user1_attributes = new RoleUserAttributes("thepassword");
users.addUser("login1", user1_attributes);
assertEquals(0, user1_attributes.getUserId());
RoleUserAttributes user2_attributes = new RoleUserAttributes("thepassword2", new String[] {"role1", "role2"});
users.addUser("login2", user2_attributes);
assertEquals(1, user2_attributes.getUserId());
RoleUserAttributes user3_attributes = new RoleUserAttributes(174, "thepassword3", new String[] {"role1", "role2", "role3"});
users.addUser("login3", user3_attributes);
assertEquals(174, user3_attributes.getUserId());
RoleUserAttributes user4_attributes = new RoleUserAttributes("thepassword4", new String[] {"role2", "role3"});
users.addUser("login4", user4_attributes);
assertEquals(175, user4_attributes.getUserId());
try
{
RoleUserAttributes user5_attributes = new RoleUserAttributes("thepassword5", new String[] {"role1"});
users.addUser("login1", user5_attributes);
fail();
}
catch (DuplicateLoginException e)
{
assertEquals(e.getLogin(), "login1");
}
RoleUserAttributes user6_attributes = new RoleUserAttributes("thepassword6", new String[] {"role_unknown"});
try
{
users.addUser("login6", user6_attributes);
fail();
}
catch (UnknownRoleErrorException e)
{
assertEquals(e.getRole(), "role_unknown");
assertEquals(e.getLogin(), "login6");
assertEquals(e.getAttributes(), user6_attributes);
}
assertEquals(4, users.countUsers());
assertTrue(users.containsUser("login1"));
assertTrue(users.containsUser("login2"));
assertTrue(users.containsUser("login3"));
assertTrue(users.containsUser("login4"));
assertTrue(!users.containsUser("login5"));
assertEquals(users.getUserId("login1"), user1_attributes.getUserId());
assertEquals(users.getUserId("login2"), user2_attributes.getUserId());
assertEquals(users.getUserId("login3"), user3_attributes.getUserId());
assertEquals(users.getUserId("login4"), user4_attributes.getUserId());
assertEquals(users.getLogin(user1_attributes.getUserId()), "login1");
assertEquals(users.getLogin(user2_attributes.getUserId()), "login2");
assertEquals(users.getLogin(user3_attributes.getUserId()), "login3");
assertEquals(users.getLogin(user4_attributes.getUserId()), "login4");
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
public void testUpdateUsers()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3");
RoleUserAttributes user1_attributes = new RoleUserAttributes("thepassword");
RoleUserAttributes user2_attributes = new RoleUserAttributes("thepassword2", new String[] {"role1", "role2"});
RoleUserAttributes user3_attributes = new RoleUserAttributes(174, "thepassword3", new String[] {"role1", "role2", "role3"});
RoleUserAttributes user4_attributes = new RoleUserAttributes("thepassword4", new String[] {"role2", "role3"});
users
.addUser("login1", user1_attributes)
.addUser("login2", user2_attributes)
.addUser("login3", user3_attributes)
.addUser("login4", user4_attributes);
RoleUserAttributes user1_attributes_new = new RoleUserAttributes(4, "thepassword_new", new String[] {"role1", "role2"});
RoleUserAttributes user2_attributes_new = new RoleUserAttributes(3, new String[] {"role2"});
RoleUserAttributes user3_attributes_new = new RoleUserAttributes(2, new String[] {"role1"});
RoleUserAttributes user4_attributes_new = new RoleUserAttributes(1, "thepassword_new4");
RoleUserAttributes user5_attributes_new = new RoleUserAttributes(5, new String[] {"role_unknown"});
assertTrue(users.updateUser("login1", user1_attributes_new));
assertTrue(users.updateUser("login2", user2_attributes_new));
assertTrue(users.updateUser("login3", user3_attributes_new));
assertTrue(users.updateUser("login4", user4_attributes_new));
try
{
users.updateUser("login4", user5_attributes_new);
fail();
}
catch (UnknownRoleErrorException e)
{
assertEquals(e.getRole(), "role_unknown");
assertEquals(e.getLogin(), "login4");
assertEquals(e.getAttributes(), user5_attributes_new);
}
assertEquals(4, users.countUsers());
assertTrue(users.containsUser("login1"));
assertTrue(users.containsUser("login2"));
assertTrue(users.containsUser("login3"));
assertTrue(users.containsUser("login4"));
assertTrue(!users.containsUser("login5"));
assertEquals(users.getAttributes("login1").getPassword(), user1_attributes_new.getPassword());
assertEquals(users.getAttributes("login1").getUserId(), user1_attributes.getUserId());
assertEquals(users.getAttributes("login1").getRoles().size(), user1_attributes_new.getRoles().size());
assertTrue(users.getAttributes("login1").getRoles().contains("role1"));
assertTrue(users.getAttributes("login1").getRoles().contains("role2"));
assertEquals(users.getAttributes("login2").getPassword(), user2_attributes.getPassword());
assertEquals(users.getAttributes("login2").getUserId(), user2_attributes.getUserId());
assertEquals(users.getAttributes("login2").getRoles().size(), user2_attributes_new.getRoles().size());
assertTrue(users.getAttributes("login2").getRoles().contains("role2"));
assertEquals(users.getAttributes("login3").getPassword(), user3_attributes.getPassword());
assertEquals(users.getAttributes("login3").getUserId(), user3_attributes.getUserId());
assertEquals(users.getAttributes("login3").getRoles().size(), user3_attributes_new.getRoles().size());
assertTrue(users.getAttributes("login3").getRoles().contains("role1"));
assertEquals(users.getAttributes("login4").getPassword(), user4_attributes_new.getPassword());
assertEquals(users.getAttributes("login4").getUserId(), user4_attributes.getUserId());
assertEquals(0, users.getAttributes("login4").getRoles().size());
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
public void testGetUserAttributes()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3");
RoleUserAttributes user1_attributes = new RoleUserAttributes(0, "thepassword");
RoleUserAttributes user2_attributes = new RoleUserAttributes(1, "thepassword2", new String[] {"role1", "role2"});
RoleUserAttributes user3_attributes = new RoleUserAttributes(2, "thepassword3", new String[] {"role1", "role2", "role3"});
users
.addUser("login1", user1_attributes)
.addUser("login2", user2_attributes)
.addUser("login3", user3_attributes);
RoleUserAttributes attributes1 = users.getAttributes("login1");
RoleUserAttributes attributes2 = users.getAttributes("login2");
RoleUserAttributes attributes3 = users.getAttributes("login3");
assertEquals(attributes1.getUserId(), user1_attributes.getUserId());
assertEquals(attributes1.getRoles(), user1_attributes.getRoles());
assertEquals(attributes1.getPassword(), user1_attributes.getPassword());
assertEquals(attributes2.getUserId(), user2_attributes.getUserId());
assertEquals(attributes2.getRoles().size(), user2_attributes.getRoles().size());
assertTrue(attributes2.getRoles().contains("role1"));
assertTrue(attributes2.getRoles().contains("role2"));
assertEquals(attributes2.getPassword(), user2_attributes.getPassword());
assertEquals(attributes3.getUserId(), user3_attributes.getUserId());
assertEquals(attributes3.getRoles().size(), user3_attributes.getRoles().size());
assertTrue(attributes3.getRoles().contains("role1"));
assertTrue(attributes3.getRoles().contains("role2"));
assertTrue(attributes3.getRoles().contains("role3"));
assertEquals(attributes3.getPassword(), user3_attributes.getPassword());
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
public void testUsersList()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3");
RoleUserAttributes user1_attributes = new RoleUserAttributes(0, "thepassword");
RoleUserAttributes user2_attributes = new RoleUserAttributes(1, "thepassword2", new String[] {"role1", "role2"});
RoleUserAttributes user3_attributes = new RoleUserAttributes(2, "thepassword3", new String[] {"role1", "role2", "role3"});
users
.addUser("login1", user1_attributes)
.addUser("login2", user2_attributes)
.addUser("login3", user3_attributes);
ListDatabaseUsers listusers = new ListDatabaseUsers();
assertTrue(users.listUsers(listusers));
assertEquals(3, listusers.getUsers().size());
assertTrue(listusers.getUsers().contains("0,login1,thepassword"));
assertTrue(listusers.getUsers().contains("1,login2,thepassword2"));
assertTrue(listusers.getUsers().contains("2,login3,thepassword3"));
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
public void testUsersListRanged()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3");
RoleUserAttributes user1_attributes = new RoleUserAttributes(0, "thepassword");
RoleUserAttributes user2_attributes = new RoleUserAttributes(1, "thepassword2", new String[] {"role1", "role2"});
RoleUserAttributes user3_attributes = new RoleUserAttributes(2, "thepassword3", new String[] {"role1", "role2", "role3"});
RoleUserAttributes user4_attributes = new RoleUserAttributes("thepassword4", new String[] {"role1", "role2"});
users
.addUser("login1", user1_attributes)
.addUser("login2", user2_attributes)
.addUser("login3", user3_attributes)
.addUser("login4", user4_attributes);
ListDatabaseUsers listusers = null;
listusers = new ListDatabaseUsers();
assertTrue(users.listUsers(listusers, 2, 1));
assertEquals(2, listusers.getUsers().size());
assertTrue(listusers.getUsers().contains("1,login2,thepassword2"));
assertTrue(listusers.getUsers().contains("2,login3,thepassword3"));
listusers = new ListDatabaseUsers();
assertTrue(users.listUsers(listusers, 3, 0));
assertEquals(3, listusers.getUsers().size());
assertTrue(listusers.getUsers().contains("0,login1,thepassword"));
assertTrue(listusers.getUsers().contains("1,login2,thepassword2"));
assertTrue(listusers.getUsers().contains("2,login3,thepassword3"));
listusers = new ListDatabaseUsers();
assertFalse(users.listUsers(listusers, 0, 3));
assertEquals(0, listusers.getUsers().size());
listusers = new ListDatabaseUsers();
assertTrue(users.listUsers(listusers, 2, 3));
assertEquals(1, listusers.getUsers().size());
assertTrue(listusers.getUsers().contains("3,login4,thepassword4"));
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
class ListDatabaseUsers implements ListUsers
{
private ArrayList<String> mUsers = new ArrayList<String>();
public ArrayList<String> getUsers()
{
return mUsers;
}
public boolean foundUser(long userId, String login, String password)
{
mUsers.add(userId+","+login+","+password);
return true;
}
}
public void testUserIdSpecification()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addUser("login1", new RoleUserAttributes(0, "thepassword"))
.addUser("login2", new RoleUserAttributes("thepassword"));
try
{
users.addUser("login3", new RoleUserAttributes(1, "thepassword"));
fail();
}
catch (DuplicateUserIdException e)
{
assertTrue(true);
}
users
.addUser("login4", new RoleUserAttributes(2, "thepassword"))
.addUser("login5", new RoleUserAttributes("thepassword"))
.addUser("login6", new RoleUserAttributes(847, "thepassword"));
assertTrue(users.containsUser("login1"));
assertTrue(users.containsUser("login2"));
assertTrue(!users.containsUser("login3"));
assertTrue(users.containsUser("login4"));
assertTrue(users.containsUser("login5"));
assertTrue(users.containsUser("login6"));
assertEquals("login1", users.getLogin(0));
assertEquals("login2", users.getLogin(1));
assertEquals("login4", users.getLogin(2));
assertEquals("login5", users.getLogin(3));
assertEquals("login6", users.getLogin(847));
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
public void testValidUsers()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
users.setPasswordEncryptor(StringEncryptor.SHA);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3");
RoleUserAttributes user1_attributes = new RoleUserAttributes(0, "thepassword");
users.addUser("login1", user1_attributes);
RoleUserAttributes user2_attributes = new RoleUserAttributes(1, "SHA:iTeooS7tJ7m1mdRrbUacq/pr1uM=", new String[] {"role1", "role2"});
users.addUser("login2", user2_attributes);
RoleUserAttributes user3_attributes = new RoleUserAttributes(2, "thepassword3", new String[] {"role1", "role2", "role3"});
users.addUser("login3", user3_attributes);
RoleUserAttributes user4_attributes = new RoleUserAttributes(174, "thepassword4", new String[] {"role2", "role3"});
users.addUser("login4", user4_attributes);
assertTrue(-1 == users.verifyCredentials(new RoleUser("login", "thepassword")));
assertTrue(0 == users.verifyCredentials(new RoleUser("login1", "thepassword")));
assertTrue(-1 == users.verifyCredentials(new RoleUser("login1", "thepassword2")));
assertTrue(-1 == users.verifyCredentials(new RoleUser("login1", "thepassword", "role1")));
assertTrue(1 == users.verifyCredentials(new RoleUser("login2", "thepassword2")));
assertTrue(-1 == users.verifyCredentials(new RoleUser("login2", "thepassword3")));
assertTrue(1 == users.verifyCredentials(new RoleUser("login2", "thepassword2", "role1")));
assertTrue(1 == users.verifyCredentials(new RoleUser("login2", "thepassword2", "role2")));
assertTrue(-1 == users.verifyCredentials(new RoleUser("login2", "thepassword2", "role3")));
assertTrue(2 == users.verifyCredentials(new RoleUser("login3", "thepassword3")));
assertTrue(-1 == users.verifyCredentials(new RoleUser("login3", "thepassword4")));
assertTrue(2 == users.verifyCredentials(new RoleUser("login3", "thepassword3", "role1")));
assertTrue(2 == users.verifyCredentials(new RoleUser("login3", "thepassword3", "role2")));
assertTrue(2 == users.verifyCredentials(new RoleUser("login3", "thepassword3", "role3")));
assertTrue(-1 == users.verifyCredentials(new RoleUser("login3", "thepassword3", "role4")));
assertTrue(174 == users.verifyCredentials(new RoleUser("login4", "thepassword4")));
assertTrue(-1 == users.verifyCredentials(new RoleUser("login4", "thepassword")));
assertTrue(-1 == users.verifyCredentials(new RoleUser("login4", "thepassword4", "role1")));
assertTrue(174 == users.verifyCredentials(new RoleUser("login4", "thepassword4", "role2")));
assertTrue(174 == users.verifyCredentials(new RoleUser("login4", "thepassword4", "role3")));
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
users.setPasswordEncryptor(null);
}
}
public void testUsersInRole()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
users.setPasswordEncryptor(StringEncryptor.MD5);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3");
RoleUserAttributes user1_attributes = new RoleUserAttributes("thepassword");
user1_attributes.setUserId(0);
users.addUser("login1", user1_attributes);
RoleUserAttributes user2_attributes = new RoleUserAttributes("thepassword2", new String[] {"role1", "role2"});
user2_attributes.setUserId(43);
users.addUser("login2", user2_attributes);
RoleUserAttributes user3_attributes = new RoleUserAttributes("thepassword3", new String[] {"role1", "role2", "role3"});
user3_attributes.setUserId(23);
users.addUser("login3", user3_attributes);
RoleUserAttributes user4_attributes = new RoleUserAttributes(174, "thepassword4", new String[] {"role2", "role3"});
user4_attributes.setUserId(98);
users.addUser("login4", user4_attributes);
assertTrue(!users.isUserInRole(user1_attributes.getUserId(), "role1"));
assertTrue(users.isUserInRole(user2_attributes.getUserId(), "role1"));
assertTrue(users.isUserInRole(user3_attributes.getUserId(), "role1"));
assertTrue(!users.isUserInRole(user4_attributes.getUserId(), "role1"));
assertTrue(!users.isUserInRole(user1_attributes.getUserId(), "role2"));
assertTrue(users.isUserInRole(user2_attributes.getUserId(), "role2"));
assertTrue(users.isUserInRole(user3_attributes.getUserId(), "role2"));
assertTrue(users.isUserInRole(user4_attributes.getUserId(), "role2"));
assertTrue(!users.isUserInRole(user1_attributes.getUserId(), "role3"));
assertTrue(!users.isUserInRole(user2_attributes.getUserId(), "role3"));
assertTrue(users.isUserInRole(user3_attributes.getUserId(), "role3"));
assertTrue(users.isUserInRole(user4_attributes.getUserId(), "role3"));
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
users.setPasswordEncryptor(null);
}
}
public void testListUsersInRole()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3");
ListDatabaseUsers listusers = new ListDatabaseUsers();
RoleUserAttributes user1_attributes = new RoleUserAttributes("thepassword");
RoleUserAttributes user2_attributes = new RoleUserAttributes("thepassword2", new String[] {"role1", "role2"});
RoleUserAttributes user3_attributes = new RoleUserAttributes(174, "thepassword3", new String[] {"role1", "role2", "role3"});
RoleUserAttributes user4_attributes = new RoleUserAttributes("thepassword4", new String[] {"role2", "role3"});
users
.addUser("login1", user1_attributes)
.addUser("login2", user2_attributes)
.addUser("login3", user3_attributes)
.addUser("login4", user4_attributes);
assertFalse(users.listUsersInRole(null, "role1"));
assertFalse(users.listUsersInRole(listusers, null));
assertFalse(users.listUsersInRole(listusers, ""));
assertTrue(users.listUsersInRole(listusers, "role1"));
assertEquals(2, listusers.getUsers().size());
assertFalse(listusers.getUsers().contains("0,login1,thepassword"));
assertTrue(listusers.getUsers().contains("1,login2,thepassword2"));
assertTrue(listusers.getUsers().contains("174,login3,thepassword3"));
assertFalse(listusers.getUsers().contains("175,login4,thepassword4"));
listusers = new ListDatabaseUsers();
assertTrue(users.listUsersInRole(listusers, "role2"));
assertEquals(3, listusers.getUsers().size());
assertFalse(listusers.getUsers().contains("0,login1,thepassword"));
assertTrue(listusers.getUsers().contains("1,login2,thepassword2"));
assertTrue(listusers.getUsers().contains("174,login3,thepassword3"));
assertTrue(listusers.getUsers().contains("175,login4,thepassword4"));
listusers = new ListDatabaseUsers();
assertTrue(users.listUsersInRole(listusers, "role3"));
assertEquals(2, listusers.getUsers().size());
assertFalse(listusers.getUsers().contains("0,login1,thepassword"));
assertFalse(listusers.getUsers().contains("1,login2,thepassword2"));
assertTrue(listusers.getUsers().contains("174,login3,thepassword3"));
assertTrue(listusers.getUsers().contains("175,login4,thepassword4"));
listusers = new ListDatabaseUsers();
assertFalse(users.listUsersInRole(listusers, "role4"));
assertEquals(0, listusers.getUsers().size());
assertFalse(listusers.getUsers().contains("0,login1,thepassword"));
assertFalse(listusers.getUsers().contains("1,login2,thepassword2"));
assertFalse(listusers.getUsers().contains("174,login3,thepassword3"));
assertFalse(listusers.getUsers().contains("2,login4,thepassword4"));
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
public void testRemoveUsersByLogin()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3")
.addUser("login1", new RoleUserAttributes(1, "thepassword"))
.addUser("login2", new RoleUserAttributes(23, "thepassword2", new String[] {"role1", "role2"}))
.addUser("login3", new RoleUserAttributes(14, "thepassword3", new String[] {"role1", "role2", "role3"}))
.addUser("login4", new RoleUserAttributes(174, "thepassword4", new String[] {"role2", "role3"}));
assertEquals(4, users.countUsers());
assertTrue(!users.removeUser("login5"));
assertEquals(4, users.countUsers());
assertTrue(users.removeUser("login4"));
assertEquals(3, users.countUsers());
assertTrue(users.removeUser("login1"));
assertEquals(2, users.countUsers());
assertTrue(users.removeUser("login2"));
assertEquals(1, users.countUsers());
assertTrue(users.removeUser("login3"));
assertEquals(0, users.countUsers());
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
public void testRemoveUsersByUserId()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3")
.addUser("login1", new RoleUserAttributes(1, "thepassword"))
.addUser("login2", new RoleUserAttributes(23, "thepassword2", new String[] {"role1", "role2"}))
.addUser("login3", new RoleUserAttributes(14, "thepassword3", new String[] {"role1", "role2", "role3"}))
.addUser("login4", new RoleUserAttributes(174, "thepassword4", new String[] {"role2", "role3"}));
assertEquals(4, users.countUsers());
assertTrue(!users.removeUser(5));
assertEquals(4, users.countUsers());
assertTrue(users.removeUser(174));
assertEquals(3, users.countUsers());
assertTrue(users.removeUser(1));
assertEquals(2, users.countUsers());
assertTrue(users.removeUser(23));
assertEquals(1, users.countUsers());
assertTrue(users.removeUser(14));
assertEquals(0, users.countUsers());
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
public void testRemoveRole()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3")
.addUser("login1", new RoleUserAttributes(1, "thepassword"))
.addUser("login2", new RoleUserAttributes(23, "thepassword2", new String[] {"role1", "role2"}))
.addUser("login3", new RoleUserAttributes(14, "thepassword3", new String[] {"role1", "role2", "role3"}))
.addUser("login4", new RoleUserAttributes(174, "thepassword4", new String[] {"role2", "role3"}));
assertEquals(3, users.countRoles());
assertTrue(!users.removeRole("role4"));
assertEquals(3, users.countRoles());
assertTrue(users.removeRole("role3"));
assertEquals(2, users.countRoles());
RoleUserAttributes attributes = users.getAttributes("login3");
assertTrue(attributes.getRoles().contains("role1"));
assertTrue(attributes.getRoles().contains("role2"));
assertTrue(!attributes.getRoles().contains("role3"));
assertTrue(users.removeRole("role2"));
attributes = users.getAttributes("login4");
assertEquals(0, attributes.getRoles().size());
attributes = users.getAttributes("login2");
assertTrue(attributes.getRoles().contains("role1"));
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
public void testClearUsers()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3")
.addUser("login1", new RoleUserAttributes(43, "thepassword"))
.addUser("login2", new RoleUserAttributes(432, "thepassword2", new String[] {"role1", "role2"}))
.addUser("login3", new RoleUserAttributes(1, "thepassword3", new String[] {"role1", "role2", "role3"}))
.addUser("login4", new RoleUserAttributes(174, "thepassword4", new String[] {"role2", "role3"}));
assertEquals(4, users.countUsers());
users.clearUsers();
assertEquals(0, users.countUsers());
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
public void testVerifyCredentials()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
users.setPasswordEncryptor(StringEncryptor.OBF);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3");
RoleUserAttributes user1_attributes = new RoleUserAttributes(49, "thepassword");
users.addUser("login1", user1_attributes);
RoleUserAttributes user2_attributes = new RoleUserAttributes(322, "thepassword2", new String[] {"role1", "role2"});
users.addUser("login2", user2_attributes);
RoleUserAttributes user3_attributes = new RoleUserAttributes(2, "thepassword3", new String[] {"role1", "role2", "role3"});
users.addUser("login3", user3_attributes);
RoleUser user = new RoleUser();
user.setLogin("login2");
user.setPassword("thepassword2");
user.setRole("role2");
assertEquals(user2_attributes.getUserId(), users.verifyCredentials(user));
user.setRole(null);
assertEquals(user2_attributes.getUserId(), users.verifyCredentials(user));
user.setRole("role3");
assertEquals(-1, users.verifyCredentials(user));
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
users.setPasswordEncryptor(null);
}
}
public void testListUserRoles()
{
DatabaseUsers users = DatabaseUsersFactory.getInstance(mDatasource);
try
{
users.install();
users
.addRole("role1")
.addRole("role2")
.addRole("role3");
RoleUserAttributes user1_attributes = new RoleUserAttributes(49, "thepassword");
users.addUser("login1", user1_attributes);
RoleUserAttributes user2_attributes = new RoleUserAttributes(322, "thepassword2", new String[] {"role1", "role2"});
users.addUser("login2", user2_attributes);
RoleUserAttributes user3_attributes = new RoleUserAttributes(2, "thepassword3", new String[] {"role1", "role2", "role3"});
users.addUser("login3", user3_attributes);
ListDatabaseRoles listroles = new ListDatabaseRoles();
assertFalse(users.listUserRoles("login1", listroles));
assertTrue(users.listUserRoles("login2", listroles));
assertEquals(listroles.getRoles().size(), 2);
assertTrue(listroles.getRoles().contains("role1"));
assertTrue(listroles.getRoles().contains("role2"));
listroles = new ListDatabaseRoles();
assertTrue(users.listUserRoles("login3", listroles));
assertEquals(listroles.getRoles().size(), 3);
assertTrue(listroles.getRoles().contains("role1"));
assertTrue(listroles.getRoles().contains("role2"));
assertTrue(listroles.getRoles().contains("role3"));
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
finally
{
try
{
users.remove();
}
catch (CredentialsManagerException e)
{
assertTrue(ExceptionUtils.getExceptionStackTrace(e), false);
}
}
}
}