/** * 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.assertSame; import java.io.Serializable; import org.mockito.Mockito; import org.testng.annotations.Test; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.engine.target.ComputationTargetType; 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 AbstractMarketDataAvailabilityProvider} class. */ @Test(groups = TestGroup.UNIT) public class MarketDataAvailabilityProviderTest { private static class Impl extends AbstractMarketDataAvailabilityProvider { @Override public MarketDataAvailabilityFilter getAvailabilityFilter() { throw new UnsupportedOperationException(); } @Override protected ValueSpecification getAvailability(final ComputationTargetSpecification targetSpec, final ExternalId identifier, final ValueRequirement desiredValue) { return new ValueSpecification(desiredValue.getValueName(), targetSpec, ValueProperties.with(ValuePropertyNames.FUNCTION, "externalId").get()); } @Override protected ValueSpecification getAvailability(final ComputationTargetSpecification targetSpec, final ExternalIdBundle identifiers, final ValueRequirement desiredValue) { return new ValueSpecification(desiredValue.getValueName(), targetSpec, ValueProperties.with(ValuePropertyNames.FUNCTION, "externalIdBundle").get()); } @Override protected ValueSpecification getAvailability(final ComputationTargetSpecification targetSpec, final UniqueId identifier, final ValueRequirement desiredValue) { return new ValueSpecification(desiredValue.getValueName(), targetSpec, ValueProperties.with(ValuePropertyNames.FUNCTION, "uniqueId").get()); } @Override protected ValueSpecification getAvailability(final ComputationTargetSpecification targetSpec, final ValueRequirement desiredValue) { return new ValueSpecification(desiredValue.getValueName(), targetSpec, ValueProperties.with(ValuePropertyNames.FUNCTION, "null").get()); } @Override public Serializable getAvailabilityHintKey() { return getClass(); } } protected MarketDataAvailabilityProvider create() { return new Impl(); } public void testGetAvailability_uniqueId() { final MarketDataAvailabilityProvider availability = create(); final ComputationTargetSpecification targetSpec = new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("Security", "Foo")); final Object target = new Primitive(UniqueId.of("Security", "Foo")); final ValueRequirement desiredValue = new ValueRequirement("Bar", targetSpec); assertEquals(availability.getAvailability(targetSpec, target, desiredValue).getProperty(ValuePropertyNames.FUNCTION), "uniqueId"); } public void testGetAvailability_externalId() { final MarketDataAvailabilityProvider availability = create(); final ComputationTargetSpecification targetSpec = new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("Security", "Foo")); final Object target = new ExternalIdentifiablePrimitive(UniqueId.of("Security", "Foo"), ExternalId.of("Ticker", "Foo")); final ValueRequirement desiredValue = new ValueRequirement("Bar", targetSpec); assertEquals(availability.getAvailability(targetSpec, target, desiredValue).getProperty(ValuePropertyNames.FUNCTION), "externalId"); } public void testGetAvailability_externalIdBundle() { final MarketDataAvailabilityProvider availability = create(); final ComputationTargetSpecification targetSpec = new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("Security", "Foo")); final Object target = new ExternalBundleIdentifiablePrimitive(UniqueId.of("Security", "Foo"), ExternalIdBundle.of("Ticker", "Foo")); final ValueRequirement desiredValue = new ValueRequirement("Bar", targetSpec); assertEquals(availability.getAvailability(targetSpec, target, desiredValue).getProperty(ValuePropertyNames.FUNCTION), "externalIdBundle"); } public void testGetAvailability_null() { final MarketDataAvailabilityProvider availability = create(); final ValueRequirement desiredValue = new ValueRequirement("Bar", ComputationTargetSpecification.NULL); assertEquals(availability.getAvailability(ComputationTargetSpecification.NULL, null, desiredValue).getProperty(ValuePropertyNames.FUNCTION), "null"); } public void testOf_same() { final MarketDataAvailabilityProvider availability = create(); assertSame(AbstractMarketDataAvailabilityProvider.of(availability), availability); } public void testOf_wrapped() { final MarketDataAvailabilityFilter filter = Mockito.mock(MarketDataAvailabilityFilter.class); final MarketDataAvailabilityProvider provider = new MarketDataAvailabilityProvider() { @Override public ValueSpecification getAvailability(final ComputationTargetSpecification targetSpec, final Object target, final ValueRequirement desiredValue) throws MarketDataNotSatisfiableException { return new ValueSpecification(desiredValue.getValueName(), targetSpec, ValueProperties.with(ValuePropertyNames.FUNCTION, "Mock").get()); } @Override public MarketDataAvailabilityFilter getAvailabilityFilter() { return filter; } @Override public Serializable getAvailabilityHintKey() { return getClass(); } }; final AbstractMarketDataAvailabilityProvider availability = AbstractMarketDataAvailabilityProvider.of(provider); assertSame(availability.getAvailabilityFilter(), filter); final ValueRequirement desiredValue = new ValueRequirement("Foo", ComputationTargetSpecification.NULL); assertEquals(availability.getAvailability(ComputationTargetSpecification.NULL, (ExternalId) null, desiredValue).getProperty(ValuePropertyNames.FUNCTION), "Mock"); assertEquals(availability.getAvailability(ComputationTargetSpecification.NULL, (ExternalIdBundle) null, desiredValue).getProperty(ValuePropertyNames.FUNCTION), "Mock"); assertEquals(availability.getAvailability(ComputationTargetSpecification.NULL, (UniqueId) null, desiredValue).getProperty(ValuePropertyNames.FUNCTION), "Mock"); assertEquals(availability.getAvailability(ComputationTargetSpecification.NULL, desiredValue).getProperty(ValuePropertyNames.FUNCTION), "Mock"); } }