/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.bbg.historicaltimeseries; import static com.opengamma.bbg.BloombergConstants.BLOOMBERG_DATA_SOURCE_NAME; import static com.opengamma.bbg.BloombergConstants.DEFAULT_DATA_PROVIDER; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertNotNull; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import org.threeten.bp.Clock; import org.threeten.bp.LocalDate; import com.opengamma.bbg.BloombergConnector; import com.opengamma.bbg.test.BloombergTestUtils; import com.opengamma.core.id.ExternalSchemes; import com.opengamma.id.ExternalId; import com.opengamma.id.ExternalIdBundle; import com.opengamma.provider.historicaltimeseries.HistoricalTimeSeriesProviderGetRequest; import com.opengamma.timeseries.date.localdate.LocalDateDoubleTimeSeries; import com.opengamma.util.test.TestGroup; import com.opengamma.util.time.DateUtils; import com.opengamma.util.time.LocalDateRange; /** * Test. */ @Test(groups = TestGroup.INTEGRATION) public class BloombergHistoricalTimeSeriesProviderTest { private static final ExternalIdBundle SIMPLE_BUNDLE = ExternalIdBundle.of(ExternalSchemes.bloombergTickerSecurityId("IBM US Equity")); private static final ExternalIdBundle COMPLEX_BUNDLE = ExternalIdBundle.of( ExternalId.of("BLOOMBERG_BUID", "EQ0010121400001000"), ExternalId.of("BLOOMBERG_TICKER", "C US Equity"), ExternalId.of("CUSIP", "172967101"), ExternalId.of("ISIN", "US1729671016"), ExternalId.of("SEDOL1", "2297907")); private static final String BBG_DATA_SOURCE = BLOOMBERG_DATA_SOURCE_NAME; private static final String PX_LAST = "PX_LAST"; private BloombergHistoricalTimeSeriesProvider _provider; @BeforeMethod public void setUp() throws Exception { BloombergConnector connector = BloombergTestUtils.getBloombergConnector(); BloombergHistoricalTimeSeriesProvider provider = new BloombergHistoricalTimeSeriesProvider(connector); provider.start(); _provider = provider; } @AfterMethod public void tearDown() throws Exception { if (_provider != null) { _provider.stop(); } _provider = null; } //------------------------------------------------------------------------- @Test(expectedExceptions = IllegalArgumentException.class) public void test_getHistoricalTimeSeries_single_wrongDataSource() { LocalDateRange range = LocalDateRange.of(LocalDate.of(2009, 11, 4), LocalDate.of(2009, 11, 4), true); _provider.getHistoricalTimeSeries(SIMPLE_BUNDLE, "RUBBISH", DEFAULT_DATA_PROVIDER, PX_LAST, range); } @Test public void test_getHistoricalTimeSeries_single_sameDate() { LocalDateRange range = LocalDateRange.of(LocalDate.of(2009, 11, 4), LocalDate.of(2009, 11, 4), true); LocalDateDoubleTimeSeries test = _provider.getHistoricalTimeSeries(SIMPLE_BUNDLE, BBG_DATA_SOURCE, DEFAULT_DATA_PROVIDER, PX_LAST, range); assertNotNull(test); assertEquals(1, test.size()); } @Test public void getHistoricalTimeSeriesWithZeroMaxPoints() throws Exception { LocalDate endDate = LocalDate.of(2012, 03, 07); LocalDate startDate = endDate.minusMonths(1); LocalDateRange dateRange = LocalDateRange.of(startDate, endDate, true); HistoricalTimeSeriesProviderGetRequest realRequest = HistoricalTimeSeriesProviderGetRequest.createGet(SIMPLE_BUNDLE, BBG_DATA_SOURCE, DEFAULT_DATA_PROVIDER, PX_LAST, dateRange); realRequest.setMaxPoints(0); LocalDateDoubleTimeSeries realHts = _provider.getHistoricalTimeSeries(realRequest).getResultMap().get(SIMPLE_BUNDLE); assertNotNull(realHts); assertEquals(0, realHts.size()); } @Test public void getHistoricalTimeSeriesWithAllMaxPoints() throws Exception { LocalDate endDate = LocalDate.of(2012, 03, 07); LocalDate startDate = endDate.minusMonths(1); LocalDateRange dateRange = LocalDateRange.of(startDate, endDate, true); HistoricalTimeSeriesProviderGetRequest referenceRequest = HistoricalTimeSeriesProviderGetRequest.createGet(SIMPLE_BUNDLE, BBG_DATA_SOURCE, DEFAULT_DATA_PROVIDER, PX_LAST, dateRange); LocalDateDoubleTimeSeries reference = _provider.getHistoricalTimeSeries(referenceRequest).getResultMap().get(SIMPLE_BUNDLE); HistoricalTimeSeriesProviderGetRequest realRequest = HistoricalTimeSeriesProviderGetRequest.createGet(SIMPLE_BUNDLE, BBG_DATA_SOURCE, DEFAULT_DATA_PROVIDER, PX_LAST, dateRange); realRequest.setMaxPoints(-9999); LocalDateDoubleTimeSeries realHts = _provider.getHistoricalTimeSeries(realRequest).getResultMap().get(SIMPLE_BUNDLE); assertNotNull(realHts); assertEquals(reference.size(), realHts.size()); assertEquals(reference, realHts); } @Test public void getHistoricalTimeSeriesWithTwoMaxPoints() throws Exception { LocalDate endDate = LocalDate.of(2012, 03, 07); LocalDate startDate = endDate.minusMonths(1); LocalDateRange dateRange = LocalDateRange.of(startDate, endDate, true); HistoricalTimeSeriesProviderGetRequest referenceRequest = HistoricalTimeSeriesProviderGetRequest.createGet(SIMPLE_BUNDLE, BBG_DATA_SOURCE, DEFAULT_DATA_PROVIDER, PX_LAST, dateRange); LocalDateDoubleTimeSeries reference = _provider.getHistoricalTimeSeries(referenceRequest).getResultMap().get(SIMPLE_BUNDLE); HistoricalTimeSeriesProviderGetRequest realRequest = HistoricalTimeSeriesProviderGetRequest.createGet(SIMPLE_BUNDLE, BBG_DATA_SOURCE, DEFAULT_DATA_PROVIDER, PX_LAST, dateRange); realRequest.setMaxPoints(-2); LocalDateDoubleTimeSeries realHts = _provider.getHistoricalTimeSeries(realRequest).getResultMap().get(SIMPLE_BUNDLE); assertNotNull(realHts); assertEquals(2, realHts.size()); assertEquals(reference.tail(2), realHts); } @Test public void test_getHistoricalTimeSeries_single_dates() throws Exception { LocalDate startDate = LocalDate.of(2009, 10, 29); LocalDate endDate = LocalDate.of(2009, 11, 4); LocalDateRange range = LocalDateRange.of(startDate, endDate, true); LocalDateDoubleTimeSeries timeSeriesExpected = _provider.getHistoricalTimeSeries(SIMPLE_BUNDLE, BBG_DATA_SOURCE, DEFAULT_DATA_PROVIDER, PX_LAST, range); assertNotNull(timeSeriesExpected); ExecutorService threadPool = Executors.newFixedThreadPool(4); List<Future<LocalDateDoubleTimeSeries>> results = new ArrayList<Future<LocalDateDoubleTimeSeries>>(); for (int i = 0; i < 20; i++) { results.add(threadPool.submit(new BHDPgetHistoricalTimeSeriesWithDates(SIMPLE_BUNDLE, BBG_DATA_SOURCE, DEFAULT_DATA_PROVIDER, PX_LAST, startDate, endDate))); } for (Future<LocalDateDoubleTimeSeries> future : results) { LocalDateDoubleTimeSeries timeSeriesActual = future.get(); assertNotNull(timeSeriesActual); assertEquals(timeSeriesExpected, timeSeriesActual); } } //------------------------------------------------------------------------- @Test(expectedExceptions = IllegalArgumentException.class) public void test_getHistoricalTimeSeries_Map_wrongDataSource() { LocalDateRange range = LocalDateRange.of(LocalDate.of(2009, 11, 4), LocalDate.of(2009, 11, 4), true); _provider.getHistoricalTimeSeries(COMPLEX_BUNDLE, "RUBBISH", DEFAULT_DATA_PROVIDER, PX_LAST, range); } @Test public void test_getHistoricalTimeSeries_Map() { LocalDateRange range = LocalDateRange.of(LocalDate.of(2009, 10, 4), LocalDate.of(2009, 11, 29), true); Map<ExternalIdBundle, LocalDateDoubleTimeSeries> test = _provider.getHistoricalTimeSeries( Collections.singleton(COMPLEX_BUNDLE), BBG_DATA_SOURCE, "CMPL", "PX_LAST", range); assertNotNull(test); assertEquals(1, test.size()); LocalDateDoubleTimeSeries series = test.get(COMPLEX_BUNDLE); assertNotNull(series); assertFalse(series.isEmpty()); } //------------------------------------------------------------------------- private class BHDPgetHistoricalTimeSeriesWithDates implements Callable<LocalDateDoubleTimeSeries> { private ExternalIdBundle _secDes; private String _dataSource; private String _dataProvider; private String _field; private LocalDate _startDate; private LocalDate _endDate; public BHDPgetHistoricalTimeSeriesWithDates(ExternalIdBundle secDes, String dataSource, String dataProvider, String field, LocalDate startDate, LocalDate endDate) { assertNotNull(secDes); assertNotNull(startDate); assertNotNull(endDate); _secDes = secDes; _dataSource = dataSource; _dataProvider = dataProvider; _field = field; _startDate = startDate; _endDate = endDate; } @Override public LocalDateDoubleTimeSeries call() throws Exception { LocalDateRange range = LocalDateRange.of(_startDate, _endDate, true); return _provider.getHistoricalTimeSeries(_secDes, _dataSource, _dataProvider, _field, range); } } @Test public void test_getAllAvailiableSeries() { LocalDateDoubleTimeSeries hts = _provider.getHistoricalTimeSeries(ExternalIdBundle.of(ExternalSchemes.bloombergTickerSecurityId("JPY3M Curncy")), BBG_DATA_SOURCE, "CMPL", PX_LAST); assertNotNull(hts); assertEquals(getLatestWeekDay(), hts.getLatestTime()); } private LocalDate getLatestWeekDay() { Clock clock = Clock.systemUTC(); return DateUtils.previousWeekDay(LocalDate.now(clock).plusDays(1)); } }