/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.calcnode; import static org.testng.AssertJUnit.assertEquals; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertSame; import static org.testng.AssertJUnit.assertTrue; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.testng.annotations.Test; import org.threeten.bp.Instant; import com.google.common.collect.Sets; import com.opengamma.engine.ComputationTargetSpecification; import com.opengamma.engine.cache.AbstractIdentifierMap; import com.opengamma.engine.cache.CacheSelectHint; import com.opengamma.engine.cache.IdentifierMap; import com.opengamma.engine.cache.InMemoryIdentifierMap; import com.opengamma.engine.function.EmptyFunctionParameters; import com.opengamma.engine.target.ComputationTargetType; import com.opengamma.engine.value.ValueProperties; import com.opengamma.engine.value.ValuePropertyNames; import com.opengamma.engine.value.ValueSpecification; import com.opengamma.engine.view.ExecutionLogMode; import com.opengamma.id.UniqueId; import com.opengamma.id.VersionCorrection; import com.opengamma.util.test.AbstractFudgeBuilderTestCase; import com.opengamma.util.test.TestGroup; /** * */ @Test(groups = TestGroup.UNIT) public class CalculationJobTest extends AbstractFudgeBuilderTestCase { public void fudgeEncodingNoInputsOutputs() { final IdentifierMap identifierMap = new InMemoryIdentifierMap(); final CalculationJobSpecification spec = new CalculationJobSpecification(UniqueId.of("Test", "ViewCycle"), "config", Instant.now(), 1L); final ComputationTargetSpecification targetSpec = new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("Scheme", "Value")); final List<CalculationJobItem> items = Collections.singletonList(new CalculationJobItem("1", new EmptyFunctionParameters(), targetSpec, Collections.<ValueSpecification>emptySet(), Collections .<ValueSpecification>emptySet(), ExecutionLogMode.INDICATORS)); final CalculationJob inputJob = new CalculationJob(spec, 123L, VersionCorrection.LATEST, null, items, CacheSelectHint.allShared()); AbstractIdentifierMap.convertIdentifiers(identifierMap, inputJob); final CalculationJob outputJob = cycleObject(CalculationJob.class, inputJob); assertNotNull(outputJob); AbstractIdentifierMap.resolveIdentifiers(identifierMap, outputJob); assertEquals(inputJob.getSpecification(), outputJob.getSpecification()); assertEquals(inputJob.getFunctionInitializationIdentifier(), outputJob.getFunctionInitializationIdentifier()); assertNotNull(outputJob.getJobItems()); assertEquals(1, outputJob.getJobItems().size()); final CalculationJobItem outputItem = outputJob.getJobItems().get(0); assertNotNull(outputItem); assertNotNull(outputItem.getInputs()); assertTrue(outputItem.getInputs().length == 0); assertNotNull(outputItem.getOutputs()); assertTrue(outputItem.getOutputs().length == 0); assertEquals(targetSpec, outputItem.getComputationTargetSpecification()); assertEquals("1", outputItem.getFunctionUniqueIdentifier()); } public void fudgeEncodingOneInputOneOutput() { final IdentifierMap identifierMap = new InMemoryIdentifierMap(); final CalculationJobSpecification spec = new CalculationJobSpecification(UniqueId.of("Test", "ViewCycle"), "config", Instant.now(), 1L); final ComputationTargetSpecification targetSpec = new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("Scheme", "Value")); final ValueSpecification outputSpec = ValueSpecification.of("Foo", ComputationTargetType.PRIMITIVE, UniqueId.of("Scheme", "Value2"), ValueProperties.with(ValuePropertyNames.FUNCTION, "mockFunctionId") .get()); final ValueSpecification inputSpec = ValueSpecification.of("Foo", ComputationTargetType.PRIMITIVE, UniqueId.of("Scheme", "Value3"), ValueProperties.with(ValuePropertyNames.FUNCTION, "mockFunctionId") .get()); final List<CalculationJobItem> items = Collections.singletonList(new CalculationJobItem("1", new EmptyFunctionParameters(), targetSpec, Sets.newHashSet(inputSpec), Sets.newHashSet(outputSpec), ExecutionLogMode.INDICATORS)); final CalculationJob inputJob = new CalculationJob(spec, Long.MAX_VALUE, VersionCorrection.LATEST, null, items, CacheSelectHint.allShared()); AbstractIdentifierMap.convertIdentifiers(identifierMap, inputJob); final CalculationJob outputJob = cycleObject(CalculationJob.class, inputJob); assertNotNull(outputJob); AbstractIdentifierMap.resolveIdentifiers(identifierMap, outputJob); assertEquals(inputJob.getSpecification(), outputJob.getSpecification()); assertEquals(inputJob.getFunctionInitializationIdentifier(), outputJob.getFunctionInitializationIdentifier()); assertNotNull(outputJob.getJobItems()); assertEquals(1, outputJob.getJobItems().size()); final CalculationJobItem outputItem = outputJob.getJobItems().get(0); assertNotNull(outputItem); assertEquals(1, outputItem.getInputs().length); assertEquals(inputSpec, outputItem.getInputs()[0]); assertEquals(1, outputItem.getOutputs().length); assertEquals(outputSpec, outputItem.getOutputs()[0]); } public void fudgeEncodingComputationTarget() { final CalculationJobSpecification jobSpec = new CalculationJobSpecification(UniqueId.of("Test", "ViewCycle"), "config", Instant.now(), 1L); final ComputationTargetSpecification target1 = new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("Scheme", "1")); final ComputationTargetSpecification target2 = new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("Scheme", "2")); CalculationJob job = new CalculationJob(jobSpec, Long.MAX_VALUE, VersionCorrection.LATEST, null, Arrays.asList( new CalculationJobItem("Foo", new EmptyFunctionParameters(), target1, Collections.<ValueSpecification>emptySet(), Collections.<ValueSpecification>emptySet(), ExecutionLogMode.INDICATORS), new CalculationJobItem("Bar", new EmptyFunctionParameters(), target1, Collections.<ValueSpecification>emptySet(), Collections.<ValueSpecification>emptySet(), ExecutionLogMode.INDICATORS), new CalculationJobItem("Cow", new EmptyFunctionParameters(), target2, Collections.<ValueSpecification>emptySet(), Collections.<ValueSpecification>emptySet(), ExecutionLogMode.INDICATORS)), CacheSelectHint.allShared()); AbstractIdentifierMap.convertIdentifiers(new InMemoryIdentifierMap(), job); job = cycleObject(CalculationJob.class, job); assertNotNull(job); assertEquals(target1, job.getJobItems().get(0).getComputationTargetSpecification()); assertEquals(target1, job.getJobItems().get(1).getComputationTargetSpecification()); assertSame(job.getJobItems().get(0).getComputationTargetSpecification(), job.getJobItems().get(1).getComputationTargetSpecification()); assertEquals(target2, job.getJobItems().get(2).getComputationTargetSpecification()); } public void fudgeEncodingParameterizedFunction() { final CalculationJobSpecification jobSpec = new CalculationJobSpecification(UniqueId.of("Test", "ViewCycle"), "config", Instant.now(), 1L); final ComputationTargetSpecification target1 = new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("Scheme", "1")); final ComputationTargetSpecification target2 = new ComputationTargetSpecification(ComputationTargetType.SECURITY, UniqueId.of("Scheme", "2")); CalculationJob job = new CalculationJob(jobSpec, Long.MAX_VALUE, VersionCorrection.LATEST, null, Arrays.asList( new CalculationJobItem("Foo", new EmptyFunctionParameters(), target1, Collections.<ValueSpecification>emptySet(), Collections.<ValueSpecification>emptySet(), ExecutionLogMode.INDICATORS), new CalculationJobItem("Foo", new EmptyFunctionParameters(), target1, Collections.<ValueSpecification>emptySet(), Collections.<ValueSpecification>emptySet(), ExecutionLogMode.INDICATORS), new CalculationJobItem("Bar", new EmptyFunctionParameters(), target2, Collections.<ValueSpecification>emptySet(), Collections.<ValueSpecification>emptySet(), ExecutionLogMode.INDICATORS)), CacheSelectHint.allShared()); AbstractIdentifierMap.convertIdentifiers(new InMemoryIdentifierMap(), job); job = cycleObject(CalculationJob.class, job); assertNotNull(job); assertEquals("Foo", job.getJobItems().get(0).getFunctionUniqueIdentifier()); assertEquals("Foo", job.getJobItems().get(1).getFunctionUniqueIdentifier()); assertSame(job.getJobItems().get(0).getFunctionUniqueIdentifier(), job.getJobItems().get(1).getFunctionUniqueIdentifier()); assertEquals("Bar", job.getJobItems().get(2).getFunctionUniqueIdentifier()); } }