From 39bf75fba0c5eae6eaf0544393ce71daa2e17f9b Mon Sep 17 00:00:00 2001 From: Adam Kotwasinski Date: Sat, 28 Nov 2020 13:58:03 -0800 Subject: [PATCH] kafka: add missing unit tests (#14195) Signed-off-by: Adam Kotwasinski --- .../filters/network/kafka/serialization_test.cc | 13 +++++++++++++ .../filters/network/kafka/serialization_utilities.h | 13 +++++++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/test/extensions/filters/network/kafka/serialization_test.cc b/test/extensions/filters/network/kafka/serialization_test.cc index 2cc656926d64..c7e28d14ca87 100644 --- a/test/extensions/filters/network/kafka/serialization_test.cc +++ b/test/extensions/filters/network/kafka/serialization_test.cc @@ -101,10 +101,12 @@ TEST(VarUInt32Deserializer, ShouldDeserializeEdgeValues) { Buffer::OwnedImpl buffer; // when + const uint32_t expected_size = encoder.computeCompactSize(values[i]); const uint32_t written = encoder.encodeCompact(values[i], buffer); // then ASSERT_EQ(written, i + 1); + ASSERT_EQ(written, expected_size); absl::string_view data = {getRawData(buffer), 1024}; // All bits in lower bytes need to be set. for (auto j = 0; j + 1 < i; ++j) { @@ -434,6 +436,17 @@ TEST(NullableCompactArrayDeserializer, ShouldConsumeNullArray) { NullableCompactArrayDeserializer>(value); } +TEST(NullableCompactArrayDeserializer, ShouldConsumeCorrectAmountOfDataForLargeInput) { + std::vector raw; + raw.reserve(4096); + for (int32_t i = 0; i < 4096; ++i) { + raw.push_back(i); + } + const NullableArray value{raw}; + serializeCompactThenDeserializeAndCheckEquality< + NullableCompactArrayDeserializer>(value); +} + // Tagged fields. TEST(TaggedFieldDeserializer, ShouldConsumeCorrectAmountOfData) { diff --git a/test/extensions/filters/network/kafka/serialization_utilities.h b/test/extensions/filters/network/kafka/serialization_utilities.h index e9fb2a4491b8..5c252ab4a870 100644 --- a/test/extensions/filters/network/kafka/serialization_utilities.h +++ b/test/extensions/filters/network/kafka/serialization_utilities.h @@ -114,12 +114,16 @@ void serializeCompactThenDeserializeAndCheckEqualityInOneGo(AT expected) { Buffer::OwnedImpl buffer; EncodingContext encoder{-1}; + const uint32_t expected_written_size = encoder.computeCompactSize(expected); const uint32_t written = encoder.encodeCompact(expected, buffer); + ASSERT_EQ(written, expected_written_size); // Insert garbage after serialized payload. const uint32_t garbage_size = encoder.encode(Bytes(10000), buffer); + const char* raw_buffer_ptr = + reinterpret_cast(buffer.linearize(written + garbage_size)); // Tell parser that there is more data, it should never consume more than written. - const absl::string_view orig_data = {getRawData(buffer), written + garbage_size}; + const absl::string_view orig_data = {raw_buffer_ptr, written + garbage_size}; absl::string_view data = orig_data; // when @@ -147,11 +151,16 @@ void serializeCompactThenDeserializeAndCheckEqualityWithChunks(AT expected) { Buffer::OwnedImpl buffer; EncodingContext encoder{-1}; + const uint32_t expected_written_size = encoder.computeCompactSize(expected); const uint32_t written = encoder.encodeCompact(expected, buffer); + ASSERT_EQ(written, expected_written_size); // Insert garbage after serialized payload. const uint32_t garbage_size = encoder.encode(Bytes(10000), buffer); - const absl::string_view orig_data = {getRawData(buffer), written + garbage_size}; + const char* raw_buffer_ptr = + reinterpret_cast(buffer.linearize(written + garbage_size)); + // Tell parser that there is more data, it should never consume more than written. + const absl::string_view orig_data = {raw_buffer_ptr, written + garbage_size}; // when absl::string_view data = orig_data;