package com.tinkerpop.rexster.protocol.msg;
import com.tinkerpop.rexster.protocol.serializer.msgpack.templates.MetaTemplate;
import com.tinkerpop.rexster.protocol.serializer.msgpack.templates.ResultsConverter;
import com.tinkerpop.rexster.protocol.serializer.msgpack.templates.ResultsTemplate;
import junit.framework.Assert;
import org.junit.Test;
import org.msgpack.MessagePack;
import org.msgpack.packer.Packer;
import org.msgpack.unpacker.Unpacker;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.UUID;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public class ScriptResponseMessageTest {
final static MessagePack msgpack = new MessagePack();
@Test
public void serializeString() throws Exception {
byte[] bytes = ScriptResponseMessage.convertResultToBytes("xyz");
Unpacker unpacker = msgpack.createUnpacker(new ByteArrayInputStream(bytes));
Object dst = ResultsConverter.deserializeObject(unpacker.readValue());
Assert.assertEquals("xyz", dst);
}
@Test
public void serializeInt() throws Exception {
byte[] bytes = ScriptResponseMessage.convertResultToBytes(31);
Unpacker unpacker = msgpack.createUnpacker(new ByteArrayInputStream(bytes));
Object dst = ResultsConverter.deserializeObject(unpacker.readValue());
Assert.assertEquals(31L, dst);
}
@Test
public void serializeFloat() throws Exception {
byte[] bytes = ScriptResponseMessage.convertResultToBytes(1.2);
Unpacker unpacker = msgpack.createUnpacker(new ByteArrayInputStream(bytes));
Object dst = ResultsConverter.deserializeObject(unpacker.readValue());
Assert.assertEquals(1.2, dst);
}
@Test
public void serializeBool() throws Exception {
byte[] bytes = ScriptResponseMessage.convertResultToBytes(true);
Unpacker unpacker = msgpack.createUnpacker(new ByteArrayInputStream(bytes));
Object dst = ResultsConverter.deserializeObject(unpacker.readValue());
Assert.assertEquals(true, dst);
}
@Test
public void serializeArray() throws Exception {
ArrayList<Object> srcArray = new ArrayList<Object>();
srcArray.add(true);
srcArray.add("abc");
srcArray.add(1L);
byte[] bytes = ScriptResponseMessage.convertResultToBytes(srcArray);
Unpacker unpacker = msgpack.createUnpacker(new ByteArrayInputStream(bytes));
Object dst = ResultsConverter.deserializeObject(unpacker.readValue());
Assert.assertEquals(srcArray, dst);
}
@Test
public void serializeMap() throws Exception {
HashMap<Object, Object> srcMap = new HashMap<Object, Object>();
srcMap.put("city", "LA");
srcMap.put(1L, 2L);
ArrayList<Object> arr = new ArrayList<Object>();
arr.add(1L);
arr.add("str");
arr.add(true);
srcMap.put(1.2d, arr);
byte[] bytes = ScriptResponseMessage.convertResultToBytes(srcMap);
Unpacker unpacker = msgpack.createUnpacker(new ByteArrayInputStream(bytes));
Object dst = ResultsConverter.deserializeObject(unpacker.readValue());
for (Object key : srcMap.keySet()) {
Assert.assertEquals(srcMap.get(key), ((HashMap<Object, Object>) dst).get(key));
}
}
@Test
public void testSerialization() {
MessagePack msgpack = new MessagePack();
msgpack.register(RexProMessageMeta.class, MetaTemplate.getInstance());
msgpack.register(RexProBindings.class, RexProBindings.SerializationTemplate.getInstance());
msgpack.register(RexProScriptResult.class, ResultsTemplate.getInstance());
ScriptResponseMessage outMsg = new ScriptResponseMessage();
outMsg.setRequestAsUUID(UUID.randomUUID());
outMsg.setSessionAsUUID(UUID.randomUUID());
outMsg.Results.set(5);
outMsg.Bindings.put("something", "or other");
final ByteArrayOutputStream outStream = new ByteArrayOutputStream();
final Packer packer = msgpack.createPacker(outStream);
try {
packer.write(outMsg);
packer.close();
} catch (IOException ex) {
Assert.fail();
}
byte[] bytes = outStream.toByteArray();
final ByteArrayInputStream in = new ByteArrayInputStream(bytes);
final Unpacker unpacker = msgpack.createUnpacker(in);
ScriptResponseMessage inMsg;
try {
inMsg = unpacker.read(ScriptResponseMessage.class);
Assert.assertEquals(outMsg.Meta, inMsg.Meta);
Assert.assertEquals(UUID.nameUUIDFromBytes(outMsg.Request), UUID.nameUUIDFromBytes(inMsg.Request));
Assert.assertEquals(UUID.nameUUIDFromBytes(outMsg.Session), UUID.nameUUIDFromBytes(inMsg.Session));
Assert.assertEquals(inMsg.Results.get(), 5L);
Assert.assertEquals(inMsg.Bindings.get("something"), "or other");
} catch (IOException ex) {
Assert.fail();
}
}
}