/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.masterdb.portfolio;
import static com.opengamma.util.db.DbDateUtils.MAX_SQL_TIMESTAMP;
import static com.opengamma.util.db.DbDateUtils.toSqlTimestamp;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertTrue;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcOperations;
import org.testng.annotations.Test;
import org.threeten.bp.Clock;
import org.threeten.bp.Instant;
import org.threeten.bp.OffsetDateTime;
import org.threeten.bp.ZoneOffset;
import com.opengamma.id.ObjectId;
import com.opengamma.id.UniqueId;
import com.opengamma.master.portfolio.ManageablePortfolio;
import com.opengamma.master.portfolio.ManageablePortfolioNode;
import com.opengamma.master.portfolio.PortfolioDocument;
import com.opengamma.util.test.AbstractDbTest;
import com.opengamma.util.test.TestGroup;
/**
* Base tests for DbPortfolioMasterWorker via DbPortfolioMaster.
*/
@Test(groups = TestGroup.UNIT_DB)
public abstract class AbstractDbPortfolioMasterWorkerTest extends AbstractDbTest {
private static final Logger s_logger = LoggerFactory.getLogger(AbstractDbPortfolioMasterWorkerTest.class);
protected DbPortfolioMaster _prtMaster;
protected Instant _version1Instant;
protected Instant _version2Instant;
protected int _totalPortfolios;
protected int _visiblePortfolios;
protected int _totalPositions;
protected OffsetDateTime _now;
private boolean _includePositions = true;
public AbstractDbPortfolioMasterWorkerTest(String databaseType, String databaseVersion, boolean readOnly) {
super(databaseType, databaseVersion);
s_logger.info("running testcases for {}", databaseType);
}
//-------------------------------------------------------------------------
@Override
protected void doSetUp() {
_includePositions = true;
init();
}
@Override
protected void doTearDown() {
_prtMaster = null;
}
@Override
protected void doTearDownClass() {
_prtMaster = null;
}
//-------------------------------------------------------------------------
private void init() {
_prtMaster = new DbPortfolioMaster(getDbConnector());
_now = OffsetDateTime.now();
_prtMaster.setClock(Clock.fixed(_now.toInstant(), ZoneOffset.UTC));
_version1Instant = _now.toInstant().minusSeconds(100);
_version2Instant = _now.toInstant().minusSeconds(50);
s_logger.debug("test data now: {}", _version1Instant);
s_logger.debug("test data later: {}", _version2Instant);
final JdbcOperations template = _prtMaster.getDbConnector().getJdbcOperations();
template.update("INSERT INTO prt_portfolio VALUES (?,?,?,?,?, ?,?,?)",
101, 101, toSqlTimestamp(_version1Instant), MAX_SQL_TIMESTAMP, toSqlTimestamp(_version1Instant), MAX_SQL_TIMESTAMP, "TestPortfolio101", 25);
template.update("INSERT INTO prt_portfolio VALUES (?,?,?,?,?, ?,?,?)",
102, 102, toSqlTimestamp(_version1Instant), MAX_SQL_TIMESTAMP, toSqlTimestamp(_version1Instant), MAX_SQL_TIMESTAMP, "TestPortfolio102", 25);
template.update("INSERT INTO prt_portfolio VALUES (?,?,?,?,?, ?,?,?)",
201, 201, toSqlTimestamp(_version1Instant), toSqlTimestamp(_version2Instant), toSqlTimestamp(_version1Instant), MAX_SQL_TIMESTAMP, "TestPortfolio201", 25);
template.update("INSERT INTO prt_portfolio VALUES (?,?,?,?,?, ?,?,?)",
202, 201, toSqlTimestamp(_version2Instant), MAX_SQL_TIMESTAMP, toSqlTimestamp(_version2Instant), MAX_SQL_TIMESTAMP, "TestPortfolio202", 25);
template.update("INSERT INTO prt_portfolio VALUES (?,?,?,?,?, ?,?,?)",
301, 301, toSqlTimestamp(_version1Instant), MAX_SQL_TIMESTAMP, toSqlTimestamp(_version1Instant), MAX_SQL_TIMESTAMP, "TestPortfolio301", 75);
_visiblePortfolios = 3;
_totalPortfolios = 4;
template.update("INSERT INTO prt_node VALUES (?,?,?,?,?, ?,?,?,?,?)",
111, 111, 101, 101, null, null, 0, 1, 6, "TestNode111");
template.update("INSERT INTO prt_node VALUES (?,?,?,?,?, ?,?,?,?,?)",
112, 112, 101, 101, 111, 111, 1, 2, 5, "TestNode112");
template.update("INSERT INTO prt_node VALUES (?,?,?,?,?, ?,?,?,?,?)",
113, 113, 101, 101, 112, 112, 2, 3, 4, "TestNode113");
template.update("INSERT INTO prt_node VALUES (?,?,?,?,?, ?,?,?,?,?)",
121, 121, 102, 102, null, null, 0, 1, 2, "TestNode121");
template.update("INSERT INTO prt_node VALUES (?,?,?,?,?, ?,?,?,?,?)",
211, 211, 201, 201, null, null, 0, 1, 2, "TestNode211");
template.update("INSERT INTO prt_node VALUES (?,?,?,?,?, ?,?,?,?,?)",
212, 211, 202, 201, null, null, 0, 1, 2, "TestNode212");
template.update("INSERT INTO prt_node VALUES (?,?,?,?,?, ?,?,?,?,?)",
311, 311, 301, 301, null, null, 0, 1, 2, "TestNode311");
template.update("INSERT INTO prt_position VALUES (?,?,?)",
112, "DbPos", "500");
template.update("INSERT INTO prt_position VALUES (?,?,?)",
113, "DbPos", "501");
template.update("INSERT INTO prt_position VALUES (?,?,?)",
113, "DbPos", "502");
template.update("INSERT INTO prt_position VALUES (?,?,?)",
211, "DbPos", "500");
template.update("INSERT INTO prt_position VALUES (?,?,?)",
212, "DbPos", "500");
template.update("INSERT INTO prt_position VALUES (?,?,?)",
311, "DbPos", "500");
template.update("INSERT INTO prt_portfolio_attribute VALUES (?,?,?,?,?)",
10, 101, 101, "K101a", "V101a");
template.update("INSERT INTO prt_portfolio_attribute VALUES (?,?,?,?,?)",
11, 101, 101, "K101b", "V101b");
template.update("INSERT INTO prt_portfolio_attribute VALUES (?,?,?,?,?)",
12, 102, 102, "K102a", "V102a");
template.update("INSERT INTO prt_portfolio_attribute VALUES (?,?,?,?,?)",
13, 102, 102, "K102b", "V102b");
_totalPositions = 6;
}
//-------------------------------------------------------------------------
protected void assert101(final PortfolioDocument test, final int depth) {
UniqueId uniqueId = UniqueId.of("DbPrt", "101", "0");
assertNotNull(test);
assertEquals(uniqueId, test.getUniqueId());
assertEquals(_version1Instant, test.getVersionFromInstant());
assertEquals(null, test.getVersionToInstant());
assertEquals(_version1Instant, test.getCorrectionFromInstant());
assertEquals(null, test.getCorrectionToInstant());
ManageablePortfolio portfolio = test.getPortfolio();
assertEquals(uniqueId, portfolio.getUniqueId());
assertEquals("TestPortfolio101", portfolio.getName());
ManageablePortfolioNode rootNode = portfolio.getRootNode();
assertNode111(rootNode, depth, uniqueId);
assertNotNull(portfolio.getAttributes());
assertEquals(2, portfolio.getAttributes().size());
assertEquals("V101a", portfolio.getAttributes().get("K101a"));
assertEquals("V101b", portfolio.getAttributes().get("K101b"));
}
protected void assertNode111(final ManageablePortfolioNode node, final int depth, final UniqueId portfolioId) {
assertEquals(UniqueId.of("DbPrt", "111", "0"), node.getUniqueId());
assertEquals("TestNode111", node.getName());
assertEquals(null, node.getParentNodeId());
assertEquals(portfolioId, node.getPortfolioId());
assertEquals(0, node.getPositionIds().size());
if (depth == 0) {
assertEquals(0, node.getChildNodes().size());
return;
}
assertEquals(1, node.getChildNodes().size());
ManageablePortfolioNode child112 = node.getChildNodes().get(0);
assertNode112(child112, depth, portfolioId);
}
protected void assertNode112(final ManageablePortfolioNode node, final int depth, final UniqueId portfolioId) {
assertEquals(UniqueId.of("DbPrt", "112", "0"), node.getUniqueId());
assertEquals("TestNode112", node.getName());
assertEquals(UniqueId.of("DbPrt", "111", "0"), node.getParentNodeId());
assertEquals(portfolioId, node.getPortfolioId());
if (_includePositions) {
assertEquals(node.getPositionIds().toString(), 1, node.getPositionIds().size());
assertEquals(ObjectId.of("DbPos", "500"), node.getPositionIds().get(0));
} else {
assertEquals(0, node.getPositionIds().size());
}
if (depth == 1) {
assertEquals(0, node.getChildNodes().size());
return;
}
assertEquals(1, node.getChildNodes().size());
ManageablePortfolioNode child113 = node.getChildNodes().get(0);
assertNode113(child113, portfolioId);
}
protected void assertNode113(final ManageablePortfolioNode node, final UniqueId portfolioId) {
assertEquals(UniqueId.of("DbPrt", "113", "0"), node.getUniqueId());
assertEquals("TestNode113", node.getName());
assertEquals(UniqueId.of("DbPrt", "112", "0"), node.getParentNodeId());
assertEquals(portfolioId, node.getPortfolioId());
assertEquals(0, node.getChildNodes().size());
if (_includePositions) {
assertEquals(2, node.getPositionIds().size());
assertEquals(true, node.getPositionIds().contains(ObjectId.of("DbPos", "501")));
assertEquals(true, node.getPositionIds().contains(ObjectId.of("DbPos", "502")));
} else {
assertEquals(0, node.getPositionIds().size());
}
}
protected void assert102(final PortfolioDocument test) {
UniqueId uniqueId = UniqueId.of("DbPrt", "102", "0");
assertNotNull(test);
assertEquals(uniqueId, test.getUniqueId());
assertEquals(_version1Instant, test.getVersionFromInstant());
assertEquals(null, test.getVersionToInstant());
assertEquals(_version1Instant, test.getCorrectionFromInstant());
assertEquals(null, test.getCorrectionToInstant());
ManageablePortfolio portfolio = test.getPortfolio();
assertEquals(uniqueId, portfolio.getUniqueId());
assertEquals("TestPortfolio102", portfolio.getName());
assertNotNull(portfolio.getAttributes());
assertEquals(2, portfolio.getAttributes().size());
assertEquals("V102a", portfolio.getAttributes().get("K102a"));
assertEquals("V102b", portfolio.getAttributes().get("K102b"));
}
protected void assert201(final PortfolioDocument test) {
UniqueId uniqueId = UniqueId.of("DbPrt", "201", "0");
assertNotNull(test);
assertEquals(uniqueId, test.getUniqueId());
assertEquals(_version1Instant, test.getVersionFromInstant());
assertEquals(_version2Instant, test.getVersionToInstant());
assertEquals(_version1Instant, test.getCorrectionFromInstant());
assertEquals(null, test.getCorrectionToInstant());
ManageablePortfolio portfolio = test.getPortfolio();
assertEquals(uniqueId, portfolio.getUniqueId());
assertEquals("TestPortfolio201", portfolio.getName());
ManageablePortfolioNode rootNode = portfolio.getRootNode();
assertNode211(rootNode, uniqueId);
assertNotNull(portfolio.getAttributes());
assertTrue(portfolio.getAttributes().isEmpty());
}
protected void assertNode211(final ManageablePortfolioNode node, final UniqueId portfolioId) {
assertEquals(UniqueId.of("DbPrt", "211", "0"), node.getUniqueId());
assertEquals("TestNode211", node.getName());
assertEquals(null, node.getParentNodeId());
assertEquals(portfolioId, node.getPortfolioId());
assertEquals(0, node.getChildNodes().size());
if (_includePositions) {
assertEquals(1, node.getPositionIds().size());
assertEquals(ObjectId.of("DbPos", "500"), node.getPositionIds().get(0));
} else {
assertEquals(0, node.getPositionIds().size());
}
}
protected void assert202(final PortfolioDocument test) {
UniqueId uniqueId = UniqueId.of("DbPrt", "201", "1");
assertNotNull(test);
assertEquals(uniqueId, test.getUniqueId());
assertEquals(_version2Instant, test.getVersionFromInstant());
assertEquals(null, test.getVersionToInstant());
assertEquals(_version2Instant, test.getCorrectionFromInstant());
assertEquals(null, test.getCorrectionToInstant());
ManageablePortfolio portfolio = test.getPortfolio();
assertEquals(uniqueId, portfolio.getUniqueId());
assertEquals("TestPortfolio202", portfolio.getName());
ManageablePortfolioNode rootNode = portfolio.getRootNode();
assertNode212(rootNode, uniqueId);
assertNotNull(portfolio.getAttributes());
assertTrue(portfolio.getAttributes().isEmpty());
}
protected void assertNode212(final ManageablePortfolioNode node, final UniqueId portfolioId) {
assertEquals(UniqueId.of("DbPrt", "211", "1"), node.getUniqueId());
assertEquals("TestNode212", node.getName());
assertEquals(null, node.getParentNodeId());
assertEquals(portfolioId, node.getPortfolioId());
assertEquals(0, node.getChildNodes().size());
if (_includePositions) {
assertEquals(1, node.getPositionIds().size());
assertEquals(ObjectId.of("DbPos", "500"), node.getPositionIds().get(0));
} else {
assertEquals(0, node.getPositionIds().size());
}
}
protected void assert301(final PortfolioDocument test) {
UniqueId uniqueId = UniqueId.of("DbPrt", "301", "0");
assertNotNull(test);
assertEquals(uniqueId, test.getUniqueId());
assertEquals(_version1Instant, test.getVersionFromInstant());
assertEquals(null, test.getVersionToInstant());
assertEquals(_version1Instant, test.getCorrectionFromInstant());
assertEquals(null, test.getCorrectionToInstant());
ManageablePortfolio portfolio = test.getPortfolio();
assertEquals(uniqueId, portfolio.getUniqueId());
assertEquals("TestPortfolio301", portfolio.getName());
ManageablePortfolioNode rootNode = portfolio.getRootNode();
assertNode311(rootNode, uniqueId);
assertNotNull(portfolio.getAttributes());
assertTrue(portfolio.getAttributes().isEmpty());
}
protected void assertNode311(final ManageablePortfolioNode node, final UniqueId portfolioId) {
assertEquals(UniqueId.of("DbPrt", "311", "0"), node.getUniqueId());
assertEquals("TestNode311", node.getName());
assertEquals(null, node.getParentNodeId());
assertEquals(portfolioId, node.getPortfolioId());
assertEquals(0, node.getChildNodes().size());
if (_includePositions) {
assertEquals(1, node.getPositionIds().size());
assertEquals(ObjectId.of("DbPos", "500"), node.getPositionIds().get(0));
} else {
assertEquals(0, node.getPositionIds().size());
}
}
protected void assertNoPositions() {
_includePositions = false;
}
}