/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.transport.jaxrs;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertTrue;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.ws.rs.ext.MessageBodyReader;
import javax.ws.rs.ext.MessageBodyWriter;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.FudgeMsgEnvelope;
import org.fudgemsg.MutableFudgeMsg;
import org.testng.annotations.Test;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.util.fudgemsg.OpenGammaFudgeContext;
import com.opengamma.util.test.TestGroup;
/**
* Test the FudgeXXXProducer and FudgeXXXConsumer pairs by cycling
* a Fudge message through them.
*/
@Test(groups = TestGroup.UNIT)
public class FudgeProvidersTest {
@SuppressWarnings({"rawtypes", "unchecked" })
private void testBeans(final MessageBodyWriter producer, final MessageBodyReader consumer) {
final MutableFudgeMsg msgIn = OpenGammaFudgeContext.getInstance().newMessage();
msgIn.add("foo", "bar");
msgIn.add("number", 42);
final FudgeMsgEnvelope msgInEnv = new FudgeMsgEnvelope(msgIn, 0, 0);
assertTrue(producer.isWriteable(msgInEnv.getClass(), null, null, null));
final long predictedSize = producer.getSize(msgInEnv, null, null, null, null);
final ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
producer.writeTo(msgInEnv, msgInEnv.getClass(), null, null, null, null, bos);
} catch (IOException e) {
throw new OpenGammaRuntimeException("ioexception", e);
}
final byte[] data = bos.toByteArray();
if (predictedSize != -1) {
assertEquals(predictedSize, data.length);
}
assertTrue(consumer.isReadable(FudgeMsgEnvelope.class, null, null, null));
final ByteArrayInputStream bis = new ByteArrayInputStream(data);
final FudgeMsg msgOut;
try {
final FudgeMsgEnvelope env = (FudgeMsgEnvelope) consumer.readFrom(FudgeMsgEnvelope.class, null, null, null, null, bis);
assertNotNull(env);
msgOut = env.getMessage();
} catch (IOException e) {
throw new OpenGammaRuntimeException("ioexception", e);
}
assertNotNull(msgOut);
assertEquals("bar", msgOut.getFieldValue(String.class, msgOut.getByName("foo")));
assertEquals((Integer) 42, msgOut.getFieldValue(Integer.class, msgOut.getByName("number")));
}
public void testBinary() {
testBeans(new FudgeObjectBinaryProducer(), new FudgeObjectBinaryConsumer());
}
public void testJSON() {
testBeans(new FudgeObjectJSONProducer(), new FudgeObjectJSONConsumer());
}
public void testXML() {
testBeans(new FudgeObjectXMLProducer(), new FudgeObjectXMLConsumer());
}
}