Package com.opengamma.bbg.livedata

Source Code of com.opengamma.bbg.livedata.BloombergLiveDataServerTest

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

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

import java.util.Set;

import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import com.opengamma.bbg.test.BloombergLiveDataServerUtils;
import com.opengamma.bbg.test.BloombergTestUtils;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.core.value.MarketDataRequirementNames;
import com.opengamma.livedata.LiveDataClient;
import com.opengamma.livedata.LiveDataListener;
import com.opengamma.livedata.LiveDataSpecification;
import com.opengamma.livedata.LiveDataValueUpdate;
import com.opengamma.livedata.UserPrincipal;
import com.opengamma.livedata.client.JmsLiveDataClient;
import com.opengamma.livedata.msg.LiveDataSubscriptionResponse;
import com.opengamma.livedata.msg.LiveDataSubscriptionResult;
import com.opengamma.livedata.normalization.StandardRules;
import com.opengamma.livedata.test.CollectingLiveDataListener;
import com.opengamma.livedata.test.LiveDataClientTestUtils;
import com.opengamma.livedata.test.StandardRulesUtils;
import com.opengamma.util.test.TestGroup;

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

  private final static UserPrincipal TEST_USER = UserPrincipal.getTestUser();

  private BloombergLiveDataServer _server;
  private JmsLiveDataClient _liveDataClient;

  @BeforeClass
  public void setUpClass() {
    _server = BloombergLiveDataServerUtils.startTestServer(BloombergLiveDataServerTest.class);
    _liveDataClient = LiveDataClientTestUtils.getJmsClient(_server);
  }

  @AfterClass
  public void tearDownClass() {
    BloombergLiveDataServerUtils.stopTestServer(_server);
    _liveDataClient.stop();
  }

  //-------------------------------------------------------------------------
  @Test
  public void testSnapshot() {
    LiveDataSubscriptionResponse snapshotResponse = snapshot("AAPL US Equity");
   
    assertNotNull(snapshotResponse);
    assertEquals(LiveDataSubscriptionResult.SUCCESS, snapshotResponse.getSubscriptionResult());
    StandardRulesUtils.validateOpenGammaMsg(snapshotResponse.getSnapshot().getFields());
  }

  @Test(groups = {"bbgSubscriptionTests" }, enabled = false)
  public void testSnapshotNotPresent() {
    LiveDataSubscriptionResponse snapshotResponse = snapshot("AAPL.O");
    assertNotNull(snapshotResponse);
    assertEquals(LiveDataSubscriptionResult.NOT_PRESENT, snapshotResponse.getSubscriptionResult());
  }

  @Test(groups = {"bbgSubscriptionTests" }, enabled = false)
  public void testSubscribeLimit() throws Exception {
    _server.setSubscriptionLimit(0);
    CollectingLiveDataListener listener = new CollectingLiveDataListener(1, 0);
    subscribe(_liveDataClient, listener, "AAPL US Equity");
    assertTrue(listener.waitUntilEnoughUpdatesReceived(1000));
    Thread.sleep(100000);
    for (LiveDataSubscriptionResponse response : listener.getSubscriptionResponses()) {
      assertEquals(response.getSubscriptionResult(), LiveDataSubscriptionResult.INTERNAL_ERROR);
      assertTrue(response.getUserMessage().toLowerCase().contains("limit"));
    }
  }

  @Test(groups = {"bbgSubscriptionTests" }, enabled = false)
  public void testSubscribe() throws Exception {
    CollectingLiveDataListener listener = new CollectingLiveDataListener(5, 5);

    subscribe(_liveDataClient, listener, "USSW5 Curncy");
    subscribe(_liveDataClient, listener, "AAPL US Equity");
    subscribe(_liveDataClient, listener, "GBP Curncy");
   
    assertTrue(listener.waitUntilEnoughUpdatesReceived(30000));
   
    for (LiveDataValueUpdate update : listener.getValueUpdates()) {
      assertEquals(1, update.getSpecification().getIdentifiers().size());
      assertNotNull(update.getSpecification().getIdentifier(ExternalSchemes.BLOOMBERG_BUID));
      assertNotNull(StandardRules.getOpenGammaRuleSetId(), update.getSpecification().getNormalizationRuleSetId());
   
      StandardRulesUtils.validateOpenGammaMsg(update.getFields());
    }
  }

  private void subscribe(LiveDataClient liveDataClient, LiveDataListener listener, String ticker) {
    LiveDataSpecification requestedSpecification = new LiveDataSpecification(
        liveDataClient.getDefaultNormalizationRuleSetId(),
        ExternalSchemes.bloombergTickerSecurityId(ticker));
    liveDataClient.subscribe(TEST_USER, requestedSpecification, listener);
  }
 
  private LiveDataSubscriptionResponse snapshot(String ticker) {
    LiveDataSpecification requestedSpecification = new LiveDataSpecification(
        _liveDataClient.getDefaultNormalizationRuleSetId(),
        ExternalSchemes.bloombergTickerSecurityId(ticker));
    return _liveDataClient.snapshot(TEST_USER, requestedSpecification, 3000);
  }

  @Test(groups = {"bbgSubscriptionTests" }, enabled = false)
  public void testPersistentServer() {
    // just check the Spring config's OK
    new ClassPathXmlApplicationContext("/com/opengamma/bbg/livedata/bbg-livedata-context.xml");
  }

  @Test(groups = {"bbgSubscriptionTests" }, enabled = false)
  public void swapStripSubscriptions() throws Exception {
    CollectingLiveDataListener oneWeekListener = new CollectingLiveDataListener();
    CollectingLiveDataListener twoWeekListener = new CollectingLiveDataListener();
    CollectingLiveDataListener threeMonthListener = new CollectingLiveDataListener();
   
    subscribe(_liveDataClient, oneWeekListener, "US0001W Index");
    subscribe(_liveDataClient, twoWeekListener, "US0002W Index");
    subscribe(_liveDataClient, threeMonthListener, "US0003M Index");
   
    Thread.sleep(5000l);
   
    assertSwapCollectionValid("US0001W Index", oneWeekListener);
    assertSwapCollectionValid("US0002W Index", twoWeekListener);
    assertSwapCollectionValid("US0003M Index", threeMonthListener);
  }

  protected void assertSwapCollectionValid(String subscription, CollectingLiveDataListener listener) throws Exception {
    try {
      assertEquals(subscription, 1, listener.getSubscriptionResponses().size());
      LiveDataSubscriptionResponse subscriptionResponse = listener.getSubscriptionResponses().get(0);
      assertNotNull(subscriptionResponse);
      assertEquals(LiveDataSubscriptionResult.SUCCESS, subscriptionResponse.getSubscriptionResult());
     
      assertFalse(listener.getValueUpdates().isEmpty());
      for(LiveDataValueUpdate valueUpdate : listener.getValueUpdates()) {
        assertNotNull(valueUpdate);
        Set<String> fieldNames = valueUpdate.getFields().getAllFieldNames();
        boolean hasMarketValue = fieldNames.contains(MarketDataRequirementNames.MARKET_VALUE);
        assertTrue("Subscription " + subscription + " had field names " + fieldNames, hasMarketValue);
      }
     
    } catch(Exception e) {
      System.err.println("Didn't get valid response on subscription " + subscription);
      throw e;
    }
  }

  @Test(groups = {"bbgSubscriptionTests" }, enabled = false)
  public void optionSnapshot() {
    String option = BloombergTestUtils.getSampleEquityOptionTicker();
    LiveDataSubscriptionResponse snapshotResponse = snapshot(option);
   
    assertNotNull(snapshotResponse);
    assertEquals(LiveDataSubscriptionResult.SUCCESS, snapshotResponse.getSubscriptionResult());
    StandardRulesUtils.validateOpenGammaMsg(snapshotResponse.getSnapshot().getFields());
   
    // especially outside market hours, it seems it's not guaranteed that you'll get implied vol
    // assertNotNull(snapshotResponse.getSnapshot().getFields().getDouble(MarketDataFieldNames.IMPLIED_VOLATILITY_FIELD));
  }

}
TOP

Related Classes of com.opengamma.bbg.livedata.BloombergLiveDataServerTest

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.