Package com.opengamma.engine.marketdata.live

Source Code of com.opengamma.engine.marketdata.live.InMemoryLKVLiveMarketDataProviderTest

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

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.Mockito.mock;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;

import java.util.Collections;
import java.util.concurrent.TimeUnit;

import org.fudgemsg.FudgeContext;
import org.fudgemsg.MutableFudgeMsg;
import org.testng.annotations.Test;

import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.opengamma.core.id.ExternalSchemes;
import com.opengamma.core.value.MarketDataRequirementNames;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.marketdata.MarketDataSnapshot;
import com.opengamma.engine.marketdata.availability.FixedMarketDataAvailabilityProvider;
import com.opengamma.engine.marketdata.availability.MarketDataAvailabilityFilter;
import com.opengamma.engine.marketdata.spec.MarketData;
import com.opengamma.engine.target.ComputationTargetType;
import com.opengamma.engine.value.ValueProperties;
import com.opengamma.engine.value.ValuePropertyNames;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.id.ExternalId;
import com.opengamma.id.UniqueId;
import com.opengamma.livedata.LiveDataClient;
import com.opengamma.livedata.LiveDataSpecification;
import com.opengamma.livedata.UserPrincipal;
import com.opengamma.livedata.test.TestLiveDataClient;
import com.opengamma.util.test.TestGroup;

/**
* Test LiveDataSnapshotProvider.
*/
@Test(groups = TestGroup.UNIT)
public class InMemoryLKVLiveMarketDataProviderTest {

  private static final String _marketDataRequirement = MarketDataRequirementNames.MARKET_VALUE;

  protected ExternalId getTicker(final String ticker) {
    return ExternalId.of("Foo", ticker);
  }

  protected ValueRequirement constructRequirement(final String ticker) {
    return new ValueRequirement(_marketDataRequirement, ComputationTargetType.PRIMITIVE, getTicker(ticker));
  }

  protected ComputationTargetSpecification constructTargetSpec(final String ticker) {
    return new ComputationTargetSpecification(ComputationTargetType.PRIMITIVE, UniqueId.of("Bar", ticker + " UID"));
  }

  protected ValueSpecification constructSpecification(final String ticker) {
    return new ValueSpecification(_marketDataRequirement, constructTargetSpec(ticker), ValueProperties.with(ValuePropertyNames.FUNCTION, "MarketData").get());
  }

  public void snapshotting() {
    final TestLiveDataClient client = new TestLiveDataClient();
    final FixedMarketDataAvailabilityProvider availabilityProvider = new FixedMarketDataAvailabilityProvider();
    availabilityProvider.addAvailableData(getTicker("test1"), constructSpecification("test1"));
    availabilityProvider.addAvailableData(getTicker("test2"), constructSpecification("test2"));
    availabilityProvider.addAvailableData(getTicker("test3"), constructSpecification("test3"));
    final LiveMarketDataProvider provider = new InMemoryLKVLiveMarketDataProvider(client, availabilityProvider.getAvailabilityFilter(), UserPrincipal.getTestUser());
    final ValueSpecification test1Specification = provider.getAvailabilityProvider(MarketData.live()).getAvailability(constructTargetSpec("test1"), getTicker("test1"), constructRequirement("test1"));
    final ValueSpecification test2Specification = provider.getAvailabilityProvider(MarketData.live()).getAvailability(constructTargetSpec("test2"), getTicker("test2"), constructRequirement("test2"));
    final ValueSpecification test3Specification = provider.getAvailabilityProvider(MarketData.live()).getAvailability(constructTargetSpec("test3"), getTicker("test3"), constructRequirement("test3"));
    provider.subscribe(test1Specification);
    provider.subscribe(test2Specification);
    provider.subscribe(test3Specification);
    provider.subscribe(test3Specification);
    provider.subscribe(test3Specification);
    final MutableFudgeMsg msg1 = new FudgeContext().newMessage();
    msg1.add(_marketDataRequirement, 52.07);
    final MutableFudgeMsg msg2 = new FudgeContext().newMessage();
    msg2.add(_marketDataRequirement, 52.15);
    final MutableFudgeMsg msg3a = new FudgeContext().newMessage();
    msg3a.add(_marketDataRequirement, 52.16);
    final MutableFudgeMsg msg3b = new FudgeContext().newMessage();
    msg3b.add(_marketDataRequirement, 52.17);
    client.marketDataReceived(new LiveDataSpecification(client.getDefaultNormalizationRuleSetId(), getTicker("test1")), msg1);
    client.marketDataReceived(new LiveDataSpecification(client.getDefaultNormalizationRuleSetId(), getTicker("test2")), msg2);
    client.marketDataReceived(new LiveDataSpecification(client.getDefaultNormalizationRuleSetId(), getTicker("test3")), msg3a);
    client.marketDataReceived(new LiveDataSpecification(client.getDefaultNormalizationRuleSetId(), getTicker("test3")), msg3b);
    final MarketDataSnapshot snapshot = provider.snapshot(null);
    snapshot.init(Collections.<ValueSpecification>emptySet(), 0, TimeUnit.MILLISECONDS);
    final Double test1Value = (Double) snapshot.query(test1Specification);
    assertNotNull(test1Value);
    assertEquals(52.07, test1Value, 0.000001);
    final Double test2Value = (Double) snapshot.query(test2Specification);
    assertNotNull(test2Value);
    assertEquals(52.15, test2Value, 0.000001);
    final Double test3Value = (Double) snapshot.query(test3Specification);
    assertNotNull(test3Value);
    assertEquals(52.17, test3Value, 0.000001);
    assertNull(snapshot.query(constructSpecification("invalidticker")));
  }

  @Test
  public void testDifferentSpecsSameLiveData1() {

    InMemoryLKVLiveMarketDataProvider provider = new InMemoryLKVLiveMarketDataProvider(mock(LiveDataClient.class), mock(MarketDataAvailabilityFilter.class), UserPrincipal.getTestUser());
    ValueSpecification primitive = createPrimitiveValueSpec("AAPL.");
    ValueSpecification sec = createSecurityValueSpec("AAPL.");

    provider.subscribe(primitive);

    assertThat(provider.getSubscriptionCount(), is(1));
    assertThat(provider.getSpecificationCount(), is(1));

    provider.subscribe(sec);

    assertThat(provider.getSpecificationCount(), is(2));
    assertThat(provider.getSubscriptionCount(), is(1));

  }

  @Test
  public void testDifferentSpecsSameLiveData2() {

    InMemoryLKVLiveMarketDataProvider provider = new InMemoryLKVLiveMarketDataProvider(mock(LiveDataClient.class), mock(MarketDataAvailabilityFilter.class), UserPrincipal.getTestUser());
    ValueSpecification primitive = createPrimitiveValueSpec("AAPL.");
    ValueSpecification sec = createSecurityValueSpec("AAPL.");

    provider.subscribe(ImmutableSet.of(primitive, sec));

    assertThat(provider.getSpecificationCount(), is(2));
    assertThat(provider.getSubscriptionCount(), is(1));

  }

  @Test
  public void testSubscriptionHasTotalSubscriberCount() {

    InMemoryLKVLiveMarketDataProvider provider = new InMemoryLKVLiveMarketDataProvider(mock(LiveDataClient.class), mock(MarketDataAvailabilityFilter.class), UserPrincipal.getTestUser());
    ValueSpecification primitive = createPrimitiveValueSpec("AAPL.");
    ValueSpecification sec = createSecurityValueSpec("AAPL.");

    provider.subscribe(primitive);

    assertThat(provider.getSubscriptionCount(), is(1));
    assertThat(provider.getSpecificationCount(), is(1));

    provider.subscribe(primitive);
    provider.subscribe(sec);

    assertThat(provider.getSpecificationCount(), is(2));
    assertThat(provider.getSubscriptionCount(), is(1));

    SubscriptionInfo sub = Iterables.getFirst(provider.queryByTicker("AAPL.").values(), null);
    assertThat(sub.getState(), is("PENDING"));
    assertThat(sub.getSubscriberCount(), is(3));
  }

  private ValueSpecification createPrimitiveValueSpec(String ticker) {

    // Create spec of the form
    // VSpec[Market_All, CTSpec[PRIMITIVE, ExternalId-ACTIVFEED_TICKER~AAPL.], {Normalization=[OpenGamma],Function=[LiveMarketData],Id=[ACTIVFEED_TICKER~AAPL.]}]
    ExternalId externalId = ExternalSchemes.activFeedTickerSecurityId(ticker);

    ValueProperties properties = ValueProperties.builder()
        .with(ValuePropertyNames.FUNCTION, "LiveMarketData")
        .with("Normalization", "OpenGamma")
        .with("Id", externalId.toString())
        .get();

    ComputationTargetSpecification targetSpecification =
        new ComputationTargetSpecification(ComputationTargetType.PRIMITIVE,
                                           UniqueId.of("ExternalId", externalId.toString()));

    return new ValueSpecification("Market_All", targetSpecification, properties);
  }

  private ValueSpecification createSecurityValueSpec(String ticker) {

    // Create spec of the form
    // VSpec[Market_All, CTSpec[SECURITY, DbSec~295921~0], {Normalization=[OpenGamma],Function=[LiveMarketData],Id=[ACTIVFEED_TICKER~AAPL.]}]
    ExternalId externalId = ExternalSchemes.activFeedTickerSecurityId(ticker);

    ValueProperties properties = ValueProperties.builder()
        .with(ValuePropertyNames.FUNCTION, "LiveMarketData")
        .with("Normalization", "OpenGamma")
        .with("Id", externalId.toString())
        .get();

    ComputationTargetSpecification targetSpecification =
        new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("DbSec", "1234", "1"));

    return new ValueSpecification("Market_All", targetSpecification, properties);
  }

}
TOP

Related Classes of com.opengamma.engine.marketdata.live.InMemoryLKVLiveMarketDataProviderTest

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.