Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cc691a25 authored by Myles Watson's avatar Myles Watson Committed by Gerrit Code Review
Browse files

Merge "Packet: Add tests for RawBuilder, fix max"

parents afe7cebb c24538d7
Loading
Loading
Loading
Loading
+30 −0
Original line number Diff line number Diff line
@@ -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:
+2 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#include "packet/raw_builder.h"

#include <algorithm>
#include <utility>

#include "os/log.h"

@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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_;
+43 −0
Original line number Diff line number Diff line
@@ -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