Package com.opengamma.bbg.referencedata.cache

Source Code of com.opengamma.bbg.referencedata.cache.AbstractValueCachingReferenceDataProviderTestCase

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

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

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import org.fudgemsg.FudgeMsg;

import com.opengamma.bbg.referencedata.MockReferenceDataProvider;
import com.opengamma.bbg.referencedata.ReferenceData;
import com.opengamma.bbg.referencedata.ReferenceDataProvider;
import com.opengamma.bbg.referencedata.ReferenceDataProviderGetRequest;
import com.opengamma.bbg.referencedata.ReferenceDataProviderGetResult;
import com.opengamma.bbg.referencedata.impl.AbstractReferenceDataProvider;
import com.opengamma.util.tuple.Pair;

/**
* Test.
*/
public abstract class AbstractValueCachingReferenceDataProviderTestCase {
  // Abstract class didn't work well with TestNG groups and Maven
  // All annotations and local variables moved to subclasses to make it work

  private static final String CISCO_TICKER = "CSCO US Equity";
  private static final String FIELD_ID_ISIN = "ID_ISIN";
  private static final String FIELD_ID_CUSIP = "ID_CUSIP";
  private static final String FIELD_TICKER = "TICKER";
  private static final String FIELD_ID_BB_UNIQUE = "ID_BB_UNIQUE";
  private static final String AAPL_TICKER = "AAPL US Equity";

  //-------------------------------------------------------------------------
  protected abstract MockReferenceDataProvider getUnderlyingProvider();

  protected abstract UnitTestingReferenceDataProvider getUnitProvider();

  protected abstract ReferenceDataProvider getProvider();

  //-------------------------------------------------------------------------
  protected void numberOfReturnedFields() {
    getUnderlyingProvider().addExpectedField(FIELD_ID_BB_UNIQUE);
    getUnderlyingProvider().addExpectedField(FIELD_TICKER);
    getUnderlyingProvider().addResult(AAPL_TICKER, FIELD_ID_BB_UNIQUE, "BUID");
    getUnderlyingProvider().addResult(AAPL_TICKER, FIELD_TICKER, "TICKER");
   
    Set<String> fields = new TreeSet<String>();
    fields.add(FIELD_ID_BB_UNIQUE);
    fields.add(FIELD_TICKER);
    String securityDes = AAPL_TICKER;
    Set<String> securities = Collections.singleton(securityDes);
    getUnitProvider().addAcceptableRequest(securities, fields);
    ReferenceDataProviderGetResult result = getProvider().getReferenceData(
        ReferenceDataProviderGetRequest.createGet(securities, fields, true));
    assertNotNull(result);
    ReferenceData perSecurity = result.getReferenceData(securityDes);
    assertNotNull(perSecurity);
    FudgeMsg fieldData = perSecurity.getFieldValues();
    assertNotNull(fieldData);
    assertEquals(2, fieldData.getNumFields());
   
    fields.clear();
    fields.add(FIELD_TICKER);
    getUnitProvider().clearAcceptableRequests();
    result = getProvider().getReferenceData(
        ReferenceDataProviderGetRequest.createGet(securities, fields, true));
    assertNotNull(result);
    perSecurity = result.getReferenceData(securityDes);
    assertNotNull(perSecurity);
    fieldData = perSecurity.getFieldValues();
    assertNotNull(fieldData);
    assertEquals(1, fieldData.getNumFields());
  }

  protected void singleSecurityEscalatingFields() {
    getUnderlyingProvider().addResult(AAPL_TICKER, FIELD_ID_BB_UNIQUE, "BUID");
    getUnderlyingProvider().addResult(AAPL_TICKER, FIELD_TICKER, "TICKER");
    getUnderlyingProvider().addResult(AAPL_TICKER, FIELD_ID_CUSIP, "CUSIP");
    getUnderlyingProvider().addResult(AAPL_TICKER, FIELD_ID_ISIN, "ISIN");
   
    Set<String> fields = new TreeSet<String>();
    fields.add(FIELD_ID_BB_UNIQUE);
    fields.add(FIELD_TICKER);
    String securityDes = AAPL_TICKER;
    Set<String> securities = Collections.singleton(securityDes);
    getUnitProvider().addAcceptableRequest(securities, fields);
    ReferenceDataProviderGetResult result = getProvider().getReferenceData(
        ReferenceDataProviderGetRequest.createGet(securities, fields, true));
    assertNotNull(result);
    assertNotNull(result.getReferenceData(securityDes));

    getUnitProvider().clearAcceptableRequests();
    result = getProvider().getReferenceData(
        ReferenceDataProviderGetRequest.createGet(securities, fields, true));
    assertNotNull(result);
    assertNotNull(result.getReferenceData(securityDes));
   
    fields.add(FIELD_ID_CUSIP);
    fields.add(FIELD_ID_ISIN);
    getUnitProvider().clearAcceptableRequests();
    Set<String> expectedFields = new TreeSet<String>();
    expectedFields.add(FIELD_ID_CUSIP);
    expectedFields.add(FIELD_ID_ISIN);
    getUnitProvider().addAcceptableRequest(securities, expectedFields);
    result = getProvider().getReferenceData(
        ReferenceDataProviderGetRequest.createGet(securities, fields, true));
    assertNotNull(result);
    assertNotNull(result.getReferenceData(securityDes));
  }

  protected void fieldNotAvailable() {
    getUnderlyingProvider().addResult(AAPL_TICKER, FIELD_ID_BB_UNIQUE, "BUID");
    getUnderlyingProvider().addResult(AAPL_TICKER, "INVALID_FIELD1", null);
    getUnderlyingProvider().addResult(AAPL_TICKER, "INVALID_FIELD2", null);
    getUnderlyingProvider().addResult(AAPL_TICKER, "INVALID_FIELD3", null);
    getUnderlyingProvider().addResult(CISCO_TICKER, FIELD_ID_BB_UNIQUE, "BUID");
    getUnderlyingProvider().addResult(CISCO_TICKER, "INVALID_FIELD1", null);
    getUnderlyingProvider().addResult(CISCO_TICKER, "INVALID_FIELD2", null);
    getUnderlyingProvider().addResult(CISCO_TICKER, "INVALID_FIELD3", null);
   
    Set<String> fields = new TreeSet<String>();
    fields.add(FIELD_ID_BB_UNIQUE);
    fields.add("INVALID_FIELD1");
    fields.add("INVALID_FIELD2");
    fields.add("INVALID_FIELD3");
   
    Set<String> securities = new TreeSet<String>();
    securities.add(AAPL_TICKER);
    securities.add(CISCO_TICKER);
   
    getUnitProvider().addAcceptableRequest(securities, fields);
    ReferenceDataProviderGetResult result = getProvider().getReferenceData(
        ReferenceDataProviderGetRequest.createGet(securities, fields, true));
    assertNotNull(result);
    ReferenceData aaplResult = result.getReferenceData(AAPL_TICKER);
    assertNotNull(aaplResult);
    ReferenceData ciscoResult = result.getReferenceData(CISCO_TICKER);
    assertNotNull(ciscoResult);
   
    getUnitProvider().clearAcceptableRequests();
    result = getProvider().getReferenceData(
        ReferenceDataProviderGetRequest.createGet(securities, fields, true));
    assertNotNull(result);
    ReferenceData aaplCachedResult = result.getReferenceData(AAPL_TICKER);
    ReferenceData ciscoCachedResult = result.getReferenceData(CISCO_TICKER);
   
    assertNotNull(aaplCachedResult);
    assertEquals(aaplResult.getIdentifier(), aaplCachedResult.getIdentifier());
    assertEquals(aaplResult.getFieldValues(), aaplCachedResult.getFieldValues());
   
    assertNotNull(ciscoCachedResult);
    assertEquals(ciscoResult.getIdentifier(), ciscoCachedResult.getIdentifier());
    assertEquals(ciscoResult.getFieldValues(), ciscoCachedResult.getFieldValues());
  }

  protected void securityNotAvailable() {
    getUnderlyingProvider().addResult("INVALID", FIELD_ID_BB_UNIQUE, null);
   
    String invalidSec = "INVALID";
   
    Set<String> fields = new TreeSet<String>();
    fields.add(FIELD_ID_BB_UNIQUE);
   
    Set<String> securities = Collections.singleton(invalidSec);
   
    getUnitProvider().addAcceptableRequest(securities, fields);
    ReferenceDataProviderGetResult result = getProvider().getReferenceData(
        ReferenceDataProviderGetRequest.createGet(securities, fields, true));
    assertNotNull(result);
    assertNotNull(result.getReferenceData(invalidSec));
   
    getUnitProvider().clearAcceptableRequests();
   
    result = getProvider().getReferenceData(
        ReferenceDataProviderGetRequest.createGet(securities, fields, true));
    assertNotNull(result);
    assertNotNull(result.getReferenceData(invalidSec));
  }

  protected void multipleSecuritiesSameEscalatingFields() {
    getUnderlyingProvider().addResult(AAPL_TICKER, FIELD_ID_BB_UNIQUE, "A");
    getUnderlyingProvider().addResult(AAPL_TICKER, FIELD_TICKER, "B");
    getUnderlyingProvider().addResult(AAPL_TICKER, FIELD_ID_CUSIP, "C");
    getUnderlyingProvider().addResult(AAPL_TICKER, FIELD_ID_ISIN, "D");
    getUnderlyingProvider().addResult(CISCO_TICKER, FIELD_ID_BB_UNIQUE, "A");
    getUnderlyingProvider().addResult(CISCO_TICKER, FIELD_TICKER, "B");
    getUnderlyingProvider().addResult(CISCO_TICKER, FIELD_ID_CUSIP, "C");
    getUnderlyingProvider().addResult(CISCO_TICKER, FIELD_ID_ISIN, "D");
   
    Set<String> fields = new TreeSet<String>();
    fields.add(FIELD_ID_BB_UNIQUE);
    fields.add(FIELD_TICKER);
    Set<String> aaplOnly = Collections.singleton(AAPL_TICKER);
    Set<String> cscoOnly = Collections.singleton(CISCO_TICKER);
    Set<String> bothSecurities = new TreeSet<String>();
    bothSecurities.addAll(aaplOnly);
    bothSecurities.addAll(cscoOnly);
   
    getUnitProvider().addAcceptableRequest(aaplOnly, fields);
    ReferenceDataProviderGetResult result = getProvider().getReferenceData(
        ReferenceDataProviderGetRequest.createGet(aaplOnly, fields, true));
    assertNotNull(result);
   
    getUnitProvider().clearAcceptableRequests();
    getUnitProvider().addAcceptableRequest(cscoOnly, fields);
    result = getProvider().getReferenceData(
        ReferenceDataProviderGetRequest.createGet(cscoOnly, fields, true));
    assertNotNull(result);

    getUnitProvider().clearAcceptableRequests();
    result = getProvider().getReferenceData(
        ReferenceDataProviderGetRequest.createGet(bothSecurities, fields, true));
    assertNotNull(result);
   
    fields.add(FIELD_ID_CUSIP);
    fields.add(FIELD_ID_ISIN);
    getUnitProvider().clearAcceptableRequests();
    Set<String> expectedFields = new TreeSet<String>();
    expectedFields.add(FIELD_ID_CUSIP);
    expectedFields.add(FIELD_ID_ISIN);
    getUnitProvider().addAcceptableRequest(bothSecurities, expectedFields);
    result = getProvider().getReferenceData(
        ReferenceDataProviderGetRequest.createGet(bothSecurities, fields, true));
    assertNotNull(result);
  }

  //-------------------------------------------------------------------------
  public static class UnitTestingReferenceDataProvider extends AbstractReferenceDataProvider {
    private final ReferenceDataProvider _underlying;
    private List<Pair<Set<String>, Set<String>>> _acceptableRequests =
      new ArrayList<Pair<Set<String>, Set<String>>>();
   
    public UnitTestingReferenceDataProvider(ReferenceDataProvider underlying) {
      _underlying = underlying;
    }
   
    public void clearAcceptableRequests() {
      _acceptableRequests.clear();
    }
   
    public void addAcceptableRequest(Set<String> securities, Set<String> fields) {
      Pair<Set<String>, Set<String>> request = Pair.of(securities, fields);
      _acceptableRequests.add(request);
    }

    @Override
    protected ReferenceDataProviderGetResult doBulkGet(ReferenceDataProviderGetRequest request) {
      Pair<Set<String>, Set<String>> pair = Pair.of(request.getIdentifiers(), request.getFields());
      assertTrue(_acceptableRequests.contains(pair));
      return _underlying.getReferenceData(request);
    }
  }

}
TOP

Related Classes of com.opengamma.bbg.referencedata.cache.AbstractValueCachingReferenceDataProviderTestCase

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.