/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertSame;
import static org.testng.Assert.assertTrue;
import java.math.BigDecimal;
import org.testng.annotations.Test;
import org.threeten.bp.OffsetDateTime;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.PositionSource;
import com.opengamma.core.position.impl.MockPositionSource;
import com.opengamma.core.position.impl.SimpleCounterparty;
import com.opengamma.core.position.impl.SimplePortfolio;
import com.opengamma.core.position.impl.SimplePortfolioNode;
import com.opengamma.core.position.impl.SimplePosition;
import com.opengamma.core.position.impl.SimpleTrade;
import com.opengamma.core.security.Security;
import com.opengamma.core.security.SecuritySource;
import com.opengamma.core.security.impl.SimpleSecurity;
import com.opengamma.core.security.impl.SimpleSecurityLink;
import com.opengamma.engine.target.ComputationTargetType;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.UniqueId;
import com.opengamma.id.VersionCorrection;
import com.opengamma.util.money.Currency;
import com.opengamma.util.money.UnorderedCurrencyPair;
import com.opengamma.util.test.TestGroup;
/**
* Test DefaultComputationTargetResolver.
*/
@Test(groups = TestGroup.UNIT)
public class DefaultComputationTargetResolverTest {
private static final SimplePortfolioNode NODE = new SimplePortfolioNode(UniqueId.of("A", "B"), "Name");
private static final Position POSITION = new SimplePosition(UniqueId.of("Test", "1"), new BigDecimal(1), ExternalIdBundle.EMPTY);
private static final Security SECURITY = new SimpleSecurity(UniqueId.of("Test", "SEC"), ExternalIdBundle.EMPTY, "Test security", "EQUITY");
public void test_constructor() {
final SecuritySource secSource = new InMemorySecuritySource();
final PositionSource posSource = new MockPositionSource();
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
assertSame(secSource, test.getSecuritySource());
assertSame(posSource, test.getPositionSource());
}
private void assertExpected(final ComputationTarget expected, final ComputationTarget actual) {
assertTrue(expected.getType().isCompatible(actual.getType()));
assertEquals(expected.getContextSpecification(), actual.getContextSpecification());
assertEquals(expected.getUniqueId(), actual.getUniqueId());
}
public void test_resolve_portfolioNode() {
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
final SimplePortfolio p = new SimplePortfolio(UniqueId.of("Test", "1"), "Name");
p.getRootNode().addChildNode(NODE);
posSource.addPortfolio(p);
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
final ComputationTargetSpecification spec = ComputationTargetSpecification.of(NODE);
final ComputationTarget expected = new ComputationTarget(ComputationTargetType.PORTFOLIO_NODE, NODE);
assertExpected(expected, test.resolve(spec, VersionCorrection.LATEST));
}
public void test_resolve_position() {
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
final SimplePortfolio p = new SimplePortfolio(UniqueId.of("Test", "1"), "Name");
p.getRootNode().addPosition(POSITION);
posSource.addPortfolio(p);
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
final ComputationTargetSpecification spec = ComputationTargetSpecification.of(POSITION);
final ComputationTarget expected = new ComputationTarget(ComputationTargetType.POSITION, POSITION);
assertExpected(expected, test.resolve(spec, VersionCorrection.LATEST));
}
public void test_resolve_trade() {
final OffsetDateTime now = OffsetDateTime.now();
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
final SimplePortfolio portfolio = new SimplePortfolio(UniqueId.of("Test", "1"), "Name");
final SimplePosition position = new SimplePosition(UniqueId.of("Test", "1"), new BigDecimal(1), ExternalIdBundle.EMPTY);
final SimpleTrade trade = new SimpleTrade(new SimpleSecurityLink(), new BigDecimal(1), new SimpleCounterparty(ExternalId.of("CPARTY", "C100")), now.toLocalDate(), now.toOffsetTime());
trade.setUniqueId(UniqueId.of("TradeScheme", "1"));
position.addTrade(trade);
portfolio.getRootNode().addPosition(position);
posSource.addPortfolio(portfolio);
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
final ComputationTargetSpecification spec = ComputationTargetSpecification.of(trade);
final ComputationTarget expected = new ComputationTarget(ComputationTargetType.TRADE, trade);
assertExpected(expected, test.resolve(spec, VersionCorrection.LATEST));
}
public void test_resolve_security() {
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
secSource.addSecurity(SECURITY);
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
final ComputationTargetSpecification spec = ComputationTargetSpecification.of(SECURITY);
final ComputationTarget expected = new ComputationTarget(ComputationTargetType.SECURITY, SECURITY);
assertExpected(expected, test.resolve(spec, VersionCorrection.LATEST));
}
public void test_resolve_primitive() {
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
final ComputationTargetSpecification spec = new ComputationTargetSpecification(ComputationTargetType.PRIMITIVE, UniqueId.of("Foo", "Bar"));
final ComputationTarget expected = new ComputationTarget(ComputationTargetType.PRIMITIVE, UniqueId.of("Foo", "Bar"));
assertExpected(expected, test.resolve(spec, VersionCorrection.LATEST));
}
public void test_resolve_currency() {
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
final ComputationTargetSpecification spec = new ComputationTargetSpecification(ComputationTargetType.CURRENCY, UniqueId.of("CurrencyISO", "USD"));
final ComputationTarget expected = new ComputationTarget(ComputationTargetType.CURRENCY, Currency.USD);
assertExpected(expected, test.resolve(spec, VersionCorrection.LATEST));
}
public void test_resolve_unorderedCurrencyPair() {
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
final ComputationTargetSpecification spec = new ComputationTargetSpecification(ComputationTargetType.UNORDERED_CURRENCY_PAIR, UniqueId.of("UnorderedCurrencyPair", "EURGBP"));
final ComputationTarget expected = new ComputationTarget(ComputationTargetType.UNORDERED_CURRENCY_PAIR, UnorderedCurrencyPair.of(Currency.GBP, Currency.EUR));
assertExpected(expected, test.resolve(spec, VersionCorrection.LATEST));
}
public void test_resolve_null() {
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
assertExpected(ComputationTarget.NULL, test.resolve(ComputationTargetSpecification.NULL, VersionCorrection.LATEST));
}
@Test(expectedExceptions = NullPointerException.class)
public void test_resolve_nullSpecification() {
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
test.resolve(null, VersionCorrection.LATEST);
}
public void test_resolve_notFound() {
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
assertNull(test.resolve(new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("Foo", "Bar")), VersionCorrection.LATEST));
}
public void test_simplifyType() {
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
// No changes
assertEquals(test.simplifyType(ComputationTargetType.NULL), ComputationTargetType.NULL);
assertEquals(test.simplifyType(ComputationTargetType.SECURITY), ComputationTargetType.SECURITY);
assertEquals(test.simplifyType(ComputationTargetType.PORTFOLIO_NODE.containing(ComputationTargetType.POSITION).containing(ComputationTargetType.SECURITY)),
ComputationTargetType.PORTFOLIO_NODE.containing(ComputationTargetType.POSITION).containing(ComputationTargetType.SECURITY));
assertEquals(test.simplifyType(ComputationTargetType.TRADE.or(ComputationTargetType.SECURITY)), ComputationTargetType.TRADE.or(ComputationTargetType.SECURITY));
// Changes
assertEquals(test.simplifyType(ComputationTargetType.PORTFOLIO_NODE.containing(ComputationTargetType.POSITION).containing(ComputationTargetType.of(SimpleSecurity.class))),
ComputationTargetType.PORTFOLIO_NODE.containing(ComputationTargetType.POSITION).containing(ComputationTargetType.SECURITY));
assertEquals(test.simplifyType(ComputationTargetType.TRADE.or(ComputationTargetType.of(SimpleSecurity.class))), ComputationTargetType.TRADE.or(ComputationTargetType.SECURITY));
}
public void test_typeProvider_getSimple() {
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
assertEquals(test.getSimpleTypes().size(), 9);
}
public void test_typeProvider_getAdditional() {
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
assertEquals(test.getAdditionalTypes().size(), 0);
}
public void test_typeProvider_getAll() {
final InMemorySecuritySource secSource = new InMemorySecuritySource();
final MockPositionSource posSource = new MockPositionSource();
final DefaultComputationTargetResolver test = new DefaultComputationTargetResolver(secSource, posSource);
assertEquals(test.getAllTypes().size(), test.getAdditionalTypes().size() + test.getSimpleTypes().size());
}
}