/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.marketdata.availability;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
import java.io.Serializable;
import java.util.Collection;
import org.mockito.Mockito;
import org.testng.annotations.Test;
import com.opengamma.engine.ComputationTargetSpecification;
import com.opengamma.engine.target.Primitive;
import com.opengamma.engine.target.Primitive.ExternalBundleIdentifiablePrimitive;
import com.opengamma.engine.target.Primitive.ExternalIdentifiablePrimitive;
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.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.UniqueId;
import com.opengamma.util.test.TestGroup;
/**
* Tests the {@link AbstractMarketDataAvailabilityFilter} class.
*/
@Test(groups = TestGroup.UNIT)
public class MarketDataAvailabilityFilterTest {
public void testExternalId_present() {
final ComputationTargetSpecification targetSpec = ComputationTargetSpecification.of(UniqueId.of("X", "0"));
final ExternalId identifier = ExternalId.of("Foo", "1");
final ValueRequirement desiredValue = new ValueRequirement("Foo", targetSpec);
final MarketDataAvailabilityFilter filter = new AbstractMarketDataAvailabilityFilter() {
@Override
public boolean isAvailable(final ComputationTargetSpecification ts, final ExternalId i, final ValueRequirement dv) {
assertEquals(ts, targetSpec);
assertEquals(i, identifier);
assertEquals(dv, desiredValue);
return true;
}
@Override
protected void populateAvailabilityHintKey(final Collection<Serializable> key) {
// Don't care
}
};
final Object target = new ExternalIdentifiablePrimitive(targetSpec.getUniqueId(), identifier);
assertTrue(filter.isAvailable(targetSpec, target, desiredValue));
final AbstractMarketDataAvailabilityProvider provider = Mockito.mock(AbstractMarketDataAvailabilityProvider.class);
final ValueSpecification valueSpec = new ValueSpecification(desiredValue.getValueName(), targetSpec, ValueProperties.with(ValuePropertyNames.FUNCTION, "Mock").get());
Mockito.when(provider.getAvailability(targetSpec, identifier, desiredValue)).thenReturn(valueSpec);
assertEquals(filter.withProvider(provider).getAvailability(targetSpec, target, desiredValue), valueSpec);
}
public void testExternalId_missing() {
final ComputationTargetSpecification targetSpec = ComputationTargetSpecification.of(UniqueId.of("X", "0"));
final ExternalId identifier = ExternalId.of("Foo", "1");
final ValueRequirement desiredValue = new ValueRequirement("Foo", targetSpec);
final MarketDataAvailabilityFilter filter = new AbstractMarketDataAvailabilityFilter() {
@Override
public boolean isAvailable(final ComputationTargetSpecification ts, final ExternalId i, final ValueRequirement dv) {
assertEquals(ts, targetSpec);
assertEquals(i, identifier);
assertEquals(dv, desiredValue);
return false;
}
@Override
protected void populateAvailabilityHintKey(final Collection<Serializable> key) {
// Don't care
}
};
final Object target = identifier;
assertFalse(filter.isAvailable(targetSpec, target, desiredValue));
final AbstractMarketDataAvailabilityProvider provider = Mockito.mock(AbstractMarketDataAvailabilityProvider.class);
assertEquals(filter.withProvider(provider).getAvailability(targetSpec, target, desiredValue), null);
Mockito.verifyZeroInteractions(provider);
}
public void testExternalIdBundle_allPresent() {
final ComputationTargetSpecification targetSpec = ComputationTargetSpecification.of(UniqueId.of("X", "0"));
final ExternalId identifier1 = ExternalId.of("Foo", "1");
final ExternalId identifier2 = ExternalId.of("Foo", "2");
final ExternalIdBundle identifiers = ExternalIdBundle.of(identifier1, identifier2);
final ValueRequirement desiredValue = new ValueRequirement("Foo", targetSpec);
final MarketDataAvailabilityFilter filter = new AbstractMarketDataAvailabilityFilter() {
@Override
public boolean isAvailable(final ComputationTargetSpecification ts, final ExternalId i, final ValueRequirement dv) {
assertEquals(ts, targetSpec);
assertEquals(dv, desiredValue);
assertTrue(i.equals(identifier1) || i.equals(identifier2));
return true;
}
@Override
protected void populateAvailabilityHintKey(final Collection<Serializable> key) {
// Don't care
}
};
final Object target = new ExternalBundleIdentifiablePrimitive(targetSpec.getUniqueId(), identifiers);
assertTrue(filter.isAvailable(targetSpec, target, desiredValue));
final AbstractMarketDataAvailabilityProvider provider = Mockito.mock(AbstractMarketDataAvailabilityProvider.class);
final ValueSpecification valueSpec = new ValueSpecification(desiredValue.getValueName(), targetSpec, ValueProperties.with(ValuePropertyNames.FUNCTION, "Mock").get());
Mockito.when(provider.getAvailability(targetSpec, identifiers, desiredValue)).thenReturn(valueSpec);
assertEquals(filter.withProvider(provider).getAvailability(targetSpec, target, desiredValue), valueSpec);
}
public void testExternalIdBundle_onePresent() {
final ComputationTargetSpecification targetSpec = ComputationTargetSpecification.of(UniqueId.of("X", "0"));
final ExternalId identifier1 = ExternalId.of("Foo", "1");
final ExternalId identifier2 = ExternalId.of("Foo", "2");
final ExternalIdBundle identifiers = ExternalIdBundle.of(identifier1, identifier2);
final ValueRequirement desiredValue = new ValueRequirement("Foo", targetSpec);
final MarketDataAvailabilityFilter filter = new AbstractMarketDataAvailabilityFilter() {
@Override
public boolean isAvailable(final ComputationTargetSpecification ts, final ExternalId i, final ValueRequirement dv) {
assertEquals(ts, targetSpec);
assertTrue(i.equals(identifier1) || i.equals(identifier2));
assertEquals(dv, desiredValue);
return i.equals(identifier1);
}
@Override
protected void populateAvailabilityHintKey(final Collection<Serializable> key) {
// Don't care
}
};
final Object target = identifiers;
assertTrue(filter.isAvailable(targetSpec, target, desiredValue));
final AbstractMarketDataAvailabilityProvider provider = Mockito.mock(AbstractMarketDataAvailabilityProvider.class);
final ValueSpecification valueSpec = new ValueSpecification(desiredValue.getValueName(), targetSpec, ValueProperties.with(ValuePropertyNames.FUNCTION, "Mock").get());
Mockito.when(provider.getAvailability(targetSpec, identifier1, desiredValue)).thenReturn(valueSpec);
assertEquals(filter.withProvider(provider).getAvailability(targetSpec, target, desiredValue), valueSpec);
}
public void testExternalIdBundle_allMissing() {
final ComputationTargetSpecification targetSpec = ComputationTargetSpecification.of(UniqueId.of("X", "0"));
final ExternalId identifier1 = ExternalId.of("Foo", "1");
final ExternalId identifier2 = ExternalId.of("Foo", "2");
final ExternalIdBundle identifiers = ExternalIdBundle.of(identifier1, identifier2);
final ValueRequirement desiredValue = new ValueRequirement("Foo", targetSpec);
final MarketDataAvailabilityFilter filter = new AbstractMarketDataAvailabilityFilter() {
@Override
public boolean isAvailable(final ComputationTargetSpecification ts, final ExternalId i, final ValueRequirement dv) {
assertEquals(ts, targetSpec);
assertTrue(i.equals(identifier1) || i.equals(identifier2));
assertEquals(dv, desiredValue);
return false;
}
@Override
protected void populateAvailabilityHintKey(final Collection<Serializable> key) {
// Don't care
}
};
final Object target = identifiers;
assertFalse(filter.isAvailable(targetSpec, target, desiredValue));
final AbstractMarketDataAvailabilityProvider provider = Mockito.mock(AbstractMarketDataAvailabilityProvider.class);
assertEquals(filter.withProvider(provider).getAvailability(targetSpec, target, desiredValue), null);
Mockito.verifyZeroInteractions(provider);
}
public void testUniqueId_present() {
final ComputationTargetSpecification targetSpec = ComputationTargetSpecification.of(UniqueId.of("X", "0"));
final ValueRequirement desiredValue = new ValueRequirement("Foo", targetSpec);
final MarketDataAvailabilityFilter filter = new AbstractMarketDataAvailabilityFilter() {
@Override
public boolean isAvailable(final ComputationTargetSpecification ts, final UniqueId i, final ValueRequirement dv) {
assertEquals(ts, targetSpec);
assertEquals(i, targetSpec.getUniqueId());
assertEquals(dv, desiredValue);
return true;
}
@Override
protected void populateAvailabilityHintKey(final Collection<Serializable> key) {
// Don't care
}
};
final Object target = new Primitive(targetSpec.getUniqueId());
assertTrue(filter.isAvailable(targetSpec, target, desiredValue));
final AbstractMarketDataAvailabilityProvider provider = Mockito.mock(AbstractMarketDataAvailabilityProvider.class);
final ValueSpecification valueSpec = new ValueSpecification(desiredValue.getValueName(), targetSpec, ValueProperties.with(ValuePropertyNames.FUNCTION, "Mock").get());
Mockito.when(provider.getAvailability(targetSpec, targetSpec.getUniqueId(), desiredValue)).thenReturn(valueSpec);
assertEquals(filter.withProvider(provider).getAvailability(targetSpec, target, desiredValue), valueSpec);
}
public void testUniqueId_missing() {
final ComputationTargetSpecification targetSpec = ComputationTargetSpecification.of(UniqueId.of("X", "0"));
final ValueRequirement desiredValue = new ValueRequirement("Foo", targetSpec);
final MarketDataAvailabilityFilter filter = new AbstractMarketDataAvailabilityFilter() {
@Override
public boolean isAvailable(final ComputationTargetSpecification ts, final UniqueId i, final ValueRequirement dv) {
assertEquals(ts, targetSpec);
assertEquals(i, targetSpec.getUniqueId());
assertEquals(dv, desiredValue);
return false;
}
@Override
protected void populateAvailabilityHintKey(final Collection<Serializable> key) {
// Don't care
}
};
final Object target = targetSpec.getUniqueId();
assertFalse(filter.isAvailable(targetSpec, target, desiredValue));
final AbstractMarketDataAvailabilityProvider provider = Mockito.mock(AbstractMarketDataAvailabilityProvider.class);
assertEquals(filter.withProvider(provider).getAvailability(targetSpec, target, desiredValue), null);
Mockito.verifyZeroInteractions(provider);
}
public void testNull_present() {
final ValueRequirement desiredValue = new ValueRequirement("Foo", ComputationTargetSpecification.NULL);
final MarketDataAvailabilityFilter filter = new AbstractMarketDataAvailabilityFilter() {
@Override
public boolean isAvailable(final ComputationTargetSpecification ts, final ValueRequirement dv) {
assertEquals(ts, ComputationTargetSpecification.NULL);
assertEquals(dv, desiredValue);
return true;
}
@Override
protected void populateAvailabilityHintKey(final Collection<Serializable> key) {
// Don't care
}
};
assertTrue(filter.isAvailable(ComputationTargetSpecification.NULL, null, desiredValue));
final AbstractMarketDataAvailabilityProvider provider = Mockito.mock(AbstractMarketDataAvailabilityProvider.class);
final ValueSpecification valueSpec = new ValueSpecification(desiredValue.getValueName(), ComputationTargetSpecification.NULL, ValueProperties.with(ValuePropertyNames.FUNCTION, "Mock").get());
Mockito.when(provider.getAvailability(ComputationTargetSpecification.NULL, desiredValue)).thenReturn(valueSpec);
assertEquals(filter.withProvider(provider).getAvailability(ComputationTargetSpecification.NULL, null, desiredValue), valueSpec);
}
public void testNull_missing() {
final ValueRequirement desiredValue = new ValueRequirement("Foo", ComputationTargetSpecification.NULL);
final MarketDataAvailabilityFilter filter = new AbstractMarketDataAvailabilityFilter() {
@Override
public boolean isAvailable(final ComputationTargetSpecification ts, final ValueRequirement dv) {
assertEquals(ts, ComputationTargetSpecification.NULL);
assertEquals(dv, desiredValue);
return false;
}
@Override
protected void populateAvailabilityHintKey(final Collection<Serializable> key) {
// Don't care
}
};
assertFalse(filter.isAvailable(ComputationTargetSpecification.NULL, null, desiredValue));
final AbstractMarketDataAvailabilityProvider provider = Mockito.mock(AbstractMarketDataAvailabilityProvider.class);
assertEquals(filter.withProvider(provider).getAvailability(ComputationTargetSpecification.NULL, null, desiredValue), null);
Mockito.verifyZeroInteractions(provider);
}
}