/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.view.listener; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertSame; import java.util.HashSet; import java.util.Set; import org.testng.annotations.Test; import org.threeten.bp.Instant; import com.google.common.collect.ImmutableSet; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.engine.value.ComputedValue; 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.ViewComputationResultModel; import com.opengamma.engine.view.ViewDeltaResultModel; import com.opengamma.engine.view.ViewResultModel; import com.opengamma.engine.view.impl.InMemoryViewComputationResultModel; import com.opengamma.engine.view.impl.InMemoryViewDeltaResultModel; import com.opengamma.util.test.TestGroup; /** * Tests the {@link AbstractCompletedResultsCall} class. */ @Test(groups = TestGroup.UNIT) public abstract class AbstractCompletedResultsCallTest { protected abstract AbstractCompletedResultsCall create(ViewComputationResultModel full, ViewDeltaResultModel delta); public void testInitialValues() { final ViewComputationResultModel full = new InMemoryViewComputationResultModel(); final ViewDeltaResultModel delta = new InMemoryViewDeltaResultModel(); AbstractCompletedResultsCall instance = create(null, null); assertNull(instance.getViewComputationResultModel()); assertNull(instance.getViewDeltaResultModel()); instance = create(full, null); assertSame(instance.getViewComputationResultModel(), full); assertNull(instance.getViewDeltaResultModel()); instance = create(null, delta); assertNull(instance.getViewComputationResultModel()); assertSame(instance.getViewDeltaResultModel(), delta); instance = create(full, delta); assertSame(instance.getViewComputationResultModel(), full); assertSame(instance.getViewDeltaResultModel(), delta); } private ValueSpecification value(final int i) { return new ValueSpecification(Integer.toString(i), ComputationTargetSpecification.NULL, ValueProperties.with(ValuePropertyNames.FUNCTION, "Test").get()); } private ViewComputationResultModel createFull1(final Instant now) { final InMemoryViewComputationResultModel model = new InMemoryViewComputationResultModel(); model.setCalculationTime(now); model.addMarketData(new ComputedValue(value(1), "A")); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(10), "A"), AggregatedExecutionLog.EMPTY)); model.addMarketData(new ComputedValue(value(2), "A")); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(20), "A"), AggregatedExecutionLog.EMPTY)); model.addMarketData(new ComputedValue(value(3), "A")); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(30), "A"), AggregatedExecutionLog.EMPTY)); return model; } private ViewComputationResultModel createFull2a(final Instant now) { final InMemoryViewComputationResultModel model = new InMemoryViewComputationResultModel(); model.setCalculationTime(now.plusSeconds(1L)); model.addMarketData(new ComputedValue(value(1), "A")); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(10), "A"), AggregatedExecutionLog.EMPTY)); model.addMarketData(new ComputedValue(value(2), "B")); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(20), "B"), AggregatedExecutionLog.EMPTY)); model.addMarketData(new ComputedValue(value(3), "A")); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(30), "A"), AggregatedExecutionLog.EMPTY)); return model; } private ViewComputationResultModel createFull2b(final Instant now) { final InMemoryViewComputationResultModel model = new InMemoryViewComputationResultModel(); model.setCalculationTime(now.plusSeconds(1L)); model.addMarketData(new ComputedValue(value(1), "B")); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(10), "B"), AggregatedExecutionLog.EMPTY)); model.addMarketData(new ComputedValue(value(2), "B")); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(20), "B"), AggregatedExecutionLog.EMPTY)); model.addMarketData(new ComputedValue(value(3), "B")); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(30), "B"), AggregatedExecutionLog.EMPTY)); return model; } private ViewComputationResultModel createFull3(final Instant now) { final InMemoryViewComputationResultModel model = new InMemoryViewComputationResultModel(); model.setCalculationTime(now.plusSeconds(2L)); model.addMarketData(new ComputedValue(value(1), "B")); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(10), "B"), AggregatedExecutionLog.EMPTY)); model.addMarketData(new ComputedValue(value(2), "C")); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(20), "C"), AggregatedExecutionLog.EMPTY)); model.addMarketData(new ComputedValue(value(3), "B")); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(30), "B"), AggregatedExecutionLog.EMPTY)); return model; } private ViewDeltaResultModel createDelta2a(final Instant now) { final InMemoryViewDeltaResultModel model = new InMemoryViewDeltaResultModel(); model.setCalculationTime(now.plusSeconds(1L)); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(20), "B"), AggregatedExecutionLog.EMPTY)); return model; } private ViewDeltaResultModel createDelta2b(final Instant now) { final InMemoryViewDeltaResultModel model = new InMemoryViewDeltaResultModel(); model.setCalculationTime(now.plusSeconds(1L)); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(10), "B"), AggregatedExecutionLog.EMPTY)); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(30), "B"), AggregatedExecutionLog.EMPTY)); return model; } private ViewDeltaResultModel createDelta3(final Instant now) { final InMemoryViewDeltaResultModel model = new InMemoryViewDeltaResultModel(); model.setCalculationTime(now.plusSeconds(2L)); model.addValue("Default", new ComputedValueResult(new ComputedValue(value(20), "C"), AggregatedExecutionLog.EMPTY)); return model; } private Set<ComputedValue> values(final ViewResultModel model) { final Set<ComputedValue> values = new HashSet<ComputedValue>(); for (ComputedValueResult result : model.getTargetResult(ComputationTargetSpecification.NULL).getAllValues("Default")) { values.add(new ComputedValue(result.getSpecification(), result.getValue())); } return values; } public void testNormalOrder() { final Instant now = Instant.now(); final AbstractCompletedResultsCall instance = create(createFull1(now), null); assertEquals(instance.getViewComputationResultModel().getAllMarketData(), ImmutableSet.of(new ComputedValue(value(1), "A"), new ComputedValue(value(2), "A"), new ComputedValue(value(3), "A"))); assertEquals(values(instance.getViewComputationResultModel()), ImmutableSet.of(new ComputedValue(value(10), "A"), new ComputedValue(value(20), "A"), new ComputedValue(value(30), "A"))); instance.update(createFull2a(now), createDelta2a(now)); assertEquals(instance.getViewComputationResultModel().getAllMarketData(), ImmutableSet.of(new ComputedValue(value(1), "A"), new ComputedValue(value(2), "B"), new ComputedValue(value(3), "A"))); assertEquals(values(instance.getViewDeltaResultModel()), ImmutableSet.of(new ComputedValue(value(20), "B"))); instance.update(createFull2b(now), createDelta2b(now)); assertEquals(instance.getViewComputationResultModel().getAllMarketData(), ImmutableSet.of(new ComputedValue(value(1), "B"), new ComputedValue(value(2), "B"), new ComputedValue(value(3), "B"))); assertEquals(values(instance.getViewDeltaResultModel()), ImmutableSet.of(new ComputedValue(value(10), "B"), new ComputedValue(value(20), "B"), new ComputedValue(value(30), "B"))); instance.update(createFull3(now), createDelta3(now)); assertEquals(instance.getViewComputationResultModel().getAllMarketData(), ImmutableSet.of(new ComputedValue(value(1), "B"), new ComputedValue(value(2), "C"), new ComputedValue(value(3), "B"))); assertEquals(values(instance.getViewComputationResultModel()), ImmutableSet.of(new ComputedValue(value(10), "B"), new ComputedValue(value(20), "C"), new ComputedValue(value(30), "B"))); assertEquals(values(instance.getViewDeltaResultModel()), ImmutableSet.of(new ComputedValue(value(10), "B"), new ComputedValue(value(20), "C"), new ComputedValue(value(30), "B"))); } public void testOutOfOrderResult1() { final Instant now = Instant.now(); final AbstractCompletedResultsCall instance = create(createFull1(now), null); instance.update(createFull2b(now), createDelta2b(now)); assertEquals(instance.getViewComputationResultModel().getAllMarketData(), ImmutableSet.of(new ComputedValue(value(1), "B"), new ComputedValue(value(2), "B"), new ComputedValue(value(3), "B"))); assertEquals(values(instance.getViewDeltaResultModel()), ImmutableSet.of(new ComputedValue(value(10), "B"), new ComputedValue(value(30), "B"))); instance.update(createFull2a(now), createDelta2a(now)); assertEquals(instance.getViewComputationResultModel().getAllMarketData(), ImmutableSet.of(new ComputedValue(value(1), "A"), new ComputedValue(value(2), "B"), new ComputedValue(value(3), "A"))); assertEquals(values(instance.getViewDeltaResultModel()), ImmutableSet.of(new ComputedValue(value(10), "B"), new ComputedValue(value(20), "B"), new ComputedValue(value(30), "B"))); instance.update(createFull3(now), createDelta3(now)); assertEquals(instance.getViewComputationResultModel().getAllMarketData(), ImmutableSet.of(new ComputedValue(value(1), "B"), new ComputedValue(value(2), "C"), new ComputedValue(value(3), "B"))); assertEquals(values(instance.getViewComputationResultModel()), ImmutableSet.of(new ComputedValue(value(10), "B"), new ComputedValue(value(20), "C"), new ComputedValue(value(30), "B"))); assertEquals(values(instance.getViewDeltaResultModel()), ImmutableSet.of(new ComputedValue(value(10), "B"), new ComputedValue(value(20), "C"), new ComputedValue(value(30), "B"))); } public void testOutOfOrderResult2() { final Instant now = Instant.now(); final AbstractCompletedResultsCall instance = create(createFull1(now), null); instance.update(createFull2b(now), createDelta2b(now)); instance.update(createFull3(now), createDelta3(now)); assertEquals(instance.getViewComputationResultModel().getAllMarketData(), ImmutableSet.of(new ComputedValue(value(1), "B"), new ComputedValue(value(2), "C"), new ComputedValue(value(3), "B"))); assertEquals(values(instance.getViewDeltaResultModel()), ImmutableSet.of(new ComputedValue(value(10), "B"), new ComputedValue(value(20), "C"), new ComputedValue(value(30), "B"))); instance.update(createFull2a(now), createDelta2a(now)); assertEquals(instance.getViewComputationResultModel().getAllMarketData(), ImmutableSet.of(new ComputedValue(value(1), "B"), new ComputedValue(value(2), "C"), new ComputedValue(value(3), "B"))); assertEquals(values(instance.getViewComputationResultModel()), ImmutableSet.of(new ComputedValue(value(10), "B"), new ComputedValue(value(20), "C"), new ComputedValue(value(30), "B"))); } }