/** * Copyright 2017, Xiaomi. * All rights reserved. * Author: xiajun@xiaomi.com */ package com.xiaomi.infra.galaxy.talos.client.serialization; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.nio.ByteBuffer; import org.junit.Before; import org.junit.Test; import com.xiaomi.infra.galaxy.talos.client.compression.ByteBufferBackedInputStream; import com.xiaomi.infra.galaxy.talos.thrift.Message; import com.xiaomi.infra.galaxy.talos.thrift.MessageType; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; public class SerializationV3Test { private ByteArrayOutputStream byteArrayOutputStream; private DataInputStream dataInputStream; private DataOutputStream dataOutputStream; private Message message1; private Message message2; private Message message3; private Message message4; private MessageSerializerV3 messageSerializer; @Before public void setUp() throws Exception { byteArrayOutputStream = new ByteArrayOutputStream(1000000); dataOutputStream = new DataOutputStream(byteArrayOutputStream); messageSerializer = MessageSerializerV3.get(); message1 = new Message(); message1.setCreateTimestamp(System.currentTimeMillis()); message1.setMessageType(MessageType.BINARY); message1.setPartitionKey("P1"); message1.setSequenceNumber("S1"); message1.setMessage("M1".getBytes()); message2 = new Message(); message2.setCreateTimestamp(System.currentTimeMillis()); message2.setMessageType(MessageType.BINARY); message2.setPartitionKey("P2"); message2.setMessage("M2".getBytes()); message3 = new Message(); message3.setCreateTimestamp(System.currentTimeMillis()); message3.setMessageType(MessageType.BINARY); message3.setSequenceNumber("S3"); message3.setMessage("M3".getBytes()); message4 = new Message(); message4.setCreateTimestamp(System.currentTimeMillis()); message4.setMessageType(MessageType.BINARY); message4.setMessage("M4".getBytes()); message4.setSchemaFingerprint("S4"); } @Test public void testSerializerMessage() throws Exception { messageSerializer.serialize(message1, dataOutputStream); System.out.print("buffer size:" + byteArrayOutputStream.size()); messageSerializer.serialize(message2, dataOutputStream); System.out.print("buffer size:" + byteArrayOutputStream.size()); messageSerializer.serialize(message3, dataOutputStream); System.out.print("buffer size:" + byteArrayOutputStream.size()); messageSerializer.serialize(message4, dataOutputStream); System.out.print("buffer size:" + byteArrayOutputStream.size()); dataOutputStream.flush(); System.out.print("buffer size:" + byteArrayOutputStream.size()); dataInputStream = new DataInputStream(new ByteBufferBackedInputStream( ByteBuffer.wrap(byteArrayOutputStream.toByteArray()))); Message verifyMessage1 = MessageSerialization.deserializeMessage(dataInputStream); assertEquals(message1, verifyMessage1); Message verifyMessage2 = MessageSerialization.deserializeMessage(dataInputStream); assertEquals(message2, verifyMessage2); Message verifyMessage3 = MessageSerialization.deserializeMessage(dataInputStream); assertEquals(message3, verifyMessage3); Message verifyMessage4 = MessageSerialization.deserializeMessage(dataInputStream); assertEquals(message4, verifyMessage4); } }