/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.value; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertFalse; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertTrue; import java.math.BigDecimal; import org.fudgemsg.FudgeContext; import org.fudgemsg.FudgeMsg; import org.fudgemsg.MutableFudgeMsg; import org.fudgemsg.mapping.FudgeDeserializer; import org.fudgemsg.mapping.FudgeSerializer; import org.testng.annotations.Test; import com.opengamma.core.position.Position; import com.opengamma.core.position.impl.SimplePosition; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.engine.target.ComputationTargetType; import com.opengamma.id.ExternalIdBundle; import com.opengamma.id.UniqueId; import com.opengamma.util.fudgemsg.OpenGammaFudgeContext; import com.opengamma.util.test.TestGroup; /** * Test ValueRequirement. */ @Test(groups = TestGroup.UNIT) public class ValueRequirementTest { private static final UniqueId USD = UniqueId.of("currency", "USD"); private static final UniqueId GBP = UniqueId.of("currency", "GBP"); private static final Position POSITION = new SimplePosition(UniqueId.of("A", "B"), new BigDecimal(1), ExternalIdBundle.EMPTY); private static final ComputationTargetSpecification SPEC = ComputationTargetSpecification.of(POSITION); public void test_constructor_Position() { ValueRequirement test = new ValueRequirement("DATA", SPEC); assertEquals("DATA", test.getValueName()); assertEquals(SPEC, test.getTargetReference()); } @Test(expectedExceptions=IllegalArgumentException.class) public void test_constructor_nullValue() { new ValueRequirement(null, SPEC); } @Test(expectedExceptions=IllegalArgumentException.class) public void test_constructor_nullSpec() { new ValueRequirement("DATA", (ComputationTargetSpecification) null); } public void test_constructor_TypeUniqueId_Position() { ValueRequirement test = new ValueRequirement("DATA", ComputationTargetType.POSITION, POSITION.getUniqueId()); assertEquals("DATA", test.getValueName()); assertEquals(SPEC, test.getTargetReference()); } @Test(expectedExceptions=IllegalArgumentException.class) public void test_constructor_TypeUniqueId_nullValue() { new ValueRequirement(null, ComputationTargetType.POSITION, POSITION.getUniqueId()); } @Test(expectedExceptions = AssertionError.class) public void test_constructor_TypeUniqueId_nullType() { new ValueRequirement("DATA", null, POSITION.getUniqueId()); } @Test(expectedExceptions=IllegalArgumentException.class) public void test_constructor_TypeIdentifier_nullValue() { new ValueRequirement(null, ComputationTargetType.PRIMITIVE, USD); } @Test(expectedExceptions = AssertionError.class) public void test_constructor_TypeIdentifier_nullType() { new ValueRequirement("DATA", null, USD); } public void test_constructor_Object_Position() { ValueRequirement test = new ValueRequirement("DATA", ComputationTargetType.POSITION, POSITION.getUniqueId()); assertEquals("DATA", test.getValueName()); assertEquals(SPEC, test.getTargetReference()); } //------------------------------------------------------------------------- public void test_equals() { ValueRequirement req1 = new ValueRequirement(ValueRequirementNames.DISCOUNT_CURVE, ComputationTargetType.PRIMITIVE, USD); assertTrue(req1.equals(req1)); assertFalse(req1.equals(null)); assertFalse(req1.equals("Rubbish")); ValueRequirement req2 = new ValueRequirement(ValueRequirementNames.DISCOUNT_CURVE, ComputationTargetType.PRIMITIVE, USD); assertTrue(req1.equals(req2)); assertTrue(req2.equals(req1)); req2 = new ValueRequirement(ValueRequirementNames.VOLATILITY_SURFACE, ComputationTargetType.PRIMITIVE, USD); assertFalse(req1.equals(req2)); req2 = new ValueRequirement(ValueRequirementNames.DISCOUNT_CURVE, ComputationTargetType.POSITION, POSITION.getUniqueId()); assertFalse(req1.equals(req2)); req2 = new ValueRequirement(ValueRequirementNames.DISCOUNT_CURVE, ComputationTargetType.PRIMITIVE, GBP); assertFalse(req1.equals(req2)); req2 = new ValueRequirement(ValueRequirementNames.DISCOUNT_CURVE, ComputationTargetType.NULL, (UniqueId) null); assertFalse(req1.equals(req2)); } public void test_hashCode() { ValueRequirement req1 = new ValueRequirement(ValueRequirementNames.DISCOUNT_CURVE, ComputationTargetType.PRIMITIVE, USD); ValueRequirement req2 = new ValueRequirement(ValueRequirementNames.DISCOUNT_CURVE, ComputationTargetType.PRIMITIVE, USD); assertTrue(req1.hashCode() == req2.hashCode()); req2 = new ValueRequirement(ValueRequirementNames.VOLATILITY_SURFACE, ComputationTargetType.PRIMITIVE, USD); assertFalse(req1.hashCode() == req2.hashCode()); req2 = new ValueRequirement(ValueRequirementNames.DISCOUNT_CURVE, ComputationTargetType.POSITION, POSITION.getUniqueId()); assertFalse(req1.hashCode() == req2.hashCode()); req2 = new ValueRequirement(ValueRequirementNames.DISCOUNT_CURVE, ComputationTargetType.PRIMITIVE, GBP); assertFalse(req1.hashCode() == req2.hashCode()); req2 = new ValueRequirement(ValueRequirementNames.DISCOUNT_CURVE, ComputationTargetType.NULL, (UniqueId) null); assertFalse(req1.hashCode() == req2.hashCode()); } public void test_toString() { ValueRequirement valueReq = new ValueRequirement(ValueRequirementNames.DISCOUNT_CURVE, ComputationTargetType.PRIMITIVE, USD); String toString = valueReq.toString(); assertNotNull(toString); assertTrue(toString.contains("USD")); assertTrue(toString.contains(ValueRequirementNames.DISCOUNT_CURVE)); assertTrue(toString.contains(ComputationTargetType.PRIMITIVE.toString())); } //------------------------------------------------------------------------- public void test_fudgeEncoding() { FudgeContext context = OpenGammaFudgeContext.getInstance(); FudgeSerializer serializationContext = new FudgeSerializer(context); FudgeDeserializer deserializationContext = new FudgeDeserializer(context); ValueRequirement test = new ValueRequirement("DATA", ComputationTargetType.PRIMITIVE, USD); MutableFudgeMsg inMsg = serializationContext.objectToFudgeMsg(test); assertNotNull(inMsg); assertEquals(3, inMsg.getNumFields()); FudgeMsg outMsg = context.deserialize(context.toByteArray(inMsg)).getMessage(); ValueRequirement decoded = deserializationContext.fudgeMsgToObject(ValueRequirement.class, outMsg); assertEquals(test, decoded); test = new ValueRequirement("DATA", ComputationTargetType.PRIMITIVE, USD, ValueProperties.with(ValuePropertyNames.FUNCTION, "Foo").get()); inMsg = serializationContext.objectToFudgeMsg(test); assertNotNull(inMsg); assertEquals(4, inMsg.getNumFields()); outMsg = context.deserialize(context.toByteArray(inMsg)).getMessage(); decoded = deserializationContext.fudgeMsgToObject(ValueRequirement.class, outMsg); assertEquals(test, decoded); } }