Package com.opengamma.engine.cache

Source Code of com.opengamma.engine.cache.CachingIdentifierMapTest

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

import static org.testng.Assert.assertEquals;
import it.unimi.dsi.fastutil.longs.Long2ObjectMap;
import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap;
import it.unimi.dsi.fastutil.longs.LongArrayList;
import it.unimi.dsi.fastutil.objects.Object2LongMap;
import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap;

import java.util.Arrays;
import java.util.Collection;
import java.util.LinkedList;

import org.mockito.Mockito;
import org.testng.annotations.Test;

import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.value.ValueProperties;
import com.opengamma.engine.value.ValuePropertyNames;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.util.test.TestGroup;

/**
* Tests the {@link CachingIdentifierMap} class.
*/
@Test(groups = TestGroup.UNIT)
public class CachingIdentifierMapTest {

  private ValueSpecification createValueSpec(final int id) {
    return new ValueSpecification(Integer.toString(id), ComputationTargetSpecification.NULL, ValueProperties.with(ValuePropertyNames.FUNCTION, "Test").get());
  }

  public void testGetIdentifier() {
    final ValueSpecification spec1 = createValueSpec(1);
    final IdentifierMap underlying = Mockito.mock(IdentifierMap.class);
    final CachingIdentifierMap cache = new CachingIdentifierMap(underlying);
    Mockito.when(underlying.getIdentifier(spec1)).thenReturn(1L);
    assertEquals(cache.getIdentifier(spec1), 1L);
    assertEquals(cache.getIdentifier(spec1), 1L);
    Mockito.verify(underlying, Mockito.times(1)).getIdentifier(spec1);
  }

  public void testGetValueSpecification() {
    final ValueSpecification spec1 = createValueSpec(1);
    final IdentifierMap underlying = Mockito.mock(IdentifierMap.class);
    final CachingIdentifierMap cache = new CachingIdentifierMap(underlying);
    Mockito.when(underlying.getValueSpecification(1L)).thenReturn(spec1);
    assertEquals(cache.getValueSpecification(1L), spec1);
    assertEquals(cache.getValueSpecification(1L), spec1);
    Mockito.verify(underlying, Mockito.times(1)).getValueSpecification(1L);
  }

  public void testGetIdentifiers() {
    final ValueSpecification spec1 = createValueSpec(1);
    final ValueSpecification spec2 = createValueSpec(2);
    final ValueSpecification spec3 = createValueSpec(3);
    final Collection<ValueSpecification> spec1And2 = new LinkedList<ValueSpecification>();
    spec1And2.add(spec1);
    spec1And2.add(spec2);
    final Object2LongMap<ValueSpecification> identifier1And2 = new Object2LongOpenHashMap<ValueSpecification>();
    identifier1And2.put(spec1, 1L);
    identifier1And2.put(spec2, 2L);
    final IdentifierMap underlying = Mockito.mock(IdentifierMap.class);
    final CachingIdentifierMap cache = new CachingIdentifierMap(underlying);
    Mockito.when(underlying.getIdentifiers(spec1And2)).thenReturn(identifier1And2);
    Mockito.when(underlying.getIdentifier(spec3)).thenReturn(3L);
    Object2LongMap<ValueSpecification> result = cache.getIdentifiers(Arrays.asList(spec1, spec2));
    assertEquals(result.size(), 2);
    assertEquals((long) result.get(spec1), 1L);
    assertEquals((long) result.get(spec2), 2L);
    result = cache.getIdentifiers(Arrays.asList(spec1, spec2));
    assertEquals(result.size(), 2);
    assertEquals((long) result.get(spec1), 1L);
    assertEquals((long) result.get(spec2), 2L);
    Mockito.verify(underlying, Mockito.times(1)).getIdentifiers(spec1And2);
    result = cache.getIdentifiers(Arrays.asList(spec2, spec3));
    assertEquals(result.size(), 2);
    assertEquals((long) result.get(spec2), 2L);
    assertEquals((long) result.get(spec3), 3L);
    result = cache.getIdentifiers(Arrays.asList(spec2, spec3));
    assertEquals(result.size(), 2);
    assertEquals((long) result.get(spec2), 2L);
    assertEquals((long) result.get(spec3), 3L);
    Mockito.verify(underlying, Mockito.times(1)).getIdentifier(spec3);
    result = cache.getIdentifiers(Arrays.asList(spec1, spec2, spec3));
    assertEquals(result.size(), 3);
    assertEquals((long) result.get(spec1), 1L);
    assertEquals((long) result.get(spec2), 2L);
    assertEquals((long) result.get(spec3), 3L);
    Mockito.verifyNoMoreInteractions(underlying);
  }

  public void testGetValueSpecifications() {
    final ValueSpecification spec1 = createValueSpec(1);
    final ValueSpecification spec2 = createValueSpec(2);
    final ValueSpecification spec3 = createValueSpec(3);
    final Long2ObjectMap<ValueSpecification> spec1And2 = new Long2ObjectOpenHashMap<ValueSpecification>(new long[] {1L, 2L }, new ValueSpecification[] {spec1, spec2 });
    final IdentifierMap underlying = Mockito.mock(IdentifierMap.class);
    final CachingIdentifierMap cache = new CachingIdentifierMap(underlying);
    Mockito.when(underlying.getValueSpecifications(new LongArrayList(new long[] {1L, 2L }))).thenReturn(spec1And2);
    Mockito.when(underlying.getValueSpecification(3L)).thenReturn(spec3);
    Long2ObjectMap<ValueSpecification> result = cache.getValueSpecifications(new LongArrayList(new long[] {1L, 2L }));
    assertEquals(result.size(), 2);
    assertEquals(result.get(1L), spec1);
    assertEquals(result.get(2L), spec2);
    result = cache.getValueSpecifications(new LongArrayList(new long[] {1L, 2L }));
    assertEquals(result.size(), 2);
    assertEquals(result.get(1L), spec1);
    assertEquals(result.get(2L), spec2);
    Mockito.verify(underlying, Mockito.times(1)).getValueSpecifications(new LongArrayList(new long[] {1L, 2L }));
    result = cache.getValueSpecifications(new LongArrayList(new long[] {2L, 3L }));
    assertEquals(result.size(), 2);
    assertEquals(result.get(2L), spec2);
    assertEquals(result.get(3L), spec3);
    result = cache.getValueSpecifications(new LongArrayList(new long[] {2L, 3L }));
    assertEquals(result.size(), 2);
    assertEquals(result.get(2L), spec2);
    assertEquals(result.get(3L), spec3);
    Mockito.verify(underlying, Mockito.times(1)).getValueSpecification(3L);
    result = cache.getValueSpecifications(new LongArrayList(new long[] {1L, 2L, 3L }));
    assertEquals(result.size(), 3);
    assertEquals(result.get(1L), spec1);
    assertEquals(result.get(2L), spec2);
    assertEquals(result.get(3L), spec3);
    result = cache.getValueSpecifications(new LongArrayList(new long[] {1L, 2L, 3L }));
    assertEquals(result.size(), 3);
    assertEquals(result.get(1L), spec1);
    assertEquals(result.get(2L), spec2);
    assertEquals(result.get(3L), spec3);
    Mockito.verifyNoMoreInteractions(underlying);
  }

}
TOP

Related Classes of com.opengamma.engine.cache.CachingIdentifierMapTest

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.