| 226 | } |
| 227 | |
| 228 | void CheckDecoding(const std::shared_ptr<Buffer>& buffer, int64_t chunk_size, |
| 229 | const SampleMessage& sample_message) { |
| 230 | std::unique_ptr<Message> message; |
| 231 | auto listener = std::make_shared<AssignMessageDecoderListener>(&message); |
| 232 | MessageDecoder decoder(listener); |
| 233 | int64_t offset = 0; |
| 234 | ASSERT_EQ(decoder.buffered_size(), 0); |
| 235 | while (offset < buffer->size()) { |
| 236 | // No message was decoded yet |
| 237 | ASSERT_EQ(message, nullptr); |
| 238 | // The decoder is expecting more data, but not more than remaining in our buffer |
| 239 | ASSERT_GT(decoder.next_required_size(), 0); |
| 240 | ASSERT_LE(decoder.next_required_size(), buffer->size() - offset); |
| 241 | const auto to_consume = std::min(chunk_size, buffer->size() - offset); |
| 242 | ASSERT_OK(decoder.Consume(SliceBuffer(buffer, offset, to_consume))); |
| 243 | offset += to_consume; |
| 244 | if (offset >= 4 && offset < buffer->size()) { |
| 245 | // We went past the initial 4-byte continuation |
| 246 | ASSERT_NE(decoder.state(), MessageDecoder::INITIAL); |
| 247 | if (offset >= buffer->size() - sample_message.body_bytes->size()) { |
| 248 | // The offset points in the body |
| 249 | ASSERT_EQ(decoder.state(), MessageDecoder::BODY); |
| 250 | } |
| 251 | } |
| 252 | } |
| 253 | ASSERT_EQ(decoder.buffered_size(), 0); |
| 254 | ASSERT_EQ(decoder.state(), MessageDecoder::INITIAL); |
| 255 | ASSERT_NE(message, nullptr); |
| 256 | CheckSampleMessage(*message, sample_message); |
| 257 | } |
| 258 | |
| 259 | void TestDecoding(const SampleMessage& sample_message) { |
| 260 | ASSERT_OK_AND_ASSIGN(auto buffer, ConcatenateMessage(sample_message)); |
nothing calls this directly
no test coverage detected