/** * 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.assertFalse; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; import java.math.BigDecimal; import org.testng.annotations.Test; import org.threeten.bp.LocalDate; import org.threeten.bp.OffsetTime; import com.opengamma.core.position.Position; import com.opengamma.core.position.impl.SimpleCounterparty; 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.impl.SimpleSecurity; import com.opengamma.engine.target.ComputationTargetType; import com.opengamma.id.ExternalId; import com.opengamma.id.UniqueId; import com.opengamma.util.money.Currency; import com.opengamma.util.test.TestGroup; /** * Test ComputationTarget. */ @Test(groups = TestGroup.UNIT) public class ComputationTargetTest { private final SimplePortfolioNode NODE = new SimplePortfolioNode(UniqueId.of("A", "B"), "Name"); private final Position POSITION = new SimplePosition(UniqueId.of("Test", "1"), new BigDecimal(1), ExternalId.of("Foo", "Sec").toBundle()); private final Security SECURITY = new SimpleSecurity(UniqueId.of("Test", "SEC"), ExternalId.of("Foo", "Sec").toBundle(), "EQUITY", "Test Security"); private final SimpleTrade TRADE = new SimpleTrade(SECURITY, BigDecimal.ONE, new SimpleCounterparty(ExternalId.of("Cpty", "Foo")), LocalDate.now(), OffsetTime.now()); public ComputationTargetTest() { TRADE.setUniqueId(UniqueId.of("Test", "Trade")); } public void testConstructor_null() { final ComputationTarget target = new ComputationTarget(ComputationTargetType.NULL, null); assertNull(target.getContextSpecification()); assertEquals(target.toSpecification(), ComputationTargetSpecification.NULL); } public void testConstructor_single() { final ComputationTarget target = new ComputationTarget(ComputationTargetType.PORTFOLIO_NODE, NODE); assertNull(target.getContextSpecification()); assertEquals(target.toSpecification(), ComputationTargetSpecification.of(NODE)); } public void testConstructor_nested_1() { final ComputationTargetSpecification targetSpec = ComputationTargetSpecification.of(NODE).containing(ComputationTargetType.POSITION, POSITION.getUniqueId()); final ComputationTarget target = new ComputationTarget(targetSpec, POSITION); assertEquals(target.toSpecification(), ComputationTargetSpecification.of(NODE).containing(ComputationTargetType.POSITION, POSITION.getUniqueId())); assertEquals(target.getContextSpecification(), ComputationTargetSpecification.of(NODE)); assertEquals(target.getLeafSpecification(), ComputationTargetSpecification.of(POSITION)); } public void testConstructor_nested_2() { final ComputationTargetSpecification targetSpec = ComputationTargetSpecification.of(NODE).containing(ComputationTargetType.POSITION, POSITION.getUniqueId()) .containing(ComputationTargetType.SECURITY, SECURITY.getUniqueId()); final ComputationTarget target = new ComputationTarget(targetSpec, SECURITY); assertEquals(target.toSpecification(), targetSpec); assertEquals(target.getContextSpecification(), ComputationTargetSpecification.of(NODE).containing(ComputationTargetType.POSITION, POSITION.getUniqueId())); assertEquals(target.getLeafSpecification(), ComputationTargetSpecification.of(SECURITY)); } public void testGetPortfolioNode_ok() { final ComputationTarget target = new ComputationTarget(ComputationTargetType.PORTFOLIO_NODE, NODE); assertEquals(target.getPortfolioNode(), NODE); } @Test(expectedExceptions = {IllegalStateException.class }) public void testGetPortfolioNode_fail() { final ComputationTarget target = new ComputationTarget(ComputationTargetType.NULL, null); target.getPortfolioNode(); } public void testGetPosition_ok() { final ComputationTarget target = new ComputationTarget(ComputationTargetType.POSITION, POSITION); assertEquals(target.getPosition(), POSITION); } @Test(expectedExceptions = {IllegalStateException.class }) public void testGetPosition_fail() { final ComputationTarget target = new ComputationTarget(ComputationTargetType.NULL, null); target.getPosition(); } public void testGetTrade_ok() { final ComputationTarget target = new ComputationTarget(ComputationTargetType.TRADE, TRADE); target.getTrade(); } @Test(expectedExceptions = {IllegalStateException.class }) public void testGetTrade_fail() { final ComputationTarget target = new ComputationTarget(ComputationTargetType.NULL, null); target.getTrade(); } public void testGetPositionOrTrade_ok() { ComputationTarget target = new ComputationTarget(ComputationTargetType.TRADE, TRADE); assertEquals(target.getPositionOrTrade(), TRADE); target = new ComputationTarget(ComputationTargetType.POSITION, POSITION); assertEquals(target.getPositionOrTrade(), POSITION); } @Test(expectedExceptions = {IllegalStateException.class }) public void testGetPositionOrTrade_fail() { final ComputationTarget target = new ComputationTarget(ComputationTargetType.NULL, null); target.getPositionOrTrade(); } public void testGetSecurity_ok() { final ComputationTarget target = new ComputationTarget(ComputationTargetType.SECURITY, SECURITY); target.getSecurity(); } @Test(expectedExceptions = {IllegalStateException.class }) public void testGetSecurity_fail() { final ComputationTarget target = new ComputationTarget(ComputationTargetType.NULL, null); target.getSecurity(); } public void testGetName() { ComputationTarget target = new ComputationTarget(ComputationTargetType.PORTFOLIO_NODE, NODE); assertEquals(target.getName(), "Name"); target = new ComputationTarget(ComputationTargetType.POSITION, POSITION); assertEquals(target.getName(), "1 x Foo~Sec"); target = new ComputationTarget(ComputationTargetType.TRADE, TRADE); assertEquals(target.getName(), "Test Security"); target = new ComputationTarget(ComputationTargetType.SECURITY, SECURITY); assertEquals(target.getName(), "Test Security"); target = new ComputationTarget(ComputationTargetType.PRIMITIVE, UniqueId.of("Currency", "GBP")); assertEquals(target.getName(), "Currency~GBP"); target = new ComputationTarget(ComputationTargetType.NULL, null); assertEquals(target.getName(), null); } public void testEquals() { final ComputationTarget pos1 = new ComputationTarget(ComputationTargetType.POSITION, POSITION); final ComputationTarget pos2 = new ComputationTarget(ComputationTargetType.POSITION, POSITION); final ComputationTarget prim1 = new ComputationTarget(ComputationTargetType.CURRENCY, Currency.USD); final ComputationTarget prim2 = new ComputationTarget(ComputationTargetType.CURRENCY, Currency.GBP); final ComputationTarget prtPos = new ComputationTarget(ComputationTargetSpecification.of(NODE).containing(ComputationTargetType.POSITION, POSITION.getUniqueId()), POSITION); final ComputationTarget nil = new ComputationTarget(ComputationTargetType.NULL, null); assertTrue(pos1.equals(pos2)); assertTrue(pos2.equals(pos1)); assertFalse(pos1.equals(prim1)); assertFalse(prim1.equals(pos1)); assertTrue(prim1.equals(prim1)); assertFalse(prim1.equals(prim2)); assertFalse(pos1.equals(prtPos)); assertFalse(prtPos.equals(pos1)); assertFalse(pos1.equals(ComputationTarget.NULL)); assertFalse(ComputationTarget.NULL.equals(pos1)); assertFalse(pos1.equals(null)); assertFalse(ComputationTarget.NULL.equals(null)); assertTrue(nil.equals(ComputationTarget.NULL)); assertTrue(ComputationTarget.NULL.equals(nil)); } public void testHashCode() { final ComputationTarget pos1 = new ComputationTarget(ComputationTargetType.POSITION, POSITION); final ComputationTarget pos2 = new ComputationTarget(ComputationTargetType.POSITION, POSITION); assertEquals(pos1.hashCode(), pos2.hashCode()); final ComputationTarget prtPos1 = new ComputationTarget(ComputationTargetSpecification.of(NODE).containing(ComputationTargetType.POSITION, POSITION.getUniqueId()), POSITION); final ComputationTarget prtPos2 = new ComputationTarget(ComputationTargetSpecification.of(NODE).containing(ComputationTargetType.POSITION, POSITION.getUniqueId()), POSITION); assertEquals(prtPos1.hashCode(), prtPos2.hashCode()); final ComputationTarget nil1 = new ComputationTarget(ComputationTargetType.NULL, null); assertEquals(nil1.hashCode(), ComputationTarget.NULL.hashCode()); } public void testGetValue_ok() { final ComputationTarget target = new ComputationTarget(ComputationTargetType.CURRENCY, Currency.GBP); assertEquals(target.getValue(), Currency.GBP); final Currency c = target.getValue(ComputationTargetType.CURRENCY); assertEquals(c, Currency.GBP); } @Test(expectedExceptions = {IllegalStateException.class }) public void testGetValue_fail() { final ComputationTarget target = new ComputationTarget(ComputationTargetType.CURRENCY, Currency.GBP); target.getValue(ComputationTargetType.UNORDERED_CURRENCY_PAIR); } }