/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.fudgemsg; import static org.testng.AssertJUnit.assertEquals; 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.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.annotations.BeforeMethod; import com.opengamma.core.region.RegionSource; import com.opengamma.master.region.RegionMaster; import com.opengamma.master.region.impl.InMemoryRegionMaster; import com.opengamma.master.region.impl.MasterRegionSource; import com.opengamma.master.region.impl.RegionFileReader; import com.opengamma.util.fudgemsg.OpenGammaFudgeContext; import com.opengamma.util.test.TestGroup; /** * Base class for testing OG-Financial objects to and from Fudge messages. */ public class FinancialTestBase { private static final Logger s_logger = LoggerFactory.getLogger(FinancialTestBase.class); private RegionSource _regionSource; private FudgeContext _fudgeContext; @BeforeMethod(groups = TestGroup.UNIT) public void createFudgeContext() { _fudgeContext = OpenGammaFudgeContext.getInstance(); final RegionMaster regionMaster = new InMemoryRegionMaster(); RegionFileReader.createPopulated(regionMaster); _regionSource = new MasterRegionSource(regionMaster); } protected FudgeContext getFudgeContext() { return _fudgeContext; } protected RegionSource getRegionSource() { return _regionSource; } private FudgeMsg cycleMessage(final FudgeMsg message) { final byte[] data = getFudgeContext().toByteArray(message); s_logger.info("{} bytes", data.length); return getFudgeContext().deserialize(data).getMessage(); } protected <T> T cycleObject(final Class<T> clazz, final T object) { final T newObject = cycleGenericObject(clazz, object); assertEquals(object.getClass(), newObject.getClass()); return newObject; } protected <T> T cycleGenericObject(final Class<T> clazz, final T object) { s_logger.info("object {}", object); final FudgeSerializer fudgeSerializationContext = new FudgeSerializer(getFudgeContext()); final FudgeDeserializer fudgeDeserializationContext = new FudgeDeserializer(getFudgeContext()); final MutableFudgeMsg messageIn = fudgeSerializationContext.newMessage(); fudgeSerializationContext.addToMessageWithClassHeaders(messageIn, "test", null, object, clazz); s_logger.info("message {}", messageIn); final FudgeMsg messageOut = cycleMessage(messageIn); s_logger.info("message {}", messageOut); final T newObject = fudgeDeserializationContext.fieldValueToObject(clazz, messageOut.getByName("test")); assertNotNull(newObject); s_logger.info("object {}", newObject); assertTrue(clazz.isAssignableFrom(newObject.getClass())); return newObject; } }