/** * 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.assertFalse; import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertTrue; 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 org.threeten.bp.Instant; import com.google.common.collect.Lists; import com.opengamma.engine.cache.AbstractIdentifierMap; import com.opengamma.engine.cache.IdentifierMap; import com.opengamma.engine.cache.InMemoryIdentifierMap; import com.opengamma.engine.calcnode.CalculationJobResult; import com.opengamma.engine.calcnode.CalculationJobResultItem; import com.opengamma.engine.calcnode.CalculationJobResultItemBuilder; import com.opengamma.engine.calcnode.CalculationJobSpecification; import com.opengamma.engine.calcnode.InvocationResult; import com.opengamma.engine.calcnode.MutableExecutionLog; import com.opengamma.engine.view.ExecutionLogMode; import com.opengamma.id.UniqueId; import com.opengamma.util.fudgemsg.OpenGammaFudgeContext; import com.opengamma.util.log.LogLevel; import com.opengamma.util.test.TestGroup; /** * */ @Test(groups = TestGroup.UNIT) public class CalculationJobResultTest { private static final FudgeContext s_fudgeContext = OpenGammaFudgeContext.getInstance(); public void fudge() { IdentifierMap identifierMap = new InMemoryIdentifierMap (); CalculationJobSpecification spec = new CalculationJobSpecification(UniqueId.of("Test", "ViewCycle"), "config", Instant.now(), 1L); CalculationJobResultItem item1 = CalculationJobResultItem.success(); MutableExecutionLog executionLog = new MutableExecutionLog(ExecutionLogMode.INDICATORS); CalculationJobResultItem item2 = CalculationJobResultItemBuilder.of(executionLog).withException(new RuntimeException("failure!")).toResultItem(); CalculationJobResult result = new CalculationJobResult(spec, 500, Lists.newArrayList(item1, item2), "localhost"); AbstractIdentifierMap.convertIdentifiers(identifierMap, result); FudgeSerializer serializationContext = new FudgeSerializer(s_fudgeContext); MutableFudgeMsg inputMsg = serializationContext.objectToFudgeMsg(result); FudgeMsg outputMsg = s_fudgeContext.deserialize(s_fudgeContext.toByteArray(inputMsg)).getMessage(); FudgeDeserializer deserializationContext = new FudgeDeserializer(s_fudgeContext); CalculationJobResult outputJob = deserializationContext.fudgeMsgToObject(CalculationJobResult.class, outputMsg); assertNotNull(outputJob); AbstractIdentifierMap.resolveIdentifiers(identifierMap, outputJob); assertEquals(spec, outputJob.getSpecification()); assertEquals(500, outputJob.getDuration()); assertEquals("localhost", outputJob.getComputeNodeId()); assertNotNull(outputJob.getResultItems()); assertEquals(2, outputJob.getResultItems().size()); CalculationJobResultItem outputItem1 = outputJob.getResultItems().get(0); assertNotNull(outputItem1); assertEquals(InvocationResult.SUCCESS, outputItem1.getResult()); assertFalse(outputItem1.getExecutionLog().getLogLevels().contains(LogLevel.ERROR)); assertTrue(outputItem1.getMissingInputs().isEmpty()); CalculationJobResultItem outputItem2 = outputJob.getResultItems().get(1); assertNotNull(outputItem2); assertEquals(InvocationResult.FUNCTION_THREW_EXCEPTION, outputItem2.getResult()); assertEquals("java.lang.RuntimeException", outputItem2.getExecutionLog().getExceptionClass()); assertEquals("failure!", outputItem2.getExecutionLog().getExceptionMessage()); assertNotNull(outputItem2.getExecutionLog().getExceptionStackTrace()); assertTrue(outputItem2.getMissingInputs().isEmpty()); } }