/**
* 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.joda.beans.Bean;
import org.joda.beans.impl.flexi.FlexiBean;
import org.testng.annotations.Test;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.util.test.TestGroup;
/**
* Test the JodaBeansProducerConsumer pairs.
*/
@Test(groups = TestGroup.UNIT)
public class JodaBeansProvidersTest {
@SuppressWarnings({"rawtypes", "unchecked" })
private void testBeans(final MessageBodyWriter producer, final MessageBodyReader consumer) {
FlexiBean sub = new FlexiBean();
sub.put("child", "name");
FlexiBean bean = new FlexiBean();
bean.put("foo", "bar");
bean.put("number", 42);
bean.put("sub", sub);
// from bean
assertTrue(producer.isWriteable(bean.getClass(), bean.getClass(), null, null));
assertEquals(producer.getSize(bean, bean.getClass(), bean.getClass(), null, null), -1);
final ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
producer.writeTo(bean, bean.getClass(), bean.getClass(), null, null, null, baos);
} catch (IOException ex) {
throw new OpenGammaRuntimeException(ex.getMessage(), ex);
}
final byte[] data = baos.toByteArray();
// to bean
assertTrue(consumer.isReadable(bean.getClass(), bean.getClass(), null, null));
final ByteArrayInputStream bais = new ByteArrayInputStream(data);
final Bean input;
try {
input = (Bean) consumer.readFrom(Bean.class, Bean.class, null, null, null, bais);
} catch (IOException ex) {
throw new OpenGammaRuntimeException(ex.getMessage(), ex);
}
assertNotNull(input);
assertEquals(bean, input);
}
public void testBinary() {
JodaBeanBinaryProducerConsumer pc = new JodaBeanBinaryProducerConsumer();
testBeans(pc, pc);
}
public void testXml() {
JodaBeanXmlProducerConsumer pc = new JodaBeanXmlProducerConsumer();
testBeans(pc, pc);
}
public void testJson() {
JodaBeanJsonProducerConsumer pc = new JodaBeanJsonProducerConsumer();
testBeans(pc, pc);
}
}