Package com.opengamma.engine.view.worker

Source Code of com.opengamma.engine.view.worker.CompositeMarketDataSnapshotTest

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

import static org.mockito.Matchers.anyLong;
import static org.mockito.Matchers.anyObject;
import static org.mockito.Matchers.anySet;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.stub;
import static org.mockito.Mockito.verify;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;

import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;

import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import org.threeten.bp.Instant;

import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.marketdata.MarketDataSnapshot;
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.engine.view.worker.CompositeMarketDataSnapshot;
import com.opengamma.engine.view.worker.SnapshottingViewExecutionDataProvider;
import com.opengamma.id.UniqueId;
import com.opengamma.util.test.TestGroup;

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

  private static final ComputationTargetSpecification TARGET = new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("scheme", "value"));
  private static final ValueRequirement REQUIREMENT1 = new ValueRequirement("r1", TARGET);
  private static final ValueRequirement REQUIREMENT2 = new ValueRequirement("r2", TARGET);
  private static final ValueSpecification SPECIFICATION1 = new ValueSpecification(REQUIREMENT1.getValueName(), TARGET, ValueProperties.with(ValuePropertyNames.FUNCTION, "F").get());
  private static final ValueSpecification SPECIFICATION1_EXT = new ValueSpecification(REQUIREMENT1.getValueName(), TARGET, ValueProperties.with(ValuePropertyNames.FUNCTION, "F")
      .with(ValuePropertyNames.DATA_PROVIDER, "0").get());
  private static final ValueSpecification SPECIFICATION2 = new ValueSpecification(REQUIREMENT2.getValueName(), TARGET, ValueProperties.with(ValuePropertyNames.FUNCTION, "F").get());
  private static final ValueSpecification SPECIFICATION2_EXT = new ValueSpecification(REQUIREMENT2.getValueName(), TARGET, ValueProperties.with(ValuePropertyNames.FUNCTION, "F")
      .with(ValuePropertyNames.DATA_PROVIDER, "1").get());
  private static final Object VALUE1 = "V1";
  private static final Object VALUE2 = "V2";
  private static final ValueSpecification UNKNOWN_SPECIFICATION = new ValueSpecification("u", TARGET, ValueProperties.with(ValuePropertyNames.FUNCTION, "F").get());

  private MarketDataSnapshot _delegate1;
  private MarketDataSnapshot _delegate2;
  private CompositeMarketDataSnapshot _snapshot;

  @BeforeMethod
  public void setUp() throws Exception {
    _delegate1 = mock(MarketDataSnapshot.class);
    _delegate2 = mock(MarketDataSnapshot.class);
    _snapshot = new CompositeMarketDataSnapshot(Lists.newArrayList(_delegate1, _delegate2), new SnapshottingViewExecutionDataProvider.ValueSpecificationProvider(2));
    stub(_delegate1.query(SPECIFICATION1)).toReturn(VALUE1);
    stub(_delegate2.query(SPECIFICATION2)).toReturn(VALUE2);
    stub(_delegate1.query(Sets.newHashSet(SPECIFICATION1))).toReturn(ImmutableMap.of(SPECIFICATION1, VALUE1));
    stub(_delegate2.query(Sets.newHashSet(SPECIFICATION2))).toReturn(ImmutableMap.of(SPECIFICATION2, VALUE2));
    stub(_delegate1.getSnapshotTime()).toReturn(null);
    stub(_delegate2.getSnapshotTime()).toReturn(Instant.now());
    stub(_delegate1.getSnapshotTimeIndication()).toReturn(null);
    stub(_delegate2.getSnapshotTimeIndication()).toReturn(Instant.now());
  }

  @Test
  public void init() {
    // check all delegates are initialized
    _snapshot.init();
    verify(_delegate1).init();
    verify(_delegate2).init();
  }

  /**
   * initialize the snapshot with a set of requirements that is a subset of the requirements in the underlying snapshots
   */
  @SuppressWarnings("unchecked")
  @Test
  public void initMultiSubset() {
    // check all delegates are initialized with the appropriate subset of requirements
    final Set<ValueSpecification> specs = Sets.newHashSet(SPECIFICATION1_EXT, UNKNOWN_SPECIFICATION);
    _snapshot.init(specs, 0, TimeUnit.MILLISECONDS);
    verify(_delegate1).init(Sets.newHashSet(SPECIFICATION1), 0, TimeUnit.MILLISECONDS);
    verify(_delegate1, never()).init();
    verify(_delegate2).init();
    verify(_delegate2, never()).init(anySet(), anyLong(), (TimeUnit) anyObject());
  }

  /**
   * initialize the snapshot with a set of requirements that includes all the requirements in the underlying snapshots
   */
  @Test
  public void initMultiAll() {
    // check all delegates are initialized with the appropriate subset of requirements
    final Set<ValueSpecification> specs = Sets.newHashSet(SPECIFICATION1_EXT, SPECIFICATION2_EXT, UNKNOWN_SPECIFICATION);
    _snapshot.init(specs, 0, TimeUnit.MILLISECONDS);
    verify(_delegate1).init(Sets.newHashSet(SPECIFICATION1), 0, TimeUnit.MILLISECONDS);
    verify(_delegate2).init(Sets.newHashSet(SPECIFICATION2), 0, TimeUnit.MILLISECONDS);
  }

  @Test
  public void queryOne() {
    // check a requirement is found from
    // * the first delegate
    // * another delegate
    // check null is returned for an unknown requirement
    assertEquals(VALUE1, _snapshot.query(SPECIFICATION1_EXT));
    assertEquals(VALUE2, _snapshot.query(SPECIFICATION2_EXT));
    assertNull(_snapshot.query(UNKNOWN_SPECIFICATION));
  }

  /**
   * query the snapshot with a set of requirements that is a subset of the requirements in the underlying snapshots
   */
  @Test
  public void queryMultiSubset() {
    final Set<ValueSpecification> specs = Sets.newHashSet(SPECIFICATION1_EXT, UNKNOWN_SPECIFICATION);
    final Map<ValueSpecification, Object> result = _snapshot.query(specs);
    assertEquals(VALUE1, result.get(SPECIFICATION1_EXT));
    assertNull(result.get(SPECIFICATION2_EXT));
    assertNull(result.get(UNKNOWN_SPECIFICATION));
  }

  /**
   * query the snapshot with a set of requirements that includes all the requirements in the underlying snapshots
   */
  @Test
  public void queryMultiAll() {
    final Set<ValueSpecification> specs = Sets.newHashSet(SPECIFICATION1_EXT, SPECIFICATION2_EXT, UNKNOWN_SPECIFICATION);
    final Map<ValueSpecification, Object> result = _snapshot.query(specs);
    assertEquals(VALUE1, result.get(SPECIFICATION1_EXT));
    assertEquals(VALUE2, result.get(SPECIFICATION2_EXT));
    assertNull(result.get(UNKNOWN_SPECIFICATION));
  }

  /**
   * If the first underlying provider doesn't have a snapshot time then the others should be tried
   */
  @Test
  public void snapshotTime() {
    assertNotNull(_snapshot.getSnapshotTime());
  }

  /**
   * If the first underlying provider doesn't have a snapshot time indication then the others should be tried
   */
  @Test
  public void snapshotTimeIndication() {
    assertNotNull(_snapshot.getSnapshotTimeIndication());
  }

}
TOP

Related Classes of com.opengamma.engine.view.worker.CompositeMarketDataSnapshotTest

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.