Package com.opengamma.engine.view.client.merging

Source Code of com.opengamma.engine.view.client.merging.ViewResultModelMergerTest

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

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

import java.util.Map;

import org.testng.annotations.Test;

import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.value.ComputedValueResult;
import com.opengamma.engine.value.ValueProperties;
import com.opengamma.engine.value.ValuePropertyNames;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.engine.view.AggregatedExecutionLog;
import com.opengamma.engine.view.ViewCalculationResultModel;
import com.opengamma.engine.view.ViewResultModel;
import com.opengamma.engine.view.impl.InMemoryViewComputationResultModel;
import com.opengamma.engine.view.impl.InMemoryViewDeltaResultModel;
import com.opengamma.id.UniqueId;
import com.opengamma.util.test.TestGroup;
import com.opengamma.util.tuple.Pair;

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

  private static final String CONFIG_1 = "config1";
  private static final String CONFIG_2 = "config2";

  public void testDeltaMerger() {
    final ViewDeltaResultModelMerger merger = new ViewDeltaResultModelMerger();
    assertNull(merger.getLatestResult());

    final InMemoryViewDeltaResultModel deltaResult1 = new InMemoryViewDeltaResultModel();
    deltaResult1.addValue(CONFIG_1, getComputedValueResult("value1", 1));
    deltaResult1.addValue(CONFIG_1, getComputedValueResult("value2", 2));
    merger.merge(deltaResult1);
    assertResultsEqual(deltaResult1, merger.getLatestResult());

    final InMemoryViewDeltaResultModel deltaResult2 = new InMemoryViewDeltaResultModel();
    deltaResult2.addValue(CONFIG_1, getComputedValueResult("value1", 3));

    merger.merge(deltaResult1);
    merger.merge(deltaResult2);

    InMemoryViewDeltaResultModel expectedMergedResult = new InMemoryViewDeltaResultModel();
    expectedMergedResult.addValue(CONFIG_1, getComputedValueResult("value1", 3));
    expectedMergedResult.addValue(CONFIG_1, getComputedValueResult("value2", 2));

    assertResultsEqual(expectedMergedResult, merger.getLatestResult());

    final InMemoryViewDeltaResultModel deltaResult3 = new InMemoryViewDeltaResultModel();
    deltaResult3.addValue(CONFIG_2, getComputedValueResult("value3", 4));

    merger.merge(deltaResult1);
    merger.merge(deltaResult3);

    expectedMergedResult = new InMemoryViewDeltaResultModel();
    expectedMergedResult.addValue(CONFIG_1, getComputedValueResult("value1", 1));
    expectedMergedResult.addValue(CONFIG_1, getComputedValueResult("value2", 2));
    expectedMergedResult.addValue(CONFIG_2, getComputedValueResult("value3", 4));

    assertResultsEqual(expectedMergedResult, merger.getLatestResult());
  }

  public void testDeltaMergerHandlesPartiallyEmptyModels() {
    final ViewDeltaResultModelMerger merger = new ViewDeltaResultModelMerger();
    InMemoryViewDeltaResultModel deltaResult = new InMemoryViewDeltaResultModel();
    merger.merge(deltaResult);

    deltaResult = new InMemoryViewDeltaResultModel();
    merger.merge(deltaResult);

    deltaResult = new InMemoryViewDeltaResultModel();
    // Tests coping with expanding calculation configurations (e.g. if a new one has been added between computation
    // cycles)
    deltaResult.addValue(CONFIG_1, getComputedValueResult("value1", 1));
    merger.merge(deltaResult);
  }

  public void testDeltaMergerPassesThroughEmptyDelta() {
    final ViewDeltaResultModelMerger merger = new ViewDeltaResultModelMerger();
    final InMemoryViewDeltaResultModel deltaResult = new InMemoryViewDeltaResultModel();
    merger.merge(deltaResult);
    assertNotNull(merger.getLatestResult());
  }

  //-------------------------------------------------------------------------
  public void testFullMerger() {
    final ViewComputationResultModelMerger merger = new ViewComputationResultModelMerger();
    assertNull(merger.getLatestResult());

    final InMemoryViewComputationResultModel result1 = new InMemoryViewComputationResultModel();
    result1.addValue(CONFIG_1, getComputedValueResult("value1", 1));
    result1.addValue(CONFIG_1, getComputedValueResult("value2", 2));
    result1.addMarketData(getComputedValueResult("vod", 250));
    merger.merge(result1);
    assertResultsEqual(result1, merger.getLatestResult());

    final InMemoryViewComputationResultModel result2 = new InMemoryViewComputationResultModel();
    result2.addValue(CONFIG_1, getComputedValueResult("value1", 3));
    result2.addMarketData(getComputedValueResult("aapl", 400));
    merger.merge(result2);

    InMemoryViewComputationResultModel expectedMergedResult = new InMemoryViewComputationResultModel();
    expectedMergedResult.addValue(CONFIG_1, getComputedValueResult("value1", 3));
    expectedMergedResult.addValue(CONFIG_1, getComputedValueResult("value2", 2));
    expectedMergedResult.addMarketData(getComputedValueResult("vod", 250));
    expectedMergedResult.addMarketData(getComputedValueResult("aapl", 400));

    assertResultsEqual(expectedMergedResult, merger.getLatestResult());

    final InMemoryViewComputationResultModel result3 = new InMemoryViewComputationResultModel();
    result3.addValue(CONFIG_2, getComputedValueResult("value3", 4));
    result3.addMarketData(getComputedValueResult("vod", 300));

    merger.merge(result1);
    merger.merge(result3);

    expectedMergedResult = new InMemoryViewComputationResultModel();
    expectedMergedResult.addValue(CONFIG_1, getComputedValueResult("value1", 1));
    expectedMergedResult.addValue(CONFIG_1, getComputedValueResult("value2", 2));
    expectedMergedResult.addValue(CONFIG_2, getComputedValueResult("value3", 4));
    result3.addMarketData(getComputedValueResult("vod", 300));

    assertResultsEqual(expectedMergedResult, merger.getLatestResult());
  }

  //-------------------------------------------------------------------------
  private ComputedValueResult getComputedValueResult(final String valueName, final Object value) {
    final UniqueId uniqueId = UniqueId.of("Scheme", valueName);
    return new ComputedValueResult(new ValueSpecification(valueName, ComputationTargetSpecification.of(uniqueId),
        ValueProperties.with(ValuePropertyNames.FUNCTION, "FunctionId").get()), value, AggregatedExecutionLog.EMPTY);
  }

  private void assertResultsEqual(final ViewResultModel expected, final ViewResultModel actual) {
    assertEquals(expected.getAllTargets(), actual.getAllTargets());
    assertEquals(expected.getCalculationConfigurationNames(), actual.getCalculationConfigurationNames());

    for (final String calcConfigName : expected.getCalculationConfigurationNames()) {
      final ViewCalculationResultModel expectedCalcResult = expected.getCalculationResult(calcConfigName);
      final ViewCalculationResultModel actualCalcResult = actual.getCalculationResult(calcConfigName);
      for (final ComputationTargetSpecification targetSpec : expected.getAllTargets()) {
        final Map<Pair<String, ValueProperties>, ComputedValueResult> expectedTargetValues = expectedCalcResult.getValues(targetSpec);
        final Map<Pair<String, ValueProperties>, ComputedValueResult> actualTargetValues = actualCalcResult.getValues(targetSpec);
        assertEquals(expectedTargetValues, actualTargetValues);
      }
    }
  }

}
TOP

Related Classes of com.opengamma.engine.view.client.merging.ViewResultModelMergerTest

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.