Package com.opengamma.bbg.security

Source Code of com.opengamma.bbg.security.BloombergSecurityProviderTest

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

import static com.opengamma.bbg.util.BloombergSecurityUtils.AAPL_EQUITY_TICKER;
import static com.opengamma.bbg.util.BloombergSecurityUtils.APV_EQUITY_OPTION_TICKER;
import static com.opengamma.bbg.util.BloombergSecurityUtils.ATT_EQUITY_TICKER;
import static com.opengamma.bbg.util.BloombergSecurityUtils.EUR;
import static com.opengamma.bbg.util.BloombergSecurityUtils.SPX_INDEX_OPTION_TICKER;
import static com.opengamma.bbg.util.BloombergSecurityUtils.makeAPVLEquityOptionSecurity;
import static com.opengamma.bbg.util.BloombergSecurityUtils.makeAUDUSDCurrencyFuture;
import static com.opengamma.bbg.util.BloombergSecurityUtils.makeAgricultureFuture;
import static com.opengamma.bbg.util.BloombergSecurityUtils.makeEquityFuture;
import static com.opengamma.bbg.util.BloombergSecurityUtils.makeEthanolFuture;
import static com.opengamma.bbg.util.BloombergSecurityUtils.makeExchangeTradedFund;
import static com.opengamma.bbg.util.BloombergSecurityUtils.makeExpectedAAPLEquitySecurity;
import static com.opengamma.bbg.util.BloombergSecurityUtils.makeExpectedATTEquitySecurity;
import static com.opengamma.bbg.util.BloombergSecurityUtils.makeInterestRateFuture;
import static com.opengamma.bbg.util.BloombergSecurityUtils.makeSPXIndexOptionSecurity;
import static com.opengamma.bbg.util.BloombergSecurityUtils.makeSilverFuture;
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.util.ArrayList;
import java.util.Collection;
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.joda.beans.Bean;
import org.joda.beans.test.BeanAssert;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import org.threeten.bp.Clock;
import org.threeten.bp.Instant;

import com.google.common.collect.ImmutableSet;
import com.opengamma.bbg.BloombergConnector;
import com.opengamma.bbg.referencedata.impl.BloombergReferenceDataProvider;
import com.opengamma.bbg.test.BloombergTestUtils;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.core.security.Security;
import com.opengamma.financial.security.FinancialSecurity;
import com.opengamma.financial.security.equity.EquitySecurity;
import com.opengamma.financial.security.future.AgricultureFutureSecurity;
import com.opengamma.financial.security.future.BondFutureDeliverable;
import com.opengamma.financial.security.future.BondFutureSecurity;
import com.opengamma.financial.security.future.EnergyFutureSecurity;
import com.opengamma.financial.security.future.EquityFutureSecurity;
import com.opengamma.financial.security.future.FXFutureSecurity;
import com.opengamma.financial.security.future.InterestRateFutureSecurity;
import com.opengamma.financial.security.future.MetalFutureSecurity;
import com.opengamma.financial.security.option.AmericanExerciseType;
import com.opengamma.financial.security.option.EquityIndexOptionSecurity;
import com.opengamma.financial.security.option.EquityOptionSecurity;
import com.opengamma.financial.security.option.EuropeanExerciseType;
import com.opengamma.financial.timeseries.exchange.DefaultExchangeDataProvider;
import com.opengamma.financial.timeseries.exchange.ExchangeDataProvider;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.ExternalScheme;
import com.opengamma.provider.security.SecurityProvider;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.time.Expiry;

/**
* Base case for testing BloombergSecuritySource.
*/
@Test(groups = TestGroup.INTEGRATION)
public class BloombergSecurityProviderTest {

  private static final EquitySecurity EXPECTED_AAPL_EQUITY_SEC = makeExpectedAAPLEquitySecurity();
  private static final EquitySecurity EXPECTED_ATT_EQUITY_SEC = makeExpectedATTEquitySecurity();
  private static final EquityOptionSecurity EXPECTED_APVL_EQUITYOPTION_SEC = makeAPVLEquityOptionSecurity();
  private static final EquityIndexOptionSecurity EXPECTED_SPX_INDEXOPTION_SEC = makeSPXIndexOptionSecurity();
  private static final FXFutureSecurity EXPECTED_AUDUSD_FUTURE_SEC = makeAUDUSDCurrencyFuture();
  private static final MetalFutureSecurity EXPECTED_SILVER_FUTURE = makeSilverFuture();
  private static final EnergyFutureSecurity EXPECTED_ETHANOL_FUTURE = makeEthanolFuture();
  private static final InterestRateFutureSecurity EXPECTED_EURODOLLAR_FUTURE = makeInterestRateFuture();
  private static final AgricultureFutureSecurity EXPECTED_WHEAT_FUTURE_SEC = makeAgricultureFuture();
  private static final EquityFutureSecurity EXPECTED_EQUITY_FUTURE_SEC = makeEquityFuture();
  private static final EquitySecurity US_NATURAL_GAS_FUND = makeExchangeTradedFund();

  private static final ExternalScheme[] EXPECTED_IDENTIFICATION_SCHEME = new ExternalScheme[] {
      ExternalSchemes.BLOOMBERG_BUID, ExternalSchemes.BLOOMBERG_TICKER, ExternalSchemes.CUSIP};

  private BloombergReferenceDataProvider _refDataProvider;
  private SecurityProvider _securityProvider;

  @BeforeClass
  public void setupSecurityProvider() throws Exception {
    _securityProvider = createSecurityProvider();
  }

  protected SecurityProvider createSecurityProvider() throws Exception {
    BloombergConnector connector = BloombergTestUtils.getBloombergConnector();
    BloombergReferenceDataProvider refDataProvider = new BloombergReferenceDataProvider(connector);
    refDataProvider.start();
    _refDataProvider = refDataProvider;
    ExchangeDataProvider exchangeProvider = DefaultExchangeDataProvider.getInstance();
    return new BloombergSecurityProvider(refDataProvider, exchangeProvider);
  }

  @AfterClass
  public void terminateSecurityProvider() throws Exception {
    stopSecurityProvider(_securityProvider);
    _securityProvider = null;
  }

  protected void stopSecurityProvider(SecurityProvider provider) throws Exception {
    if (_refDataProvider != null) {
      BloombergReferenceDataProvider dataProvider = _refDataProvider;
      _refDataProvider = null;
      dataProvider.stop();
    }
  }

  //-------------------------------------------------------------------------
  @Test
  public void aaplEquityByBbgTicker() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_AAPL_EQUITY_SEC, ExternalSchemes.BLOOMBERG_TICKER);
    Security sec = _securityProvider.getSecurity(ExternalIdBundle.of(bloombergIdentifier));
    assertEquitySecurity(EXPECTED_AAPL_EQUITY_SEC, sec);
  }

  @Test
  public void aaplEquityByBbgUnique() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_AAPL_EQUITY_SEC, ExternalSchemes.BLOOMBERG_BUID);
    Security sec = _securityProvider.getSecurity(ExternalIdBundle.of(bloombergIdentifier));
    assertEquitySecurity(EXPECTED_AAPL_EQUITY_SEC, sec);
  }

  @Test
  public void aaplEquitiesByBbgTicker() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_AAPL_EQUITY_SEC, ExternalSchemes.BLOOMBERG_TICKER);
    Security security = _securityProvider.getSecurity(bloombergIdentifier.toBundle());
    assertNotNull(security);
    assertEquitySecurity(EXPECTED_AAPL_EQUITY_SEC, security);
  }

  @Test
  public void aaplEquitiesByBbgUnique() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_AAPL_EQUITY_SEC, ExternalSchemes.BLOOMBERG_BUID);
    Security security = _securityProvider.getSecurity(bloombergIdentifier.toBundle());
    assertNotNull(security);
    assertEquitySecurity(EXPECTED_AAPL_EQUITY_SEC, security);
  }

  @Test
  public void attEquityByBbgTicker() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_ATT_EQUITY_SEC, ExternalSchemes.BLOOMBERG_TICKER);
    Security sec = _securityProvider.getSecurity(ExternalIdBundle.of(bloombergIdentifier));
    assertEquitySecurity(EXPECTED_ATT_EQUITY_SEC, sec);
  }

  @Test
  public void exchangeTradedFund() throws Exception {
    Security security = _securityProvider.getSecurity(US_NATURAL_GAS_FUND.getExternalIdBundle());
    assertEquitySecurity(US_NATURAL_GAS_FUND, security);
  }

  @Test
  public void attEquitiesByBbgTicker() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_ATT_EQUITY_SEC, ExternalSchemes.BLOOMBERG_TICKER);
    Security security = _securityProvider.getSecurity(bloombergIdentifier.toBundle());
    assertNotNull(security);
    assertEquitySecurity(EXPECTED_ATT_EQUITY_SEC, security);
  }

  @Test
  public void attEquityByBbgUnique() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_ATT_EQUITY_SEC, ExternalSchemes.BLOOMBERG_BUID);
    Security sec = _securityProvider.getSecurity(ExternalIdBundle.of(bloombergIdentifier));
    assertEquitySecurity(EXPECTED_ATT_EQUITY_SEC, sec);
  }

  @Test
  public void attEquitiesByBbgUnique() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_ATT_EQUITY_SEC, ExternalSchemes.BLOOMBERG_BUID);
    Security security = _securityProvider.getSecurity(bloombergIdentifier.toBundle());
    assertNotNull(security);
    assertEquitySecurity(EXPECTED_ATT_EQUITY_SEC, security);
  }

  @Test
  public void apvEquityOptionByBbgTicker() throws Exception {
    Security sec = _securityProvider.getSecurity(EXPECTED_APVL_EQUITYOPTION_SEC.getExternalIdBundle());
    assertAmericanVanillaEquityOptionSecurity(EXPECTED_APVL_EQUITYOPTION_SEC, sec);
  }

  @Test
  public void apvEquityOptionsByBbgTicker() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_APVL_EQUITYOPTION_SEC, ExternalSchemes.BLOOMBERG_TICKER);
    Security security = _securityProvider.getSecurity(bloombergIdentifier.toBundle());
    assertNotNull(security);
    assertAmericanVanillaEquityOptionSecurity(EXPECTED_APVL_EQUITYOPTION_SEC, security);
  }

  @Test
  public void apvEquityOptionsByBbgUnique() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_APVL_EQUITYOPTION_SEC, ExternalSchemes.BLOOMBERG_BUID);
    Security security = _securityProvider.getSecurity(bloombergIdentifier.toBundle());
    assertNotNull(security);
    assertAmericanVanillaEquityOptionSecurity(EXPECTED_APVL_EQUITYOPTION_SEC, security);
  }

  @Test
  public void apvEquityOptionByBbgUnique() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_APVL_EQUITYOPTION_SEC, ExternalSchemes.BLOOMBERG_BUID);
    Security sec = _securityProvider.getSecurity(ExternalIdBundle.of(bloombergIdentifier));
    assertAmericanVanillaEquityOptionSecurity(EXPECTED_APVL_EQUITYOPTION_SEC, sec);
  }

  @Test
  public void spxIndexOptionByBbgTicker() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_SPX_INDEXOPTION_SEC, ExternalSchemes.BLOOMBERG_TICKER);
    Security sec = _securityProvider.getSecurity(ExternalIdBundle.of(bloombergIdentifier));
    assertEuropeanVanillaEquityIndexOptionSecurity(EXPECTED_SPX_INDEXOPTION_SEC, sec);
  }

  @Test
  public void spxIndexOptionsByBbgTicker() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_SPX_INDEXOPTION_SEC, ExternalSchemes.BLOOMBERG_TICKER);
    Security security = _securityProvider.getSecurity(bloombergIdentifier.toBundle());
    assertNotNull(security);
    assertEuropeanVanillaEquityIndexOptionSecurity(EXPECTED_SPX_INDEXOPTION_SEC, security);
  }

  @Test
  public void spxIndexOptionByBbgUnique() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_SPX_INDEXOPTION_SEC, ExternalSchemes.BLOOMBERG_BUID);
    Security sec = _securityProvider.getSecurity(ExternalIdBundle.of(bloombergIdentifier));
    assertEuropeanVanillaEquityIndexOptionSecurity(EXPECTED_SPX_INDEXOPTION_SEC, sec);
  }

  @Test
  public void spxIndexOptionsByBbgUnique() throws Exception {
    ExternalId bloombergIdentifier = getBloombergIdentifier(EXPECTED_SPX_INDEXOPTION_SEC, ExternalSchemes.BLOOMBERG_BUID);
    Security security = _securityProvider.getSecurity(bloombergIdentifier.toBundle());
    assertNotNull(security);
    assertEuropeanVanillaEquityIndexOptionSecurity(EXPECTED_SPX_INDEXOPTION_SEC, security);
  }

  private ExternalId getBloombergIdentifier(FinancialSecurity finSec, ExternalScheme scheme) {
    ExternalIdBundle identifierBundle = finSec.getExternalIdBundle();
    return identifierBundle.getExternalId(scheme);
  }

  //-------------------------------------------------------------------------
  @Test(groups={"bbgSecurityFutureTests"})
  public void agricultureFuture() throws Exception {
    Security wheat = _securityProvider.getSecurity(EXPECTED_WHEAT_FUTURE_SEC.getExternalIdBundle());
    assertNotNull(wheat);
    assertTrue(wheat instanceof AgricultureFutureSecurity);
    assertSecurity(EXPECTED_WHEAT_FUTURE_SEC, wheat);
  }

  @Test(groups={"bbgSecurityFutureTests"})
  public void equityFuture() throws Exception {
    Security spIndex = _securityProvider.getSecurity(EXPECTED_EQUITY_FUTURE_SEC.getExternalIdBundle());
    assertNotNull(spIndex);
    assertTrue(spIndex instanceof EquityFutureSecurity);
    assertSecurity(EXPECTED_EQUITY_FUTURE_SEC, spIndex);
  }

  @Test(enabled = false)
  public void currencyFuture() throws Exception {
    ExternalIdBundle id = ExternalIdBundle.of(ExternalSchemes.bloombergTickerSecurityId("LNM0 Curncy"));
    Security audUsd = _securityProvider.getSecurity(id);
    assertNotNull(audUsd);
    assertTrue(audUsd instanceof FXFutureSecurity);
    assertSecurity(EXPECTED_AUDUSD_FUTURE_SEC, audUsd);
  }

  @Test(groups={"bbgSecurityFutureTests"})
  public void euroBondFuture() throws Exception {
    ExternalIdBundle euroBund = ExternalIdBundle.of(ExternalSchemes.bloombergTickerSecurityId("RXA Comdty"));
    Security bond = _securityProvider.getSecurity(euroBund);
    assertNotNull(bond);
    assertTrue(bond instanceof BondFutureSecurity);
    BondFutureSecurity euroBondFuture = (BondFutureSecurity) bond;
    assertEquals("FUTURE", euroBondFuture.getSecurityType());
    assertEquals("Bond", euroBondFuture.getContractCategory());
    assertEquals(EUR, euroBondFuture.getCurrency());
    String displayName = euroBondFuture.getName();
    assertNotNull(displayName);
    assertTrue(displayName.contains("EURO-BUND FUTURE"));
    Expiry expiry = euroBondFuture.getExpiry();
    assertNotNull(expiry);
    assertTrue(expiry.toInstant().isAfter(getTodayInstant()));
    assertEquals("XEUR", euroBondFuture.getTradingExchange());
    assertEquals("XEUR", euroBondFuture.getSettlementExchange());
    //assert identifiers are set
    Collection<ExternalId> identifiers = euroBondFuture.getExternalIdBundle().getExternalIds();
    assertNotNull(identifiers);
    assertTrue(identifiers.size() >= EXPECTED_IDENTIFICATION_SCHEME.length);
    ExternalIdBundle identifierBundle = ExternalIdBundle.of(identifiers);
    for (ExternalScheme expectedIDScheme : EXPECTED_IDENTIFICATION_SCHEME) {
      assertNotNull(identifierBundle.getExternalId(expectedIDScheme));
    }
    //assert deliverables are not empty
    Collection<BondFutureDeliverable> basket = euroBondFuture.getBasket();
    assertNotNull(basket);
    for (BondFutureDeliverable bondFutureDeliverable : basket) {
      ExternalIdBundle bundle = bondFutureDeliverable.getIdentifiers();
      assertNotNull(bundle);
      assertNotNull(bundle.getExternalId(ExternalSchemes.BLOOMBERG_BUID));
      assertTrue(bondFutureDeliverable.getConversionFactor() > 0);
    }
  }

  private Instant getTodayInstant() {
    Instant toDay = Clock.systemUTC().instant();
    return toDay;
  }

  @Test(groups={"bbgSecurityFutureTests"})
  public void metalFuture() throws Exception {
    Security silverFuture = _securityProvider.getSecurity(EXPECTED_SILVER_FUTURE.getExternalIdBundle());
    assertNotNull(silverFuture);
    assertTrue(silverFuture instanceof MetalFutureSecurity);
    assertSecurity(EXPECTED_SILVER_FUTURE, silverFuture);
  }

  @Test(groups={"bbgSecurityFutureTests"})
  public void energyFuture() throws Exception {
    Security ethanolFuture = _securityProvider.getSecurity(EXPECTED_ETHANOL_FUTURE.getExternalIdBundle());
    assertNotNull(ethanolFuture);
    assertTrue(ethanolFuture instanceof EnergyFutureSecurity);
    assertSecurity(EXPECTED_ETHANOL_FUTURE, ethanolFuture);
  }

  @Test(groups={"bbgSecurityFutureTests"})
  public void interestRateFuture() throws Exception {
    Security euroDollar = _securityProvider.getSecurity(EXPECTED_EURODOLLAR_FUTURE.getExternalIdBundle());
    assertNotNull(euroDollar);
    assertTrue(euroDollar instanceof InterestRateFutureSecurity);
    assertSecurity(EXPECTED_EURODOLLAR_FUTURE, euroDollar);
  }

  @Test
  public void invalidSecurity() throws Exception {
    ExternalIdBundle invalidKey = ExternalIdBundle.of(ExternalSchemes.bloombergTickerSecurityId("INVALID"));
    Security sec = _securityProvider.getSecurity(invalidKey);
    assertNull(sec);
  }

  @Test
  public void invalidSecurities() throws Exception {
    ExternalIdBundle invalidKey = ExternalIdBundle.of(ExternalSchemes.bloombergTickerSecurityId("INVALID"));
    Map<ExternalIdBundle, Security> securities = _securityProvider.getSecurities(ImmutableSet.of(invalidKey));
    assertNotNull(securities);
    assertTrue(securities.isEmpty());
  }

  @Test
  public void multiThreadedSecurityRequest() throws Exception {

    ExternalIdBundle apvKey = ExternalIdBundle.of(ExternalSchemes.bloombergTickerSecurityId(APV_EQUITY_OPTION_TICKER));
    ExternalIdBundle spxKey = ExternalIdBundle.of(ExternalSchemes.bloombergTickerSecurityId(SPX_INDEX_OPTION_TICKER));
    ExternalIdBundle aaplKey = ExternalIdBundle.of(ExternalSchemes.bloombergTickerSecurityId(AAPL_EQUITY_TICKER));
    ExternalIdBundle attKey = ExternalIdBundle.of(ExternalSchemes.bloombergTickerSecurityId(ATT_EQUITY_TICKER));

    ExecutorService pool = Executors.newFixedThreadPool(4);
    List<Future<Security>> apvresults = new ArrayList<Future<Security>>();
    List<Future<Security>> spxresults = new ArrayList<Future<Security>>();
    List<Future<Security>> aaplresults = new ArrayList<Future<Security>>();
    List<Future<Security>> attresults = new ArrayList<Future<Security>>();

    for (int i = 0; i < 10; i++) {
      apvresults.add(pool.submit(new BSMGetSecurityCallable(apvKey)));
      spxresults.add(pool.submit(new BSMGetSecurityCallable(spxKey)));
      aaplresults.add(pool.submit(new BSMGetSecurityCallable(aaplKey)));
      attresults.add(pool.submit(new BSMGetSecurityCallable(attKey)));
    }

    for (Future<Security> future : apvresults) {
      // Check that each one didn't throw an exception and returns the expected
      // APV security
      Security sec = future.get();
      assertAmericanVanillaEquityOptionSecurity(EXPECTED_APVL_EQUITYOPTION_SEC, sec);
    }

    for (Future<Security> future : spxresults) {
      // Check that each one didn't throw an exception and returns the expected
      // SPX security
      Security sec = future.get();
      assertEuropeanVanillaEquityIndexOptionSecurity(EXPECTED_SPX_INDEXOPTION_SEC, sec);
    }

    for (Future<Security> future : aaplresults) {
      // Check that each one didn't throw an exception and returns the expected
      // AAPL security
      Security sec = future.get();
      assertEquitySecurity(EXPECTED_AAPL_EQUITY_SEC, sec);
    }

    for (Future<Security> future : attresults) {
      // Check that each one didn't throw an exception and returns the expected
      // AT&T security
      Security sec = future.get();
      assertEquitySecurity(EXPECTED_ATT_EQUITY_SEC, sec);
    }
  }

  static void assertSecurity(Security expected, Security actual) {
    assertNotNull(actual);
    BeanAssert.assertBeanEquals((Bean) expected, (Bean) actual);
  }

  static void assertEquitySecurity(EquitySecurity expectedEquity, Security sec) {
    // check specific bits we want to spot failures on quickly
    assertNotNull(sec);
    assertTrue(sec instanceof EquitySecurity);
    EquitySecurity actualEquity = (EquitySecurity) sec;
    assertEquals(expectedEquity.getSecurityType(), actualEquity.getSecurityType());
   
    ExternalId expectedBUID = expectedEquity.getExternalIdBundle().getExternalId(ExternalSchemes.BLOOMBERG_BUID);
    ExternalId actualBUID = actualEquity.getExternalIdBundle().getExternalId(ExternalSchemes.BLOOMBERG_BUID);
    assertEquals(expectedBUID, actualBUID);
   
    ExternalId expectedTicker = expectedEquity.getExternalIdBundle().getExternalId(ExternalSchemes.BLOOMBERG_TICKER);
    ExternalId actualTicker = actualEquity.getExternalIdBundle().getExternalId(ExternalSchemes.BLOOMBERG_TICKER);
    assertEquals(expectedTicker, actualTicker);
   
    assertEquals(expectedEquity.getUniqueId(), actualEquity.getUniqueId());
    assertEquals(expectedEquity.getShortName(), actualEquity.getShortName());
    assertEquals(expectedEquity.getExchange(), actualEquity.getExchange());
    assertEquals(expectedEquity.getCompanyName(), actualEquity.getCompanyName());
    assertEquals(expectedEquity.getCurrency(), actualEquity.getCurrency());
   
    // check the lot without Identifiers
    ExternalIdBundle expectedIdentifiers = expectedEquity.getExternalIdBundle();
    ExternalIdBundle actualIdentifiers = actualEquity.getExternalIdBundle();
   
    expectedEquity.setExternalIdBundle(ExternalIdBundle.EMPTY);
    actualEquity.setExternalIdBundle(ExternalIdBundle.EMPTY);
    assertEquals(expectedEquity, actualEquity);
   
    expectedEquity.setExternalIdBundle(expectedIdentifiers);
    actualEquity.setExternalIdBundle(actualIdentifiers);
  }

  static void assertAmericanVanillaEquityOptionSecurity(EquityOptionSecurity expectedOption, Security sec) {
    // check specific bits we want to spot failures on quickly
    assertNotNull(sec);
    assertTrue(sec instanceof EquityOptionSecurity);
    final EquityOptionSecurity equitySec = (EquityOptionSecurity) sec;
    assertTrue(equitySec.getExerciseType() instanceof AmericanExerciseType);
    assertEquityOptionSecurity(expectedOption, sec);
  }

  static void assertAmericanVanillaEquityIndexOptionSecurity(EquityIndexOptionSecurity expectedOption, Security sec) {
    // check specific bits we want to spot failures on quickly
    assertNotNull(sec);
    assertTrue(sec instanceof EquityIndexOptionSecurity);
    final EquityIndexOptionSecurity equityIndexOption = (EquityIndexOptionSecurity) sec;
    assertTrue(equityIndexOption.getExerciseType() instanceof AmericanExerciseType);
    assertEquityIndexOptionSecurity(expectedOption, sec);
  }

  static void assertEquityOptionSecurity(EquityOptionSecurity expectedOption, Security sec) {
    assertNotNull(expectedOption);
    assertNotNull(sec);
    EquityOptionSecurity actualOption = (EquityOptionSecurity) sec;
    assertEquals(expectedOption.getExternalIdBundle(), actualOption.getExternalIdBundle());
    assertEquals(expectedOption.getUniqueId(), actualOption.getUniqueId());
    assertEquals(expectedOption.getSecurityType(), actualOption.getSecurityType());
    assertEquals(expectedOption.getCurrency(), actualOption.getCurrency());
    assertEquals(expectedOption.getOptionType(), actualOption.getOptionType());
    assertTrue(expectedOption.getStrike() == actualOption.getStrike());
    assertEquals(expectedOption.getExpiry(), actualOption.getExpiry());
    assertEquals(expectedOption.getUnderlyingId(), actualOption.getUnderlyingId());
    assertEquals(expectedOption.getName(), actualOption.getName());
    // check the lot
    assertSecurity(expectedOption, sec);
  }

  static void assertEquityIndexOptionSecurity(EquityIndexOptionSecurity expectedOption, Security sec) {
    assertNotNull(expectedOption);
    assertNotNull(sec);
    EquityIndexOptionSecurity actualOption = (EquityIndexOptionSecurity) sec;
    assertEquals(expectedOption.getExternalIdBundle(), actualOption.getExternalIdBundle());
    assertEquals(expectedOption.getUniqueId(), actualOption.getUniqueId());
    assertEquals(expectedOption.getSecurityType(), actualOption.getSecurityType());
    assertEquals(expectedOption.getCurrency(), actualOption.getCurrency());
    assertEquals(expectedOption.getOptionType(), actualOption.getOptionType());
    assertTrue(expectedOption.getStrike() == actualOption.getStrike());
    assertEquals(expectedOption.getExpiry(), actualOption.getExpiry());
    assertEquals(expectedOption.getUnderlyingId(), actualOption.getUnderlyingId());
    assertEquals(expectedOption.getName(), actualOption.getName());
    // check the lot
    assertSecurity(expectedOption, sec);
  }

  static void assertEuropeanVanillaEquityOptionSecurity(EquityOptionSecurity expectedOption, Security sec) {
    // check specific bits we want to spot failures on quickly
    assertNotNull(sec);
    assertTrue(sec instanceof EquityOptionSecurity);
    final EquityOptionSecurity equitySec = (EquityOptionSecurity) sec;
    assertTrue(equitySec.getExerciseType() instanceof EuropeanExerciseType);
    assertEquityOptionSecurity(expectedOption, sec);
  }

  static void assertEuropeanVanillaEquityIndexOptionSecurity(EquityIndexOptionSecurity expectedOption, Security sec) {
    // check specific bits we want to spot failures on quickly
    assertNotNull(sec);
    assertTrue(sec instanceof EquityIndexOptionSecurity);
    final EquityIndexOptionSecurity equityIndexOption = (EquityIndexOptionSecurity) sec;
    assertTrue(equityIndexOption.getExerciseType() instanceof EuropeanExerciseType);
    assertEquityIndexOptionSecurity(expectedOption, sec);
  }

  private class BSMGetSecurityCallable implements Callable<Security> {
    ExternalIdBundle _secKey;

    public BSMGetSecurityCallable(ExternalIdBundle secKey) {
      _secKey = secKey;
    }

    @Override
    public Security call() throws Exception {
      return _securityProvider.getSecurity(_secKey);
    }
  }

  //-------------------------------------------------------------------------
  @Test
  public void test_getBulkSecurity() throws Exception {
    ExternalIdBundle aaplId = getBloombergIdentifier(EXPECTED_AAPL_EQUITY_SEC, ExternalSchemes.BLOOMBERG_BUID).toBundle();
    ExternalIdBundle attId = getBloombergIdentifier(EXPECTED_ATT_EQUITY_SEC, ExternalSchemes.BLOOMBERG_BUID).toBundle();
   
    Map<ExternalIdBundle, Security> securities = _securityProvider.getSecurities(ImmutableSet.of(aaplId, attId));
    assertNotNull(securities);
    assertEquals(2, securities.size());
    assertTrue(securities.keySet().contains(aaplId));
    assertTrue(securities.keySet().contains(attId));
    assertEquitySecurity(EXPECTED_AAPL_EQUITY_SEC, securities.get(aaplId));
    assertEquitySecurity(EXPECTED_ATT_EQUITY_SEC, securities.get(attId));
   
  }

}
TOP

Related Classes of com.opengamma.bbg.security.BloombergSecurityProviderTest

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.