/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.masterdb.historicaltimeseries; 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 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.LocalDate; import org.threeten.bp.OffsetDateTime; import org.threeten.bp.ZoneOffset; import com.opengamma.id.ExternalId; import com.opengamma.id.ExternalIdBundleWithDates; import com.opengamma.id.ExternalIdWithDates; import com.opengamma.id.UniqueId; import com.opengamma.master.historicaltimeseries.HistoricalTimeSeriesInfoDocument; import com.opengamma.master.historicaltimeseries.ManageableHistoricalTimeSeriesInfo; import com.opengamma.util.db.DbDateUtils; import com.opengamma.util.test.AbstractDbTest; import com.opengamma.util.test.TestGroup; /** * Base tests for DbHistoricalTimeSeriesMasterWorker via DbHistoricalTimeSeriesMaster. */ @Test(groups = TestGroup.UNIT_DB) public abstract class AbstractDbHistoricalTimeSeriesMasterWorkerTest extends AbstractDbTest { private static final Logger s_logger = LoggerFactory.getLogger(AbstractDbHistoricalTimeSeriesMasterWorkerTest.class); protected DbHistoricalTimeSeriesMaster _htsMaster; protected Instant _version1Instant; protected Instant _version2Instant; protected Instant _version3Instant; protected Instant _version4Instant; protected int _totalPortfolios; protected int _totalHistoricalTimeSeries; protected OffsetDateTime _now; public AbstractDbHistoricalTimeSeriesMasterWorkerTest(String databaseType, String databaseVersion) { super(databaseType, databaseVersion); s_logger.info("running testcases for {}", databaseType); } //------------------------------------------------------------------------- @Override protected void doSetUp() { _htsMaster = new DbHistoricalTimeSeriesMaster(getDbConnector()); _now = OffsetDateTime.now(); _htsMaster.setClock(Clock.fixed(_now.toInstant(), ZoneOffset.UTC)); _version1Instant = _now.toInstant().minusSeconds(100); _version2Instant = _now.toInstant().minusSeconds(50); _version3Instant = _now.toInstant().minusSeconds(40); _version4Instant = _now.toInstant().minusSeconds(30); s_logger.debug("test data now: {}", _now); s_logger.debug("test data 1: {}", _version1Instant); s_logger.debug("test data 2: {}", _version2Instant); s_logger.debug("test data 3: {}", _version3Instant); s_logger.debug("test data 4: {}", _version4Instant); final JdbcOperations template = _htsMaster.getDbConnector().getJdbcOperations(); template.update("INSERT INTO hts_name VALUES (?,?)", 1, "N101"); template.update("INSERT INTO hts_name VALUES (?,?)", 2, "N102"); template.update("INSERT INTO hts_name VALUES (?,?)", 3, "N201"); template.update("INSERT INTO hts_name VALUES (?,?)", 4, "N202"); template.update("INSERT INTO hts_name VALUES (?,?)", 5, "N203"); template.update("INSERT INTO hts_data_field VALUES (?,?)", 11, "DF11"); template.update("INSERT INTO hts_data_field VALUES (?,?)", 12, "DF12"); template.update("INSERT INTO hts_data_source VALUES (?,?)", 21, "DS21"); template.update("INSERT INTO hts_data_source VALUES (?,?)", 22, "DS22"); template.update("INSERT INTO hts_data_provider VALUES (?,?)", 31, "DP31"); template.update("INSERT INTO hts_data_provider VALUES (?,?)", 32, "DP32"); template.update("INSERT INTO hts_observation_time VALUES (?,?)", 41, "OT41"); template.update("INSERT INTO hts_observation_time VALUES (?,?)", 42, "OT42"); template.update("INSERT INTO hts_document VALUES (?,?,?,?,?, ?,?,?,?,?, ?)", 101, 101, toSqlTimestamp(_version1Instant), MAX_SQL_TIMESTAMP, toSqlTimestamp(_version1Instant), MAX_SQL_TIMESTAMP, 1, 11, 21, 31, 41); template.update("INSERT INTO hts_document VALUES (?,?,?,?,?, ?,?,?,?,?, ?)", 102, 102, toSqlTimestamp(_version1Instant), MAX_SQL_TIMESTAMP, toSqlTimestamp(_version1Instant), MAX_SQL_TIMESTAMP, 2, 12, 22, 32, 42); template.update("INSERT INTO hts_document VALUES (?,?,?,?,?, ?,?,?,?,?, ?)", 201, 201, toSqlTimestamp(_version1Instant), toSqlTimestamp(_version2Instant), toSqlTimestamp(_version1Instant), MAX_SQL_TIMESTAMP, 3, 11, 21, 31, 41); template.update("INSERT INTO hts_document VALUES (?,?,?,?,?, ?,?,?,?,?, ?)", 202, 201, toSqlTimestamp(_version2Instant), MAX_SQL_TIMESTAMP, toSqlTimestamp(_version2Instant), toSqlTimestamp(_version3Instant), 4, 11, 21, 31, 42); template.update("INSERT INTO hts_document VALUES (?,?,?,?,?, ?,?,?,?,?, ?)", 203, 201, toSqlTimestamp(_version2Instant), MAX_SQL_TIMESTAMP, toSqlTimestamp(_version3Instant), MAX_SQL_TIMESTAMP, 5, 11, 21, 31, 42); _totalHistoricalTimeSeries = 3; template.update("INSERT INTO hts_idkey VALUES (?,?,?)", 501, "TICKER", "V501"); template.update("INSERT INTO hts_idkey VALUES (?,?,?)", 502, "NASDAQ", "V502"); template.update("INSERT INTO hts_idkey VALUES (?,?,?)", 503, "TICKER", "V503"); template.update("INSERT INTO hts_idkey VALUES (?,?,?)", 504, "NASDAQ", "V504"); template.update("INSERT INTO hts_idkey VALUES (?,?,?)", 505, "TICKER", "V505"); template.update("INSERT INTO hts_idkey VALUES (?,?,?)", 506, "NASDAQ", "V506"); template.update("INSERT INTO hts_doc2idkey (id, doc_id, idkey_id, valid_from, valid_to) VALUES (?,?,?,?,?)", 1, 101, 501, DbDateUtils.MIN_SQL_DATE, DbDateUtils.MAX_SQL_DATE); template.update("INSERT INTO hts_doc2idkey (id, doc_id, idkey_id, valid_from, valid_to) VALUES (?,?,?,?,?)", 2, 101, 502, DbDateUtils.MIN_SQL_DATE, DbDateUtils.MAX_SQL_DATE); template.update("INSERT INTO hts_doc2idkey (id, doc_id, idkey_id, valid_from, valid_to) VALUES (?,?,?,?,?)", 3, 102, 503, DbDateUtils.MIN_SQL_DATE, DbDateUtils.MAX_SQL_DATE); template.update("INSERT INTO hts_doc2idkey (id, doc_id, idkey_id, valid_from, valid_to) VALUES (?,?,?,?,?)", 4, 102, 504, DbDateUtils.toSqlDate(LocalDate.of(2011, 6, 30)), DbDateUtils.MAX_SQL_DATE); template.update("INSERT INTO hts_doc2idkey (id, doc_id, idkey_id, valid_from, valid_to) VALUES (?,?,?,?,?)", 5, 201, 505, DbDateUtils.MIN_SQL_DATE, DbDateUtils.MAX_SQL_DATE); template.update("INSERT INTO hts_doc2idkey (id, doc_id, idkey_id, valid_from, valid_to) VALUES (?,?,?,?,?)", 6, 201, 506, DbDateUtils.MIN_SQL_DATE, DbDateUtils.MAX_SQL_DATE); template.update("INSERT INTO hts_doc2idkey (id, doc_id, idkey_id, valid_from, valid_to) VALUES (?,?,?,?,?)", 7, 202, 505, DbDateUtils.MIN_SQL_DATE, DbDateUtils.MAX_SQL_DATE); template.update("INSERT INTO hts_doc2idkey (id, doc_id, idkey_id, valid_from, valid_to) VALUES (?,?,?,?,?)", 8, 202, 506, DbDateUtils.MIN_SQL_DATE, DbDateUtils.MAX_SQL_DATE); template.update("INSERT INTO hts_doc2idkey (id, doc_id, idkey_id, valid_from, valid_to) VALUES (?,?,?,?,?)", 9, 203, 505, DbDateUtils.MIN_SQL_DATE, DbDateUtils.MAX_SQL_DATE); template.update("INSERT INTO hts_doc2idkey (id, doc_id, idkey_id, valid_from, valid_to) VALUES (?,?,?,?,?)", 10, 203, 506, DbDateUtils.MIN_SQL_DATE, DbDateUtils.MAX_SQL_DATE); template.update("INSERT INTO hts_point VALUES (?,?,?,?,?)", 101, DbDateUtils.toSqlDate(LocalDate.of(2011, 1, 1)), toSqlTimestamp(_version1Instant), toSqlTimestamp(_version1Instant), 3.1d); template.update("INSERT INTO hts_point VALUES (?,?,?,?,?)", 101, DbDateUtils.toSqlDate(LocalDate.of(2011, 1, 2)), toSqlTimestamp(_version2Instant), toSqlTimestamp(_version2Instant), 3.2d); template.update("INSERT INTO hts_point VALUES (?,?,?,?,?)", 101, DbDateUtils.toSqlDate(LocalDate.of(2011, 1, 3)), toSqlTimestamp(_version2Instant), toSqlTimestamp(_version2Instant), 3.3d); template.update("INSERT INTO hts_point VALUES (?,?,?,?,?)", 101, DbDateUtils.toSqlDate(LocalDate.of(2011, 1, 2)), toSqlTimestamp(_version2Instant), toSqlTimestamp(_version3Instant), 3.21d); template.update("INSERT INTO hts_point VALUES (?,?,?,?,?)", 101, DbDateUtils.toSqlDate(LocalDate.of(2011, 1, 2)), toSqlTimestamp(_version2Instant), toSqlTimestamp(_version4Instant), 3.22d); template.update("INSERT INTO hts_point VALUES (?,?,?,?,?)", 101, DbDateUtils.toSqlDate(LocalDate.of(2011, 1, 3)), toSqlTimestamp(_version2Instant), toSqlTimestamp(_version4Instant), 3.33d); } @Override protected void doTearDown() { _htsMaster = null; } //------------------------------------------------------------------------- protected void assert101(final HistoricalTimeSeriesInfoDocument test) { UniqueId uniqueId = UniqueId.of("DbHts", "101", "0"); assertNotNull(test); assertEquals(uniqueId, test.getUniqueId()); assertEquals(_version1Instant, test.getVersionFromInstant()); assertEquals(null, test.getVersionToInstant()); assertEquals(_version1Instant, test.getCorrectionFromInstant()); assertEquals(null, test.getCorrectionToInstant()); ManageableHistoricalTimeSeriesInfo info = test.getInfo(); assertNotNull(info); assertEquals(uniqueId, info.getUniqueId()); assertEquals("N101", info.getName()); assertEquals("DF11", info.getDataField()); assertEquals("DS21", info.getDataSource()); assertEquals("DP31", info.getDataProvider()); assertEquals("OT41", info.getObservationTime()); ExternalIdBundleWithDates key = info.getExternalIdBundle(); assertNotNull(key); assertEquals(2, key.size()); assertEquals(true, key.getExternalIds().contains( ExternalIdWithDates.of(ExternalId.of("TICKER", "V501"), null, null))); assertEquals(true, key.getExternalIds().contains( ExternalIdWithDates.of(ExternalId.of("NASDAQ", "V502"), null, null))); } protected void assert102(final HistoricalTimeSeriesInfoDocument test) { UniqueId uniqueId = UniqueId.of("DbHts", "102", "0"); assertNotNull(test); assertEquals(uniqueId, test.getUniqueId()); assertEquals(_version1Instant, test.getVersionFromInstant()); assertEquals(null, test.getVersionToInstant()); assertEquals(_version1Instant, test.getCorrectionFromInstant()); assertEquals(null, test.getCorrectionToInstant()); ManageableHistoricalTimeSeriesInfo info = test.getInfo(); assertNotNull(info); assertEquals(uniqueId, info.getUniqueId()); assertEquals("N102", info.getName()); assertEquals("DF12", info.getDataField()); assertEquals("DS22", info.getDataSource()); assertEquals("DP32", info.getDataProvider()); assertEquals("OT42", info.getObservationTime()); ExternalIdBundleWithDates key = info.getExternalIdBundle(); assertNotNull(key); assertEquals(2, key.size()); assertEquals(true, key.getExternalIds().contains( ExternalIdWithDates.of(ExternalId.of("TICKER", "V503"), null, null))); assertEquals(true, key.getExternalIds().contains( ExternalIdWithDates.of(ExternalId.of("NASDAQ", "V504"), LocalDate.of(2011, 6, 30), null))); } protected void assert201(final HistoricalTimeSeriesInfoDocument test) { UniqueId uniqueId = UniqueId.of("DbHts", "201", "0"); assertNotNull(test); assertEquals(uniqueId, test.getUniqueId()); assertEquals(_version1Instant, test.getVersionFromInstant()); assertEquals(_version2Instant, test.getVersionToInstant()); assertEquals(_version1Instant, test.getCorrectionFromInstant()); assertEquals(null, test.getCorrectionToInstant()); ManageableHistoricalTimeSeriesInfo info = test.getInfo(); assertNotNull(info); assertEquals(uniqueId, info.getUniqueId()); assertEquals("N201", info.getName()); assertEquals("DF11", info.getDataField()); assertEquals("DS21", info.getDataSource()); assertEquals("DP31", info.getDataProvider()); assertEquals("OT41", info.getObservationTime()); ExternalIdBundleWithDates key = info.getExternalIdBundle(); assertNotNull(key); assertEquals(2, key.size()); assertEquals(true, key.getExternalIds().contains( ExternalIdWithDates.of(ExternalId.of("TICKER", "V505"), null, null))); assertEquals(true, key.getExternalIds().contains( ExternalIdWithDates.of(ExternalId.of("NASDAQ", "V506"), null, null))); } protected void assert202(final HistoricalTimeSeriesInfoDocument test) { UniqueId uniqueId = UniqueId.of("DbHts", "201", "1"); assertNotNull(test); assertEquals(uniqueId, test.getUniqueId()); assertEquals(_version2Instant, test.getVersionFromInstant()); assertEquals(null, test.getVersionToInstant()); assertEquals(_version2Instant, test.getCorrectionFromInstant()); assertEquals(_version3Instant, test.getCorrectionToInstant()); ManageableHistoricalTimeSeriesInfo info = test.getInfo(); assertNotNull(info); assertEquals(uniqueId, info.getUniqueId()); assertEquals("N202", info.getName()); assertEquals("DF11", info.getDataField()); assertEquals("DS21", info.getDataSource()); assertEquals("DP31", info.getDataProvider()); assertEquals("OT42", info.getObservationTime()); ExternalIdBundleWithDates key = info.getExternalIdBundle(); assertNotNull(key); assertEquals(2, key.size()); assertEquals(true, key.getExternalIds().contains( ExternalIdWithDates.of(ExternalId.of("TICKER", "V505"), null, null))); assertEquals(true, key.getExternalIds().contains( ExternalIdWithDates.of(ExternalId.of("NASDAQ", "V506"), null, null))); } protected void assert203(final HistoricalTimeSeriesInfoDocument test) { UniqueId uniqueId = UniqueId.of("DbHts", "201", "2"); assertNotNull(test); assertEquals(uniqueId, test.getUniqueId()); assertEquals(_version2Instant, test.getVersionFromInstant()); assertEquals(null, test.getVersionToInstant()); assertEquals(_version3Instant, test.getCorrectionFromInstant()); assertEquals(null, test.getCorrectionToInstant()); ManageableHistoricalTimeSeriesInfo info = test.getInfo(); assertNotNull(info); assertEquals(uniqueId, info.getUniqueId()); assertEquals("N203", info.getName()); assertEquals("DF11", info.getDataField()); assertEquals("DS21", info.getDataSource()); assertEquals("DP31", info.getDataProvider()); assertEquals("OT42", info.getObservationTime()); ExternalIdBundleWithDates key = info.getExternalIdBundle(); assertNotNull(key); assertEquals(2, key.size()); assertEquals(true, key.getExternalIds().contains( ExternalIdWithDates.of(ExternalId.of("TICKER", "V505"), null, null))); assertEquals(true, key.getExternalIds().contains( ExternalIdWithDates.of(ExternalId.of("NASDAQ", "V506"), null, null))); } }