MCPcopy Create free account
hub / github.com/apache/arrow / CheckDecoding

Method CheckDecoding

cpp/src/arrow/ipc/message_internal_test.cc:228–257  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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));

Callers

nothing calls this directly

Calls 6

SliceBufferFunction · 0.85
buffered_sizeMethod · 0.45
sizeMethod · 0.45
next_required_sizeMethod · 0.45
ConsumeMethod · 0.45
stateMethod · 0.45

Tested by

no test coverage detected