public void TestBadCompression() { using (var serialized = Pool.Reserve()) { var set = new PartitionData { Partition = 42, CompressionCodec = CompressionCodec.Gzip, Messages = new[] { new Message { Key = Key, Value = Value } } }; set.Serialize(serialized, SerializationConfig.ByteArraySerializers); // corrupt compressed data serialized[37] = 8; // recompute crc var crc = (int)Crc32.Compute(serialized, 24, serialized.Length - 24); serialized.Position = 20; BigEndianConverter.Write(serialized, crc); // go serialized.Position = 4; Assert.That(() => FetchPartitionResponse.DeserializeMessageSet(serialized, SerializationConfig.ByteArrayDeserializers), Throws.InstanceOf <UncompressException>()); } }
public void TestDeserializeMessageSet(CompressionCodec codec) { using (var serialized = Pool.Reserve()) { var set = new PartitionData { Partition = 42, CompressionCodec = codec, Messages = new[] { new Message { Key = Key, Value = Value }, new Message { Key = Key, Value = Value } } }; set.Serialize(serialized, SerializationConfig.ByteArraySerializers); serialized.Position = 4; var deserialized = FetchPartitionResponse.DeserializeMessageSet(serialized, SerializationConfig.ByteArrayDeserializers); Assert.AreEqual(2, deserialized.Count); foreach (var msg in deserialized) { Assert.AreEqual(0, msg.Offset); CollectionAssert.AreEqual(Key, msg.Message.Key as byte[]); CollectionAssert.AreEqual(Value, msg.Message.Value as byte[]); } } }
public void TestSerializeProduceRequest() { var produce = new ProduceRequest { Timeout = 1223, RequiredAcks = 1, TopicsData = new[] { new TopicData <PartitionData> { TopicName = "barbu", PartitionsData = new[] { new PartitionData { Partition = 22, CompressionCodec = CompressionCodec.None, Messages = new[] { new Message { Value = TheValue } }, } } }, } }; var config = new SerializationConfig(); config.SetSerializersForTopic("barbu", new StringSerializer(), new StringSerializer()); config.SetDeserializersForTopic("barbu", new StringDeserializer(), new StringDeserializer()); using (var serialized = produce.Serialize(new ReusableMemoryStream(null), 321, ClientId, config)) { CheckHeader(Basics.ApiKey.ProduceRequest, 0, 321, TheClientId, serialized); Assert.AreEqual(produce.RequiredAcks, BigEndianConverter.ReadInt16(serialized)); Assert.AreEqual(produce.Timeout, BigEndianConverter.ReadInt32(serialized)); Assert.AreEqual(1, BigEndianConverter.ReadInt32(serialized)); // 1 topic data Assert.AreEqual("barbu", Basics.DeserializeString(serialized)); Assert.AreEqual(1, BigEndianConverter.ReadInt32(serialized)); // 1 partition data Assert.AreEqual(22, BigEndianConverter.ReadInt32(serialized)); var msgs = FetchPartitionResponse.DeserializeMessageSet(serialized, config.GetDeserializersForTopic("barbu")); Assert.AreEqual(1, msgs.Count); //Assert.AreEqual(TheValue, Encoding.UTF8.GetString(msgs[0].Message.Value)); Assert.AreEqual(TheValue, msgs[0].Message.Value as string); } }
public void TestBadCrc() { using (var serialized = new ReusableMemoryStream(null)) { var set = new PartitionData { Partition = 42, CompressionCodec = CompressionCodec.None, Messages = new[] { new Message { Key = Key, Value = Value } } }; set.Serialize(serialized, SerializationConfig.ByteArraySerializers); serialized[20] = 8; // change crc serialized.Position = 4; Assert.That(() => FetchPartitionResponse.DeserializeMessageSet(serialized, SerializationConfig.ByteArrayDeserializers), Throws.InstanceOf <CrcException>()); } }
public void TestUnsupportedMagicByte() { using (var serialized = new ReusableMemoryStream(null)) { var set = new PartitionData { Partition = 42, CompressionCodec = CompressionCodec.None, Messages = new[] { new Message { Key = Key, Value = Value } } }; set.Serialize(serialized, SerializationConfig.ByteArraySerializers); serialized[24] = 8; // set non supported magic byte serialized.Position = 4; Assert.That(() => FetchPartitionResponse.DeserializeMessageSet(serialized, SerializationConfig.ByteArrayDeserializers), Throws.InstanceOf <UnsupportedMagicByteVersion>()); } }