/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.bbg.util;
import static com.opengamma.bbg.BloombergConstants.FIELD_FUT_FIRST_TRADE_DT;
import static com.opengamma.bbg.BloombergConstants.FIELD_FUT_LAST_TRADE_DT;
import static com.opengamma.bbg.BloombergConstants.FIELD_ID_BBG_UNIQUE;
import static com.opengamma.bbg.BloombergConstants.FIELD_ID_CUSIP;
import static com.opengamma.bbg.BloombergConstants.FIELD_OPT_CHAIN;
import static com.opengamma.bbg.BloombergConstants.FIELD_PARSEKYABLE_DES;
import static com.opengamma.bbg.util.BloombergDataUtils.toBloombergDate;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;
import java.io.StringReader;
import java.util.Map;
import java.util.Set;
import org.fudgemsg.FudgeContext;
import org.fudgemsg.MutableFudgeMsg;
import org.testng.annotations.Test;
import org.threeten.bp.LocalDate;
import org.threeten.bp.LocalDateTime;
import org.threeten.bp.LocalTime;
import org.threeten.bp.Month;
import org.threeten.bp.ZoneId;
import org.threeten.bp.ZoneOffset;
import org.threeten.bp.ZonedDateTime;
import com.google.common.collect.Sets;
import com.opengamma.core.historicaltimeseries.HistoricalTimeSeriesConstants;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundleWithDates;
import com.opengamma.id.ExternalIdWithDates;
import com.opengamma.util.test.TestGroup;
/**
* Test.
*/
@Test(groups = TestGroup.UNIT)
public class BloombergDataUtilsTest {
private static final String[] IDENTIFIERS = new String[] {
"#Comment",
"ISIN~ISIN 1234",
"BLOOMBERG_BUID~BUID 1234",
"BLOOMBERG_TICKER~TICKER 1234",
"CUSIP~CUSIP 1234",
"SEDOL1~SEDOL1 1234",
"BLOOMBERG_TCM~BLOOMBERG_TCM 1234"};
//-------------------------------------------------------------------------
@Test
public void optionChain() throws Exception {
MockReferenceDataProvider rdp = new MockReferenceDataProvider();
rdp.addExpectedField(FIELD_OPT_CHAIN);
rdp.addResult("FIRST US Equity", FIELD_OPT_CHAIN, "Security Description=SECOND US Equity");
rdp.addResult("FIRST US Equity", FIELD_OPT_CHAIN, "Security Description=THIRD US Equity");
Set<ExternalId> optionChain = BloombergDataUtils.getOptionChain(rdp, "FIRST US Equity");
assertNotNull(optionChain);
assertTrue(optionChain.contains(ExternalSchemes.bloombergTickerSecurityId("SECOND US Equity")));
assertTrue(optionChain.contains(ExternalSchemes.bloombergTickerSecurityId("THIRD US Equity")));
}
@Test
public void addTwoDigitYearCode() throws Exception {
Set<ExternalIdWithDates> identifiers = Sets.newHashSet(
ExternalIdWithDates.of(ExternalSchemes.bloombergTickerSecurityId("EDU0 Comdty"),
LocalDate.of(2010, Month.SEPTEMBER, 14), LocalDate.of(2020, Month.SEPTEMBER, 14)),
ExternalIdWithDates.of(ExternalSchemes.bloombergBuidSecurityId("IX11084074-0"), null, null));
ExternalIdBundleWithDates withTwoDigits = BloombergDataUtils.addTwoDigitYearCode(new ExternalIdBundleWithDates(identifiers));
assertTrue(withTwoDigits.size() == 3);
for (ExternalIdWithDates identifierWithDates : identifiers) {
assertTrue(withTwoDigits.contains(identifierWithDates));
}
assertTrue(withTwoDigits.contains(ExternalIdWithDates.of(
ExternalSchemes.bloombergTickerSecurityId("EDU20 Comdty"),
LocalDate.of(2010, Month.SEPTEMBER, 14), LocalDate.of(2020, Month.SEPTEMBER, 14))));
identifiers = Sets.newHashSet(
ExternalIdWithDates.of(ExternalSchemes.bloombergTickerSecurityId("EDU09 Comdty"),
LocalDate.of(1999, Month.SEPTEMBER, 14), LocalDate.of(2009, Month.SEPTEMBER, 14)),
ExternalIdWithDates.of(ExternalSchemes.bloombergBuidSecurityId("IX9471080-0"), null, null));
withTwoDigits = BloombergDataUtils.addTwoDigitYearCode(new ExternalIdBundleWithDates(identifiers));
assertTrue(withTwoDigits.size() == 3);
for (ExternalIdWithDates identifierWithDates : identifiers) {
assertTrue(withTwoDigits.contains(identifierWithDates));
}
assertTrue(withTwoDigits.contains(ExternalIdWithDates.of(
ExternalSchemes.bloombergTickerSecurityId("EDU9 Comdty"),
LocalDate.of(1999, Month.SEPTEMBER, 14), LocalDate.of(2009, Month.SEPTEMBER, 14))));
}
@Test
public void parseIdentifiers() throws Exception {
Set<ExternalIdWithDates> identifiers = Sets.newHashSet(
ExternalIdWithDates.of(ExternalSchemes.bloombergTickerSecurityId("EDU0 Comdty"),
LocalDate.of(2010, Month.SEPTEMBER, 14), LocalDate.of(2020, Month.SEPTEMBER, 14)),
ExternalIdWithDates.of(ExternalSchemes.bloombergBuidSecurityId("IX11084074-0"), null, null),
ExternalIdWithDates.of(ExternalSchemes.cusipSecurityId("EDU0"), null, null));
ExternalIdBundleWithDates expected = new ExternalIdBundleWithDates(identifiers);
MutableFudgeMsg message = new FudgeContext().newMessage();
message.add(FIELD_ID_BBG_UNIQUE, "IX11084074-0");
message.add(FIELD_ID_CUSIP, "EDU0");
message.add(FIELD_PARSEKYABLE_DES, "EDU0 Comdty");
message.add(FIELD_FUT_FIRST_TRADE_DT, "2010-09-14");
message.add(FIELD_FUT_LAST_TRADE_DT, "2020-09-14");
ExternalIdBundleWithDates actual = BloombergDataUtils.parseIdentifiers(message, FIELD_FUT_FIRST_TRADE_DT, FIELD_FUT_LAST_TRADE_DT);
assertEquals(expected, actual);
}
@Test
public void identifierLoader() throws Exception {
Set<ExternalId> identifiers = BloombergDataUtils.identifierLoader(new StringReader(multiStringLine(IDENTIFIERS)));
assertNotNull(identifiers);
assertEquals(6, identifiers.size());
assertTrue(identifiers.contains(ExternalId.of("ISIN", "ISIN 1234")));
assertTrue(identifiers.contains(ExternalId.of("BLOOMBERG_BUID", "BUID 1234")));
assertTrue(identifiers.contains(ExternalId.of("BLOOMBERG_TICKER", "TICKER 1234")));
assertTrue(identifiers.contains(ExternalId.of("CUSIP", "CUSIP 1234")));
assertTrue(identifiers.contains(ExternalId.of("SEDOL1", "SEDOL1 1234")));
assertTrue(identifiers.contains(ExternalId.of("BLOOMBERG_TCM", "BLOOMBERG_TCM 1234")));
}
@Test
public void getBUID() throws Exception {
MockReferenceDataProvider rdp = new MockReferenceDataProvider();
rdp.addExpectedField(FIELD_ID_BBG_UNIQUE);
rdp.addResult("FIRST US Equity", FIELD_ID_BBG_UNIQUE, "EQ1234");
rdp.addResult("SECOND US Equity", FIELD_ID_BBG_UNIQUE, "EQ4321");
Map<String, String> buids = BloombergDataUtils.getBUID(rdp, Sets.newHashSet("FIRST US Equity", "SECOND US Equity"));
assertNotNull(buids);
assertEquals(2, buids.size());
assertEquals("EQ1234", buids.get("FIRST US Equity"));
assertEquals("EQ4321", buids.get("SECOND US Equity"));
}
private static String multiStringLine(String... lines) {
StringBuilder buf = new StringBuilder();
for (String string : lines) {
buf.append(string);
buf.append(System.getProperty("line.separator"));
}
return buf.toString();
}
@Test
public void testFutureBundleToGenericFutureTicker() {
ZonedDateTime now = LocalDateTime.of(2012, 8, 25, 14, 32, 00, 00).atZone(ZoneId.of("Europe/London"));
ExternalId testInput1 = ExternalId.of(ExternalSchemes.BLOOMBERG_TICKER, "EDZ2 Comdty");
ExternalId expectedOutput1 = ExternalId.of(ExternalSchemes.BLOOMBERG_TICKER, "ED2 Comdty");
ExternalId actualOutput1 = BloombergDataUtils.futureBundleToGenericFutureTicker(testInput1.toBundle(), now, LocalTime.of(15, 00).atOffset(ZoneOffset.ofHours(1)), ZoneId.of("Europe/London"));
assertEquals(expectedOutput1, actualOutput1);
ExternalId testInput2 = ExternalId.of(ExternalSchemes.BLOOMBERG_TICKER, "EDZ1 Comdty");
ExternalId expectedOutput2 = ExternalId.of(ExternalSchemes.BLOOMBERG_TICKER, "ED37 Comdty");
ExternalId actualOutput2 = BloombergDataUtils.futureBundleToGenericFutureTicker(testInput2.toBundle(), now, LocalTime.of(15, 00).atOffset(ZoneOffset.ofHours(1)), ZoneId.of("Europe/London"));
assertEquals(expectedOutput2, actualOutput2);
}
public void test_resolveObservationTime() {
assertEquals(HistoricalTimeSeriesConstants.DEFAULT_OBSERVATION_TIME, BloombergDataUtils.resolveObservationTime(null));
assertEquals(HistoricalTimeSeriesConstants.DEFAULT_OBSERVATION_TIME, BloombergDataUtils.resolveObservationTime("UNKNOWN"));
assertNull(BloombergDataUtils.resolveObservationTime("FOO"));
assertEquals(HistoricalTimeSeriesConstants.LONDON_CLOSE, BloombergDataUtils.resolveObservationTime("CMPL"));
assertEquals(HistoricalTimeSeriesConstants.NEWYORK_CLOSE, BloombergDataUtils.resolveObservationTime("CMPN"));
assertEquals(HistoricalTimeSeriesConstants.TOKYO_CLOSE, BloombergDataUtils.resolveObservationTime("CMPT"));
}
@Test
public void testBloombergDateTime() {
LocalDate localDate = LocalDate.of(99999999, 12, 13);
assertEquals(toBloombergDate(localDate), "99991213");
}
}