Package com.opengamma.bbg.referencedata

Source Code of com.opengamma.bbg.referencedata.BloombergReferenceDataProviderTest

/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.bbg.referencedata;

import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertTrue;

import java.io.FileReader;
import java.util.Set;
import java.util.TreeSet;

import org.fudgemsg.FudgeField;
import org.fudgemsg.FudgeMsg;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.opengamma.bbg.BloombergConnector;
import com.opengamma.bbg.referencedata.impl.BloombergReferenceDataProvider;
import com.opengamma.bbg.test.BloombergTestUtils;
import com.opengamma.bbg.util.BloombergDataUtils;
import com.opengamma.bbg.util.BloombergDomainIdentifierResolver;
import com.opengamma.id.ExternalId;
import com.opengamma.util.test.TestGroup;

/**
* Test.
*/
@Test(groups = TestGroup.INTEGRATION)
public class BloombergReferenceDataProviderTest {

  private BloombergReferenceDataProvider _refDataProvider;

  @BeforeMethod
  public void setUp() throws Exception {
    BloombergConnector connector = BloombergTestUtils.getBloombergConnector();
    _refDataProvider = new BloombergReferenceDataProvider(connector);
    _refDataProvider.start();
  }

  @AfterMethod
  public void terminateReferenceDataProvider() throws Exception {
    if (_refDataProvider != null) {
      _refDataProvider.stop();
      _refDataProvider = null;
    }
  }

  //-------------------------------------------------------------------------
  @Test(timeOut=30000)
  public void singleSecuritySingleField() {
    final String secName = "AAPL US Equity";
    ReferenceDataProviderGetRequest request = ReferenceDataProviderGetRequest.createGet(secName, "SECURITY_TYP", false);
    ReferenceDataProviderGetResult result = _refDataProvider.getReferenceData(request);
    assertNotNull(result);
    assertEquals(1, result.getReferenceData().size());
    ReferenceData aaplResult = result.getReferenceData(secName);
    assertEquals(secName, aaplResult.getIdentifier());
    assertTrue(aaplResult.getErrors().isEmpty());
    FudgeMsg fieldData = aaplResult.getFieldValues();
    assertNotNull(fieldData);
    assertEquals(1, fieldData.getNumFields());
    assertEquals("Common Stock", fieldData.getString("SECURITY_TYP"));
  }

  @Test(timeOut=30000)
  public void optionExpiryDate() {
    final String secName = "AAPL 02/19/11 C320 Equity";
    ReferenceDataProviderGetRequest request = ReferenceDataProviderGetRequest.createGet(secName, "OPT_EXPIRE_DT", false);
    ReferenceDataProviderGetResult result = _refDataProvider.getReferenceData(request);
    assertNotNull(result);
    assertEquals(1, result.getReferenceData().size());
    ReferenceData aaplResult = result.getReferenceData(secName);
    assertEquals(secName, aaplResult.getIdentifier());
    assertTrue(aaplResult.getErrors().isEmpty());
    FudgeMsg fieldData = aaplResult.getFieldValues();
    assertNotNull(fieldData);
    assertEquals(1, fieldData.getNumFields());
    assertEquals("2011-02-19", fieldData.getString("OPT_EXPIRE_DT"));
  }

  @Test(timeOut=30000)
  public void optionStrikePrice() {
    final String secName = "AAPL 02/19/11 C320 Equity";
    ReferenceDataProviderGetRequest request = ReferenceDataProviderGetRequest.createGet(secName, "OPT_STRIKE_PX", false);
    ReferenceDataProviderGetResult result = _refDataProvider.getReferenceData(request);
    assertNotNull(result);
    assertEquals(1, result.getReferenceData().size());
    ReferenceData aaplResult = result.getReferenceData(secName);
    assertEquals(secName, aaplResult.getIdentifier());
    assertTrue(aaplResult.getErrors().isEmpty());
    FudgeMsg fieldData = aaplResult.getFieldValues();
    assertNotNull(fieldData);
    assertEquals(1, fieldData.getNumFields());
    assertEquals(new Double(320.0), fieldData.getDouble("OPT_STRIKE_PX"));
  }

  @Test(timeOut=30000)
  public void singleSecurityBulkDataField() {
    final String secName = "AAPL US Equity";
    ReferenceDataProviderGetRequest request = ReferenceDataProviderGetRequest.createGet(secName, "OPT_CHAIN", false);
    ReferenceDataProviderGetResult result = _refDataProvider.getReferenceData(request);
    assertNotNull(result);
    assertEquals(1, result.getReferenceData().size());
    ReferenceData aaplResult = result.getReferenceData(secName);
    assertEquals(secName, aaplResult.getIdentifier());
    assertTrue(aaplResult.getErrors().isEmpty());
    FudgeMsg fieldData = aaplResult.getFieldValues();
    assertNotNull(fieldData);
    assertTrue("Bloomberg only returning these for AAPL Option Chain: " + fieldData, fieldData.getNumFields() > 10);
    boolean foundOptionChain = false;
    for(FudgeField field : fieldData.getAllByName("OPT_CHAIN")) {
      foundOptionChain = true;
      assertEquals("OPT_CHAIN", field.getName());
      assertTrue(field.getValue() instanceof FudgeMsg);
      FudgeMsg chainContainer = (FudgeMsg)field.getValue();
      assertEquals(1, chainContainer.getNumFields());
      assertNotNull(chainContainer.getString("Security Description"));
    }
    assertTrue(foundOptionChain);
  }

  @Test(timeOut=3000000)
  public void multipleSecuritySingleField() {
    Set<String> securities = new TreeSet<String>();
    securities.add("AAPL US Equity");
    securities.add("T US Equity");
    securities.add("GS US Equity");
    securities.add("CSCO US Equity");
    ReferenceDataProviderGetRequest request = ReferenceDataProviderGetRequest.createGet(securities, ImmutableSet.of("SECURITY_TYP"), false);
    ReferenceDataProviderGetResult result = _refDataProvider.getReferenceData(request);
    assertNotNull(result);
    assertEquals(securities.size(), result.getReferenceData().size());
    for(String secName : securities) {
      ReferenceData perSecResult = result.getReferenceData(secName);
      assertEquals(secName, perSecResult.getIdentifier());
      assertTrue(perSecResult.getErrors().isEmpty());
      FudgeMsg fieldData = perSecResult.getFieldValues();
      assertNotNull(fieldData);
      assertEquals(1, fieldData.getNumFields());
      assertEquals("Common Stock", fieldData.getString("SECURITY_TYP"));
    }
  }

  //-------------------------------------------------------------------------
  private static final Set<String> VALID_EQUITY_TYPES = new TreeSet<String>();
  static {
    VALID_EQUITY_TYPES.add("Common Stock");
    VALID_EQUITY_TYPES.add("ADR");
    VALID_EQUITY_TYPES.add("Closed-End Fund");
    VALID_EQUITY_TYPES.add("ETP");
    VALID_EQUITY_TYPES.add("REIT");
    VALID_EQUITY_TYPES.add("Tracking Stk");
  }

  @Test(enabled = false, description = "a lot of data to request from bloomberg")
  //Bloomberg sends multiple messages per request when you have over 10 securities in the the request
  public void multiMessagePerRequest() throws Exception {
    String testWatchList = BloombergReferenceDataProviderTest.class.getResource("watchListTest.txt").getPath();
    Set<ExternalId> identifiers = BloombergDataUtils.identifierLoader(new FileReader(testWatchList));
    Set<String> bloombergKeys = toBloombergKeys(identifiers);
    ReferenceDataProviderGetRequest request = ReferenceDataProviderGetRequest.createGet(bloombergKeys, ImmutableSet.of("SECURITY_TYP"), false);
    ReferenceDataProviderGetResult result = _refDataProvider.getReferenceData(request);
    assertNotNull(result);
    assertEquals(bloombergKeys.size(), result.getReferenceData().size());
    for (String secName : bloombergKeys) {
      ReferenceData perSecResult = result.getReferenceData(secName);
      assertEquals(secName, perSecResult.getIdentifier());
      assertTrue(perSecResult.getErrors().isEmpty());
      FudgeMsg fieldData = perSecResult.getFieldValues();
      assertNotNull(fieldData);
      assertEquals(1, fieldData.getNumFields());
      assertTrue(VALID_EQUITY_TYPES.contains(fieldData.getString("SECURITY_TYP")));
    }
  }

  private Set<String> toBloombergKeys(Set<ExternalId> identifiers) {
    Set<String> bloombergKeys = Sets.newHashSet();
    for (ExternalId identifier : identifiers) {
      bloombergKeys.add(BloombergDomainIdentifierResolver.toBloombergKey(identifier));
    }
    return bloombergKeys;
  }

}
TOP

Related Classes of com.opengamma.bbg.referencedata.BloombergReferenceDataProviderTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.