package com.tinkerpop.rexster.protocol.msg; import com.tinkerpop.rexster.client.RexProException; import com.tinkerpop.rexster.protocol.serializer.msgpack.templates.MetaTemplate; 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.UUID; /** * @author Stephen Mallette (http://stephen.genoprime.com) */ public class ErrorResponseMessageTest { @Test public void testMetaValidation() { ErrorResponseMessage msg = new ErrorResponseMessage(); msg.setRequestAsUUID(UUID.randomUUID()); msg.setSessionAsUUID(UUID.randomUUID()); msg.metaSetFlag(ErrorResponseMessage.INVALID_SESSION_ERROR); msg.ErrorMessage = "brokenness"; //these should work try { msg.metaSetFlag(ErrorResponseMessage.INVALID_MESSAGE_ERROR); msg.validateMetaData(); msg.metaSetFlag(ErrorResponseMessage.INVALID_SESSION_ERROR); msg.validateMetaData(); msg.metaSetFlag(ErrorResponseMessage.SCRIPT_FAILURE_ERROR); msg.validateMetaData(); msg.metaSetFlag(ErrorResponseMessage.AUTH_FAILURE_ERROR); msg.validateMetaData(); } catch (RexProException ex) { Assert.fail(); } //these should fail try { msg.Meta.put(ErrorResponseMessage.FLAG_META_KEY, "session"); msg.validateMetaData(); } catch (RexProException ex) { //exception is expected } try { msg.Meta.put(ErrorResponseMessage.FLAG_META_KEY, false); msg.validateMetaData(); } catch (RexProException ex) { //exception is expected } try { msg.Meta.put(ErrorResponseMessage.FLAG_META_KEY, 3.14f); msg.validateMetaData(); } catch (RexProException ex) { //exception is expected } } @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()); ErrorResponseMessage outMsg = new ErrorResponseMessage(); outMsg.setRequestAsUUID(UUID.randomUUID()); outMsg.setSessionAsUUID(UUID.randomUUID()); outMsg.metaSetFlag(ErrorResponseMessage.INVALID_SESSION_ERROR); outMsg.ErrorMessage = "brokenness"; 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); ErrorResponseMessage inMsg; try { inMsg = unpacker.read(ErrorResponseMessage.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(outMsg.ErrorMessage, inMsg.ErrorMessage); } catch (IOException ex) { Assert.fail(); } } }