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

Commit 9225d61f authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Implementation of test of fragmentation package" into tm-qpr-dev

parents e58f37d0 19304718
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