Loading system/gd/packet/fragmenting_inserter_unittest.cc +30 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,36 @@ TEST(FragmentingInserterTest, observerTest) { ASSERT_EQ(checksum, observer.GetValue()); } TEST(FragmentingInserterTest, testMtuBoundaries) { constexpr size_t kPacketSize = 1024; auto counts = RawBuilder(); for (size_t i = 0; i < kPacketSize; i++) { counts.AddOctets1(static_cast<uint8_t>(i)); } std::vector<std::unique_ptr<RawBuilder>> fragments_mtu_is_kPacketSize; FragmentingInserter it(kPacketSize, std::back_insert_iterator(fragments_mtu_is_kPacketSize)); counts.Serialize(it); it.finalize(); ASSERT_EQ(1, fragments_mtu_is_kPacketSize.size()); ASSERT_EQ(kPacketSize, fragments_mtu_is_kPacketSize[0]->size()); std::vector<std::unique_ptr<RawBuilder>> fragments_mtu_is_less; FragmentingInserter it_less(kPacketSize - 1, std::back_insert_iterator(fragments_mtu_is_less)); counts.Serialize(it_less); it_less.finalize(); ASSERT_EQ(2, fragments_mtu_is_less.size()); ASSERT_EQ(kPacketSize - 1, fragments_mtu_is_less[0]->size()); ASSERT_EQ(1, fragments_mtu_is_less[1]->size()); std::vector<std::unique_ptr<RawBuilder>> fragments_mtu_is_more; FragmentingInserter it_more(kPacketSize + 1, std::back_insert_iterator(fragments_mtu_is_more)); counts.Serialize(it_more); it_more.finalize(); ASSERT_EQ(1, fragments_mtu_is_more.size()); ASSERT_EQ(kPacketSize, fragments_mtu_is_more[0]->size()); } constexpr size_t kPacketSize = 128; class FragmentingTest : public ::testing::TestWithParam<size_t> { public: Loading system/gd/packet/raw_builder.cc +2 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ #include "packet/raw_builder.h" #include <algorithm> #include <utility> #include "os/log.h" Loading @@ -27,7 +28,7 @@ namespace bluetooth { namespace packet { RawBuilder::RawBuilder(size_t max_bytes) : max_bytes_(max_bytes) {} RawBuilder::RawBuilder(std::vector<uint8_t> vec) : max_bytes_(vec.size()), payload_(vec) {} RawBuilder::RawBuilder(std::vector<uint8_t> vec) : payload_(std::move(vec)) {} bool RawBuilder::AddOctets(size_t octets, const vector<uint8_t>& bytes) { if (payload_.size() + octets > max_bytes_) return false; Loading system/gd/packet/raw_builder.h +1 −1 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ class RawBuilder : public PacketBuilder<true> { // - the new size of the payload is still <= |max_bytes_| bool AddOctets(size_t octets, uint64_t value); size_t max_bytes_{255}; size_t max_bytes_{0xffff}; // Underlying containers for storing the actual packet std::vector<uint8_t> payload_; Loading system/gd/packet/raw_builder_unittest.cc +43 −0 Original line number Diff line number Diff line Loading @@ -65,5 +65,48 @@ TEST(RawBuilderTest, buildCountTest) { ASSERT_EQ(count, packet); } TEST(RawBuilderTest, buildStartingWithVector) { std::vector<uint8_t> count_first(count.begin(), count.begin() + 0x8); std::unique_ptr<RawBuilder> count_builder = std::make_unique<RawBuilder>(count_first); count_builder->AddOctets4(0x0b0a0908); count_builder->AddOctets2(0x0d0c); count_builder->AddOctets1(0x0e); count_builder->AddOctets1(0x0f); count_builder->AddOctets8(0x1716151413121110); std::vector<uint8_t> count_last(count.begin() + 0x18, count.end()); count_builder->AddOctets(count_last); ASSERT_EQ(count.size(), count_builder->size()); std::vector<uint8_t> packet; BitInserter it(packet); count_builder->Serialize(it); ASSERT_EQ(count, packet); } TEST(RawBuilderTest, testMaxBytes) { const size_t kMaxBytes = count.size(); std::unique_ptr<RawBuilder> count_builder = std::make_unique<RawBuilder>(kMaxBytes); ASSERT_TRUE(count_builder->AddOctets(count)); ASSERT_FALSE(count_builder->AddOctets4(0x0b0a0908)); ASSERT_FALSE(count_builder->AddOctets2(0x0d0c)); ASSERT_FALSE(count_builder->AddOctets1(0x0e)); ASSERT_FALSE(count_builder->AddOctets1(0x0f)); ASSERT_FALSE(count_builder->AddOctets8(0x1716151413121110)); std::vector<uint8_t> count_last(count.begin() + 0x18, count.end()); ASSERT_FALSE(count_builder->AddOctets(count_last)); ASSERT_EQ(count.size(), count_builder->size()); std::vector<uint8_t> packet; BitInserter it(packet); count_builder->Serialize(it); ASSERT_EQ(count, packet); } } // namespace packet } // namespace bluetooth Loading
system/gd/packet/fragmenting_inserter_unittest.cc +30 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,36 @@ TEST(FragmentingInserterTest, observerTest) { ASSERT_EQ(checksum, observer.GetValue()); } TEST(FragmentingInserterTest, testMtuBoundaries) { constexpr size_t kPacketSize = 1024; auto counts = RawBuilder(); for (size_t i = 0; i < kPacketSize; i++) { counts.AddOctets1(static_cast<uint8_t>(i)); } std::vector<std::unique_ptr<RawBuilder>> fragments_mtu_is_kPacketSize; FragmentingInserter it(kPacketSize, std::back_insert_iterator(fragments_mtu_is_kPacketSize)); counts.Serialize(it); it.finalize(); ASSERT_EQ(1, fragments_mtu_is_kPacketSize.size()); ASSERT_EQ(kPacketSize, fragments_mtu_is_kPacketSize[0]->size()); std::vector<std::unique_ptr<RawBuilder>> fragments_mtu_is_less; FragmentingInserter it_less(kPacketSize - 1, std::back_insert_iterator(fragments_mtu_is_less)); counts.Serialize(it_less); it_less.finalize(); ASSERT_EQ(2, fragments_mtu_is_less.size()); ASSERT_EQ(kPacketSize - 1, fragments_mtu_is_less[0]->size()); ASSERT_EQ(1, fragments_mtu_is_less[1]->size()); std::vector<std::unique_ptr<RawBuilder>> fragments_mtu_is_more; FragmentingInserter it_more(kPacketSize + 1, std::back_insert_iterator(fragments_mtu_is_more)); counts.Serialize(it_more); it_more.finalize(); ASSERT_EQ(1, fragments_mtu_is_more.size()); ASSERT_EQ(kPacketSize, fragments_mtu_is_more[0]->size()); } constexpr size_t kPacketSize = 128; class FragmentingTest : public ::testing::TestWithParam<size_t> { public: Loading
system/gd/packet/raw_builder.cc +2 −1 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ #include "packet/raw_builder.h" #include <algorithm> #include <utility> #include "os/log.h" Loading @@ -27,7 +28,7 @@ namespace bluetooth { namespace packet { RawBuilder::RawBuilder(size_t max_bytes) : max_bytes_(max_bytes) {} RawBuilder::RawBuilder(std::vector<uint8_t> vec) : max_bytes_(vec.size()), payload_(vec) {} RawBuilder::RawBuilder(std::vector<uint8_t> vec) : payload_(std::move(vec)) {} bool RawBuilder::AddOctets(size_t octets, const vector<uint8_t>& bytes) { if (payload_.size() + octets > max_bytes_) return false; Loading
system/gd/packet/raw_builder.h +1 −1 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ class RawBuilder : public PacketBuilder<true> { // - the new size of the payload is still <= |max_bytes_| bool AddOctets(size_t octets, uint64_t value); size_t max_bytes_{255}; size_t max_bytes_{0xffff}; // Underlying containers for storing the actual packet std::vector<uint8_t> payload_; Loading
system/gd/packet/raw_builder_unittest.cc +43 −0 Original line number Diff line number Diff line Loading @@ -65,5 +65,48 @@ TEST(RawBuilderTest, buildCountTest) { ASSERT_EQ(count, packet); } TEST(RawBuilderTest, buildStartingWithVector) { std::vector<uint8_t> count_first(count.begin(), count.begin() + 0x8); std::unique_ptr<RawBuilder> count_builder = std::make_unique<RawBuilder>(count_first); count_builder->AddOctets4(0x0b0a0908); count_builder->AddOctets2(0x0d0c); count_builder->AddOctets1(0x0e); count_builder->AddOctets1(0x0f); count_builder->AddOctets8(0x1716151413121110); std::vector<uint8_t> count_last(count.begin() + 0x18, count.end()); count_builder->AddOctets(count_last); ASSERT_EQ(count.size(), count_builder->size()); std::vector<uint8_t> packet; BitInserter it(packet); count_builder->Serialize(it); ASSERT_EQ(count, packet); } TEST(RawBuilderTest, testMaxBytes) { const size_t kMaxBytes = count.size(); std::unique_ptr<RawBuilder> count_builder = std::make_unique<RawBuilder>(kMaxBytes); ASSERT_TRUE(count_builder->AddOctets(count)); ASSERT_FALSE(count_builder->AddOctets4(0x0b0a0908)); ASSERT_FALSE(count_builder->AddOctets2(0x0d0c)); ASSERT_FALSE(count_builder->AddOctets1(0x0e)); ASSERT_FALSE(count_builder->AddOctets1(0x0f)); ASSERT_FALSE(count_builder->AddOctets8(0x1716151413121110)); std::vector<uint8_t> count_last(count.begin() + 0x18, count.end()); ASSERT_FALSE(count_builder->AddOctets(count_last)); ASSERT_EQ(count.size(), count_builder->size()); std::vector<uint8_t> packet; BitInserter it(packet); count_builder->Serialize(it); ASSERT_EQ(count, packet); } } // namespace packet } // namespace bluetooth