| 116 | } |
| 117 | |
| 118 | TEST_P(TestMessage, SerializeTo) { |
| 119 | const int64_t body_length = 64; |
| 120 | |
| 121 | flatbuffers::FlatBufferBuilder fbb; |
| 122 | fbb.Finish(flatbuf::CreateMessage(fbb, fb_version_, |
| 123 | flatbuf::MessageHeader::MessageHeader_RecordBatch, |
| 124 | 0 /* header */, body_length)); |
| 125 | |
| 126 | std::shared_ptr<Buffer> metadata; |
| 127 | ASSERT_OK_AND_ASSIGN(metadata, internal::WriteFlatbufferBuilder(fbb)); |
| 128 | |
| 129 | std::string body = "abcdef"; |
| 130 | |
| 131 | ASSERT_OK_AND_ASSIGN(std::unique_ptr<Message> message, |
| 132 | Message::Open(metadata, std::make_shared<Buffer>(body))); |
| 133 | |
| 134 | auto CheckWithAlignment = [&](int32_t alignment) { |
| 135 | options_.alignment = alignment; |
| 136 | const int32_t prefix_size = 8; |
| 137 | int64_t output_length = 0; |
| 138 | ASSERT_OK_AND_ASSIGN(auto stream, io::BufferOutputStream::Create(1 << 10)); |
| 139 | ASSERT_OK(message->SerializeTo(stream.get(), options_, &output_length)); |
| 140 | ASSERT_EQ(bit_util::RoundUp(metadata->size() + prefix_size, alignment) + body_length, |
| 141 | output_length); |
| 142 | ASSERT_OK_AND_EQ(output_length, stream->Tell()); |
| 143 | ASSERT_OK_AND_ASSIGN(auto buffer, stream->Finish()); |
| 144 | // check whether length is written in little endian |
| 145 | auto buffer_ptr = buffer.get()->data(); |
| 146 | ASSERT_EQ(output_length - body_length - prefix_size, |
| 147 | bit_util::FromLittleEndian(*(uint32_t*)(buffer_ptr + 4))); |
| 148 | }; |
| 149 | |
| 150 | CheckWithAlignment(8); |
| 151 | CheckWithAlignment(64); |
| 152 | } |
| 153 | |
| 154 | TEST_P(TestMessage, SerializeCustomMetadata) { |
| 155 | std::vector<std::shared_ptr<KeyValueMetadata>> cases = { |
nothing calls this directly
no test coverage detected