/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.masterdb.user;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.fail;
import java.util.Locale;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Factory;
import org.testng.annotations.Test;
import org.threeten.bp.ZoneId;
import com.google.common.collect.ImmutableList;
import com.opengamma.DataDuplicationException;
import com.opengamma.DataNotFoundException;
import com.opengamma.core.user.DateStyle;
import com.opengamma.core.user.TimeStyle;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.ObjectId;
import com.opengamma.id.UniqueId;
import com.opengamma.master.user.HistoryEventType;
import com.opengamma.master.user.ManageableUser;
import com.opengamma.master.user.UserEventHistoryRequest;
import com.opengamma.master.user.UserEventHistoryResult;
import com.opengamma.master.user.UserSearchRequest;
import com.opengamma.master.user.UserSearchResult;
import com.opengamma.util.test.AbstractDbTest;
import com.opengamma.util.test.DbTest;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT_DB)
public class DbUserMasterTest extends AbstractDbTest {
private static final Logger s_logger = LoggerFactory.getLogger(DbUserMasterTest.class);
private static final String TEST_USER = "bob";
private static final String TEST_USER2 = "david";
private DbUserMaster _userMaster;
@Factory(dataProvider = "databases", dataProviderClass = DbTest.class)
public DbUserMasterTest(String databaseType, String databaseVersion) {
super(databaseType, databaseVersion);
s_logger.info("running testcases for {}", databaseType);
}
//-------------------------------------------------------------------------
@Override
protected void doSetUp() {
_userMaster = new DbUserMaster(getDbConnector());
}
@Override
protected void doTearDown() {
_userMaster = null;
}
//-------------------------------------------------------------------------
@Test
public void test_basics() throws Exception {
assertNotNull(_userMaster);
assertEquals(true, _userMaster.getUniqueIdScheme().equals("DbUsr"));
assertNotNull(_userMaster.getDbConnector());
assertNotNull(_userMaster.getClock());
}
//-------------------------------------------------------------------------
@Test
public void test_example() throws Exception {
ManageableUser user = createUser();
assertEquals(false, _userMaster.nameExists(user.getUserName()));
UniqueId uid = _userMaster.add(user);
assertEquals(true, _userMaster.nameExists(user.getUserName()));
user.setUniqueId(uid);
ManageableUser loaded = _userMaster.getById(uid.getObjectId());
assertEquals(user, loaded);
}
@Test
public void test_no_alternateId() throws Exception {
ManageableUser user = createUser();
user.setAlternateIds(ExternalIdBundle.EMPTY);
UniqueId uid = _userMaster.add(user);
user.setUniqueId(uid);
ManageableUser loaded = _userMaster.getById(uid.getObjectId());
assertEquals(user, loaded);
}
@Test
public void test_no_permissions() throws Exception {
ManageableUser user = createUser();
user.getAssociatedPermissions().clear();
UniqueId uid = _userMaster.add(user);
user.setUniqueId(uid);
ManageableUser loaded = _userMaster.getById(uid.getObjectId());
assertEquals(user, loaded);
}
@Test
public void test_no_extensions() throws Exception {
ManageableUser user = createUser();
user.getProfile().getExtensions().clear();
UniqueId uid = _userMaster.add(user);
user.setUniqueId(uid);
ManageableUser loaded = _userMaster.getById(uid.getObjectId());
assertEquals(user, loaded);
}
@Test
public void test_no_subTables() throws Exception {
ManageableUser user = createUser();
user.setAlternateIds(ExternalIdBundle.EMPTY);
user.getAssociatedPermissions().clear();
user.getProfile().getExtensions().clear();
UniqueId uid = _userMaster.add(user);
user.setUniqueId(uid);
ManageableUser loaded = _userMaster.getById(uid.getObjectId());
assertEquals(user, loaded);
}
//-------------------------------------------------------------------------
@Test
public void test_addNameExists() throws Exception {
ManageableUser user = createUser();
_userMaster.add(user);
assertNotNull(_userMaster.getByName(TEST_USER));
try {
_userMaster.add(user);
fail();
} catch (DataDuplicationException ex) {
// expected
}
assertNotNull(_userMaster.getByName(TEST_USER));
}
//-------------------------------------------------------------------------
@Test
public void test_removeByName() throws Exception {
ManageableUser user = createUser();
UniqueId uid = _userMaster.add(user);
assertNotNull(_userMaster.getById(uid.getObjectId()));
assertNotNull(_userMaster.getByName(TEST_USER));
_userMaster.removeByName(TEST_USER);
try {
_userMaster.getByName(TEST_USER);
fail();
} catch (DataNotFoundException ex) {
// expected
}
try {
_userMaster.getById(uid.getObjectId());
fail();
} catch (DataNotFoundException ex) {
// expected
}
_userMaster.removeByName(TEST_USER); // idempotent
_userMaster.removeById(uid.getObjectId()); // idempotent
UserEventHistoryResult events = _userMaster.eventHistory(new UserEventHistoryRequest(TEST_USER));
assertEquals(2, events.getEvents().size());
assertEquals(HistoryEventType.ADDED, events.getEvents().get(0).getType());
assertEquals(0, events.getEvents().get(0).getChanges().size());
assertEquals(HistoryEventType.REMOVED, events.getEvents().get(1).getType());
assertEquals(0, events.getEvents().get(1).getChanges().size());
}
//-------------------------------------------------------------------------
@Test
public void test_removeById() throws Exception {
ManageableUser user = createUser();
UniqueId uid = _userMaster.add(user);
assertNotNull(_userMaster.getById(uid.getObjectId()));
assertNotNull(_userMaster.getByName(TEST_USER));
_userMaster.removeById(uid.getObjectId());
try {
_userMaster.getById(uid.getObjectId());
fail();
} catch (DataNotFoundException ex) {
// expected
}
try {
_userMaster.getByName(TEST_USER);
fail();
} catch (DataNotFoundException ex) {
// expected
}
_userMaster.removeById(uid.getObjectId()); // idempotent
_userMaster.removeByName(TEST_USER); // idempotent
UserEventHistoryResult events = _userMaster.eventHistory(new UserEventHistoryRequest(uid.getObjectId()));
assertEquals(2, events.getEvents().size());
assertEquals(HistoryEventType.ADDED, events.getEvents().get(0).getType());
assertEquals(0, events.getEvents().get(0).getChanges().size());
assertEquals(HistoryEventType.REMOVED, events.getEvents().get(1).getType());
assertEquals(0, events.getEvents().get(1).getChanges().size());
}
//-------------------------------------------------------------------------
@Test
public void test_update_main() throws Exception {
ManageableUser user = createUser();
UniqueId uid1 = _userMaster.add(user);
user = _userMaster.getById(uid1.getObjectId());
user.setEmailAddress("tester@test.com");
UniqueId uid2 = _userMaster.update(user);
user.setUniqueId(uid2);
ManageableUser loaded = _userMaster.getById(uid2.getObjectId());
assertEquals(user, loaded);
}
@Test
public void test_update_linked() throws Exception {
ManageableUser user = createUser();
UniqueId uid1 = _userMaster.add(user);
user = _userMaster.getById(uid1.getObjectId());
user.getAssociatedPermissions().remove("PERMISSION-2");
user.getAssociatedPermissions().add("NEWPERMISSION");
user.getProfile().getExtensions().remove("A");
user.getProfile().getExtensions().put("X", "Y");
user.addAlternateId(ExternalId.of("M", "N"));
UniqueId uid2 = _userMaster.update(user);
user.setUniqueId(uid2);
ManageableUser loaded = _userMaster.getById(uid2.getObjectId());
assertEquals(user, loaded);
UserEventHistoryResult events = _userMaster.eventHistory(new UserEventHistoryRequest(uid2.getObjectId()));
assertEquals(2, events.getEvents().size());
assertEquals(HistoryEventType.ADDED, events.getEvents().get(0).getType());
assertEquals(0, events.getEvents().get(0).getChanges().size());
assertEquals(HistoryEventType.CHANGED, events.getEvents().get(1).getType());
assertEquals(5, events.getEvents().get(1).getChanges().size());
}
@Test
public void test_update_rename_succeed() throws Exception {
ManageableUser user = createUser();
UniqueId uid1 = _userMaster.add(user);
user = _userMaster.getById(uid1.getObjectId());
user.setUserName("bobjones");
UniqueId uid2 = _userMaster.update(user);
user.setUniqueId(uid2);
assertEquals(user, _userMaster.getById(uid2.getObjectId()));
assertEquals(user, _userMaster.getByName(TEST_USER));
assertEquals(user, _userMaster.getByName("bobjones"));
}
@Test
public void test_update_rename_fail() throws Exception {
ManageableUser user1 = createUser();
UniqueId uid1 = _userMaster.add(user1);
user1 = _userMaster.getById(uid1.getObjectId());
ManageableUser user2 = createUser2();
UniqueId uid2 = _userMaster.add(user2);
user2 = _userMaster.getById(uid2.getObjectId());
user2.setUserName(TEST_USER);
try {
_userMaster.update(user2);
fail();
} catch (DataDuplicationException ex) {
// expected
}
}
//-------------------------------------------------------------------------
@Test
public void test_search() throws Exception {
ManageableUser user1 = createUser();
UniqueId uid1 = _userMaster.add(user1);
user1 = _userMaster.getById(uid1.getObjectId());
ManageableUser user2 = createUser2();
UniqueId uid2 = _userMaster.add(user2);
user2 = _userMaster.getById(uid2.getObjectId());
UserSearchResult result = _userMaster.search(new UserSearchRequest());
assertEquals(2, result.getUsers().size());
assertEquals(user1, result.getUsers().get(0));
assertEquals(user2, result.getUsers().get(1));
}
@Test
public void test_search_noObjectIds() throws Exception {
ManageableUser user = createUser();
UniqueId uid1 = _userMaster.add(user);
user = _userMaster.getById(uid1.getObjectId());
UserSearchRequest request = new UserSearchRequest();
request.setObjectIds(ImmutableList.<ObjectId>of());
UserSearchResult result = _userMaster.search(request);
assertEquals(0, result.getUsers().size());
}
@Test
public void test_search_objectIdNotFound() throws Exception {
ManageableUser user = createUser();
UniqueId uid1 = _userMaster.add(user);
user = _userMaster.getById(uid1.getObjectId());
UserSearchRequest request = new UserSearchRequest();
request.setObjectIds(ImmutableList.of(ObjectId.of(_userMaster.getUniqueIdScheme(), "-87578")));
UserSearchResult result = _userMaster.search(request);
assertEquals(0, result.getUsers().size());
}
//-------------------------------------------------------------------------
@Test
public void test_toString() {
assertEquals("DbUserMaster[DbUsr]", _userMaster.toString());
}
//-------------------------------------------------------------------------
private ManageableUser createUser() {
ManageableUser user = new ManageableUser(TEST_USER);
user.setAlternateIds(ExternalIdBundle.of(ExternalId.of("A", "B"), ExternalId.of("C", "D")));
user.setPasswordHash("PASSWORD_HASH");
user.setEmailAddress("bob@test.com");
user.getAssociatedPermissions().add("PERMISSION-1");
user.getAssociatedPermissions().add("PERMISSION-2");
user.getAssociatedPermissions().add("PERMISSION-3");
user.getProfile().setDisplayName("Bob");
user.getProfile().setLocale(Locale.FRANCE);
user.getProfile().setZone(ZoneId.of("Europe/Paris"));
user.getProfile().setDateStyle(DateStyle.STANDARD_EU);
user.getProfile().setTimeStyle(TimeStyle.ISO);
user.getProfile().getExtensions().put("A", "B");
user.getProfile().getExtensions().put("C", "D");
return user;
}
private ManageableUser createUser2() {
ManageableUser user = new ManageableUser(TEST_USER2);
user.setAlternateIds(ExternalIdBundle.of(ExternalId.of("A", "BB"), ExternalId.of("C", "DD")));
user.setPasswordHash("PASSWORD_HASH");
user.setEmailAddress("david@test.com");
user.getAssociatedPermissions().add("PERMISSION-1");
user.getAssociatedPermissions().add("PERMISSION-2");
user.getProfile().setDisplayName("David");
user.getProfile().setLocale(Locale.UK);
user.getProfile().setZone(ZoneId.of("Europe/London"));
user.getProfile().setDateStyle(DateStyle.ISO);
user.getProfile().setTimeStyle(TimeStyle.ISO);
user.getProfile().getExtensions().put("A", "B");
return user;
}
}