Package com.opengamma.engine.marketdata.manipulator

Source Code of com.opengamma.engine.marketdata.manipulator.MarketDataSelectionGraphManipulatorTest

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

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

import org.testng.annotations.Test;

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.opengamma.core.marketdatasnapshot.YieldCurveKey;
import com.opengamma.engine.ComputationTarget;
import com.opengamma.engine.ComputationTargetResolver;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.depgraph.DependencyGraph;
import com.opengamma.engine.depgraph.DependencyNode;
import com.opengamma.engine.function.EmptyFunctionParameters;
import com.opengamma.engine.function.FunctionParameters;
import com.opengamma.engine.target.ComputationTargetType;
import com.opengamma.engine.target.MockComputationTargetResolver;
import com.opengamma.engine.test.MockFunction;
import com.opengamma.engine.value.ValueProperties;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.id.VersionCorrection;
import com.opengamma.util.money.Currency;
import com.opengamma.util.test.TestGroup;

@Test(groups = TestGroup.UNIT)
public class MarketDataSelectionGraphManipulatorTest {

  private final ComputationTargetResolver.AtVersionCorrection _resolver =
      MockComputationTargetResolver.resolved().atVersionCorrection(VersionCorrection.LATEST);

  @Test(expectedExceptions = IllegalArgumentException.class)
  public void testNullSelectorConstructionFails() {
    new MarketDataSelectionGraphManipulator(null, createEmptyViewCalcManipulations());
  }

  @Test(expectedExceptions = IllegalArgumentException.class)
  public void testNullViewCalcSelectorConstructionFails() {
    new MarketDataSelectionGraphManipulator(createYieldCurveSelector(Currency.USD, "Forward3M"), null);
  }

  @Test
  public void testInvocationWithEmptyGraphsGivesEmptyResults() {

    MarketDataSelectionGraphManipulator manipulator = createNoOpManipulator();
    Map<DistinctMarketDataSelector,Set<ValueSpecification>> result =
        manipulator.modifyDependencyGraph(new DependencyGraph("testGraph"), _resolver);
    assertEquals(result.isEmpty(), true);
  }

  @Test
  public void testNoOpSelectorDoesNothingToGraph() {

    MarketDataSelectionGraphManipulator manipulator = createNoOpManipulator();
    DependencyGraph graph = createSimpleGraphWithMarketDataNodes();
    Set<ValueSpecification> originalOutputSpecifications = ImmutableSet.copyOf(graph.getOutputSpecifications());

    Map<DistinctMarketDataSelector,Set<ValueSpecification>> result = manipulator.modifyDependencyGraph(graph, _resolver);

    assertEquals(result.isEmpty(), true);
    assertEquals(graph.getOutputSpecifications(), originalOutputSpecifications);
  }

  @Test
  public void testYieldCurveSelectorAltersGraph() {

    MarketDataSelectionGraphManipulator manipulator = new MarketDataSelectionGraphManipulator(
        createYieldCurveSelector(Currency.USD, "Forward3M"),
        createEmptyViewCalcManipulations());

    DependencyGraph graph = createSimpleGraphWithMarketDataNodes();
    Set<ValueSpecification> originalOutputSpecifications = ImmutableSet.copyOf(graph.getOutputSpecifications());

    Map<DistinctMarketDataSelector,Set<ValueSpecification>> result = manipulator.modifyDependencyGraph(graph, _resolver);

    checkNodeHasBeenAddedToGraph(graph, originalOutputSpecifications, result);
  }

  @Test
  public void testSpecificYieldCurveSelectorAltersNamedGraph() {

    DistinctMarketDataSelector yieldCurveSelector = createYieldCurveSelector(Currency.USD, "Forward3M");

    Map<String, Map<DistinctMarketDataSelector, FunctionParameters>> specificManipulators = new HashMap<>();
    specificManipulators.put("graph",  createYieldCurveSelectorAndParams(Currency.USD, "Forward3M"));

    MarketDataSelectionGraphManipulator manipulator = new MarketDataSelectionGraphManipulator(
        NoOpMarketDataSelector.getInstance(),
        specificManipulators);

    DependencyGraph graph1 = createNamedDependencyGraph("graph");
    Set<ValueSpecification> originalOutputSpecifications1 = ImmutableSet.copyOf(graph1.getOutputSpecifications());

    Map<DistinctMarketDataSelector, Set<ValueSpecification>> result1 = manipulator.modifyDependencyGraph(graph1, _resolver);

    checkNodeHasBeenAddedToGraph(graph1, originalOutputSpecifications1, result1);

    assertEquals(result1.size(), 1);

    // Selector is the underlying, not composite
    assertEquals(result1.containsKey(yieldCurveSelector), true);
  }

  @Test
  public void testSpecificYieldCurveSelectorDoesNotAlterDifferentNamedGraph() {

    Map<String, Map<DistinctMarketDataSelector, FunctionParameters>> specificManipulators = new HashMap<>();
    specificManipulators.put("graph-to-find", createYieldCurveSelectorAndParams(Currency.USD, "Forward3M"));

    MarketDataSelectionGraphManipulator manipulator = new MarketDataSelectionGraphManipulator(
        NoOpMarketDataSelector.getInstance(),
        specificManipulators);

    DependencyGraph graph = createNamedDependencyGraph("not-the-graph-you-are-looking-for");
    Set<ValueSpecification> originalOutputSpecifications2 = ImmutableSet.copyOf(graph.getOutputSpecifications());

    Map<DistinctMarketDataSelector, Set<ValueSpecification>> result = manipulator.modifyDependencyGraph(graph, _resolver);

    assertTrue(result.isEmpty());
    assertEquals(graph.getOutputSpecifications(), originalOutputSpecifications2);

  }

  private ImmutableMap<DistinctMarketDataSelector, FunctionParameters> createYieldCurveSelectorAndParams(
      Currency currency, String curveType) {

    return ImmutableMap.<DistinctMarketDataSelector, FunctionParameters>of(createYieldCurveSelector(currency, curveType),
                                                                           EmptyFunctionParameters.INSTANCE);
  }

  @Test
  public void testCompositeSelectorReturnsUnderlyingSelector() {

    MarketDataSelector yieldCurveSelector = createYieldCurveSelector(Currency.USD, "Forward3M");
    MarketDataSelectionGraphManipulator manipulator = new MarketDataSelectionGraphManipulator(
        CompositeMarketDataSelector.of(yieldCurveSelector),
        createEmptyViewCalcManipulations());
    DependencyGraph graph = createSimpleGraphWithMarketDataNodes();
    Set<ValueSpecification> originalOutputSpecifications = ImmutableSet.copyOf(graph.getOutputSpecifications());

    Map<DistinctMarketDataSelector,Set<ValueSpecification>> result = manipulator.modifyDependencyGraph(graph, _resolver);

    checkNodeHasBeenAddedToGraph(graph, originalOutputSpecifications, result);

    assertEquals(result.size(), 1);

    // Selector is the underlying, not composite
    assertEquals(result.containsKey(yieldCurveSelector), true);
  }

  private DistinctMarketDataSelector createYieldCurveSelector(Currency currency, String curveType) {
    return YieldCurveSelector.of(new YieldCurveKey(currency, curveType));
  }

  private void checkNodeHasBeenAddedToGraph(DependencyGraph graph,
                                            Set<ValueSpecification> originalOutputSpecifications,
                                            Map<DistinctMarketDataSelector, Set<ValueSpecification>> result) {

    assertFalse(result.isEmpty());
    ValueSpecification originalValueSpec = Iterables.getOnlyElement(originalOutputSpecifications);

    Set<ValueSpecification> outputSpecifications = new HashSet<>(graph.getOutputSpecifications());
    assertEquals(outputSpecifications.size(), 2);

    outputSpecifications.removeAll(originalOutputSpecifications);
    ValueSpecification additionalSpec = Iterables.getOnlyElement(outputSpecifications);

    assertEquals(additionalSpec.getValueName(), originalValueSpec.getValueName());
    assertEquals(additionalSpec.getTargetSpecification(), originalValueSpec.getTargetSpecification());

    ValueProperties expectedProps = originalValueSpec.getProperties().copy().with("MANIPULATION_NODE", "true").get();
    assertEquals(additionalSpec.getProperties(), expectedProps);
  }

  private DependencyGraph createSimpleGraphWithMarketDataNodes() {
    return createNamedDependencyGraph("testGraph");
  }

  private DependencyGraph createNamedDependencyGraph(String name) {
    DependencyGraph graph = new DependencyGraph(name);
    ComputationTargetSpecification targetSpecification = new ComputationTargetSpecification(
        ComputationTargetType.CURRENCY,
        Currency.USD.getUniqueId());

    ComputationTarget target = new ComputationTarget(targetSpecification, Currency.USD);

    DependencyNode yieldCurveNode = new DependencyNode(targetSpecification);
    yieldCurveNode.setFunction(new MockFunction(target));
    yieldCurveNode.addOutputValue(new ValueSpecification(
        "YieldCurve",
        targetSpecification,
        ValueProperties.builder().with("Curve", "Forward3M").with("Function", "someFunction").get()));

    graph.addDependencyNode(yieldCurveNode);
    return graph;
  }

  private Map<String, Map<DistinctMarketDataSelector,FunctionParameters>> createEmptyViewCalcManipulations() {
    return new HashMap<>();
  }

  private MarketDataSelectionGraphManipulator createNoOpManipulator() {
    return new MarketDataSelectionGraphManipulator(
        NoOpMarketDataSelector.getInstance(), createEmptyViewCalcManipulations());
  }
}
TOP

Related Classes of com.opengamma.engine.marketdata.manipulator.MarketDataSelectionGraphManipulatorTest

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.