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

Commit 3d9aa0f7 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Implementation of test of fragmentation package" into tm-qpr-dev am: 9225d61f

parents 190c3051 9225d61f
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ GetElementAttributesResponseBuilder::MakeBuilder(size_t mtu) {
  return builder;
}

bool GetElementAttributesResponseBuilder::AddAttributeEntry(
size_t GetElementAttributesResponseBuilder::AddAttributeEntry(
    AttributeEntry entry) {
  CHECK_LT(entries_.size(), size_t(0xFF))
      << __func__ << ": attribute entry overflow";
@@ -101,15 +101,15 @@ bool GetElementAttributesResponseBuilder::AddAttributeEntry(
  }

  if (entry.empty()) {
    return false;
    return 0;
  }

  entries_.insert(entry);
  return true;
  return entry.size();
}

bool GetElementAttributesResponseBuilder::AddAttributeEntry(Attribute attribute,
                                                            std::string value) {
size_t GetElementAttributesResponseBuilder::AddAttributeEntry(
    Attribute attribute, const std::string& value) {
  return AddAttributeEntry(AttributeEntry(attribute, value));
}

@@ -120,7 +120,7 @@ size_t GetElementAttributesResponseBuilder::size() const {
    attr_list_size += attribute_entry.size();
  }

  return VendorPacket::kMinSize() + 1 + attr_list_size;
  return kHeaderSize() + attr_list_size;
}

bool GetElementAttributesResponseBuilder::Serialize(
+13 −5
Original line number Diff line number Diff line
@@ -58,15 +58,21 @@ class GetElementAttributesRequest : public VendorPacket {
  using VendorPacket::VendorPacket;
};

template <class Builder>
class AttributesResponseBuilderTestUser;

class GetElementAttributesResponseBuilder : public VendorPacketBuilder {
 public:
  virtual ~GetElementAttributesResponseBuilder() = default;
  using Builder = std::unique_ptr<GetElementAttributesResponseBuilder>;
  static Builder MakeBuilder(size_t mtu);

  size_t AddAttributeEntry(AttributeEntry entry);
  size_t AddAttributeEntry(Attribute attribute, const std::string& value);

  static std::unique_ptr<GetElementAttributesResponseBuilder> MakeBuilder(
      size_t mtu);
  virtual void clear() { entries_.clear(); }

  bool AddAttributeEntry(AttributeEntry entry);
  bool AddAttributeEntry(Attribute attribute, std::string value);
  static constexpr size_t kHeaderSize() { return VendorPacket::kMinSize() + 1; }

  virtual size_t size() const override;
  virtual bool Serialize(
@@ -75,6 +81,8 @@ class GetElementAttributesResponseBuilder : public VendorPacketBuilder {
 private:
  std::set<AttributeEntry> entries_;
  size_t mtu_;
  friend class AttributesResponseBuilderTestUser<
      GetElementAttributesResponseBuilder>;

  GetElementAttributesResponseBuilder(size_t mtu)
      : VendorPacketBuilder(CType::STABLE, CommandPdu::GET_ELEMENT_ATTRIBUTES,
+8 −9
Original line number Diff line number Diff line
@@ -27,7 +27,8 @@ GetItemAttributesResponseBuilder::MakeBuilder(Status status, size_t mtu) {
  return builder;
}

bool GetItemAttributesResponseBuilder::AddAttributeEntry(AttributeEntry entry) {
size_t GetItemAttributesResponseBuilder::AddAttributeEntry(
    AttributeEntry entry) {
  CHECK(entries_.size() < 0xFF);

  size_t remaining_space = mtu_ - size();
@@ -36,24 +37,22 @@ bool GetItemAttributesResponseBuilder::AddAttributeEntry(AttributeEntry entry) {
  }

  if (entry.empty()) {
    return false;
    return 0;
  }

  entries_.insert(entry);
  return true;
  return entry.size();
}

bool GetItemAttributesResponseBuilder::AddAttributeEntry(Attribute attribute,
                                                         std::string value) {
size_t GetItemAttributesResponseBuilder::AddAttributeEntry(
    Attribute attribute, const std::string& value) {
  return AddAttributeEntry(AttributeEntry(attribute, value));
}

size_t GetItemAttributesResponseBuilder::size() const {
  size_t len = BrowsePacket::kMinSize();
  len += 1;  // Status
  if (status_ != Status::NO_ERROR) return len;
  size_t len = kHeaderSize();
  if (status_ != Status::NO_ERROR) return kErrorHeaderSize();

  len += 1;  // Number of attributes
  for (const auto& entry : entries_) {
    len += entry.size();
  }
+24 −5
Original line number Diff line number Diff line
@@ -23,15 +23,32 @@
namespace bluetooth {
namespace avrcp {

template <class Builder>
class AttributesResponseBuilderTestUser;

class GetItemAttributesResponseBuilder : public BrowsePacketBuilder {
 public:
  virtual ~GetItemAttributesResponseBuilder() = default;
  using Builder = std::unique_ptr<GetItemAttributesResponseBuilder>;
  static Builder MakeBuilder(Status status, size_t mtu);

  size_t AddAttributeEntry(AttributeEntry entry);
  size_t AddAttributeEntry(Attribute, const std::string&);

  virtual void clear() { entries_.clear(); }

  static std::unique_ptr<GetItemAttributesResponseBuilder> MakeBuilder(
      Status status, size_t mtu);
  static constexpr size_t kHeaderSize() {
    size_t len = BrowsePacket::kMinSize();
    len += 1;  // Status
    len += 1;  // Number of attributes
    return len;
  }

  bool AddAttributeEntry(AttributeEntry entry);
  bool AddAttributeEntry(Attribute, std::string);
  static constexpr size_t kErrorHeaderSize() {
    size_t len = BrowsePacket::kMinSize();
    len += 1;  // Status
    return len;
  }

  virtual size_t size() const override;
  virtual bool Serialize(
@@ -41,6 +58,8 @@ class GetItemAttributesResponseBuilder : public BrowsePacketBuilder {
  Status status_;
  size_t mtu_;
  std::set<AttributeEntry> entries_;
  friend class AttributesResponseBuilderTestUser<
      GetItemAttributesResponseBuilder>;

  GetItemAttributesResponseBuilder(Status status, size_t mtu)
      : BrowsePacketBuilder(BrowsePdu::GET_ITEM_ATTRIBUTES),
+42 −1
Original line number Diff line number Diff line
@@ -103,6 +103,47 @@ TEST(GetElementAttributesResponseBuilderTest, builderTest) {
  ASSERT_EQ(test_packet->GetData(), get_elements_attributes_response_full);
}

TEST(GetElementAttributesResponseBuilderTest, builderMtuTest) {
  std::vector<AttributeEntry> test_data = {
      {Attribute::TITLE, "Test Song 1"},
      {Attribute::ARTIST_NAME, "Test Artist"},
      {Attribute::ALBUM_NAME, "Test Album"},
      {Attribute::TRACK_NUMBER, "1"},
      {Attribute::TOTAL_NUMBER_OF_TRACKS, "2"},
      {Attribute::GENRE, "Test Genre"},
      {Attribute::PLAYING_TIME, "10 200"},
      {Attribute::TITLE, "Test Song 2"},
      {Attribute::ARTIST_NAME, "Test Artist"},
      {Attribute::ALBUM_NAME, "Test Album"},
      {Attribute::TRACK_NUMBER, "2"},
      {Attribute::TOTAL_NUMBER_OF_TRACKS, "2"},
      {Attribute::GENRE, "Test Genre"},
      {Attribute::PLAYING_TIME, "1500"},
  };

  using Builder = GetElementAttributesResponseBuilder;
  using Helper = FragmentationBuilderHelper<Builder>;
  size_t mtu = size_t(-1);
  Helper helper(mtu, [](size_t mtu) { return Builder::MakeBuilder(mtu); });

  EXPECT_NO_FATAL_FAILURE(helper.runTest(test_data, mtu, false, false));

  mtu = test_data[0].size() + Builder::kHeaderSize();
  EXPECT_NO_FATAL_FAILURE(helper.runTest(test_data, mtu));

  mtu = test_data[0].size() + test_data[1].size() + Builder::kHeaderSize();
  EXPECT_NO_FATAL_FAILURE(helper.runTest(test_data, mtu));

  mtu = test_data[0].size() + (Builder::kHeaderSize() * 2) + 1;
  EXPECT_NO_FATAL_FAILURE(helper.runTest(test_data, mtu, true, false));

  mtu = Builder::kHeaderSize() + AttributeEntry::kHeaderSize() + 1;
  EXPECT_NO_FATAL_FAILURE(helper.runTest(test_data, mtu));

  mtu = Builder::kHeaderSize() + AttributeEntry::kHeaderSize();
  EXPECT_NO_FATAL_FAILURE(helper.runTest(test_data, mtu, false, false));
}

TEST(GetElementAttributesResponseBuilderTest, truncateBuilderTest) {
  auto attribute = AttributeEntry(Attribute::TITLE, "1234");
  size_t truncated_size = VendorPacket::kMinSize();
Loading