/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.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.mapping.FudgeDeserializer; import org.fudgemsg.mapping.FudgeSerializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.opengamma.util.fudgemsg.OpenGammaFudgeContext; import com.opengamma.util.fudgemsg.WriteReplaceHelper; /** * Base class for testing OG-Analytics objects to and from Fudge messages. */ public class AnalyticsTestBase { private static final Logger s_logger = LoggerFactory.getLogger(AnalyticsTestBase.class); @Deprecated protected FudgeContext getFudgeContext() { return OpenGammaFudgeContext.getInstance(); } private FudgeMsg cycleMessage(final FudgeMsg message) { final byte[] data = OpenGammaFudgeContext.getInstance().toByteArray(message); s_logger.info("{} bytes", data.length); return OpenGammaFudgeContext.getInstance().deserialize(data).getMessage(); } @SuppressWarnings("unchecked") protected <T> T cycleObject(final Class<T> clazz, final T object) { s_logger.info("object {}", object); final FudgeSerializer fudgeSerializationContext = new FudgeSerializer(getFudgeContext()); final FudgeDeserializer fudgeDeserializationContext = new FudgeDeserializer(getFudgeContext()); FudgeMsg message = fudgeSerializationContext.objectToFudgeMsg(WriteReplaceHelper.writeReplace(object)); assertNotNull(message); s_logger.info("message {}", message); message = cycleMessage(message); s_logger.info("message {}", message); final Object newObject = fudgeDeserializationContext.fudgeMsgToObject(message); assertNotNull(newObject); s_logger.info("object {}", newObject); assertTrue(clazz.isAssignableFrom(newObject.getClass())); assertEquals(object.getClass(), newObject.getClass()); return (T) newObject; } }