18f7377353db29efe0a506123deec03d70935957aAjay Panicker/* 28f7377353db29efe0a506123deec03d70935957aAjay Panicker * Copyright 2018 The Android Open Source Project 38f7377353db29efe0a506123deec03d70935957aAjay Panicker * 48f7377353db29efe0a506123deec03d70935957aAjay Panicker * Licensed under the Apache License, Version 2.0 (the "License"); 58f7377353db29efe0a506123deec03d70935957aAjay Panicker * you may not use this file except in compliance with the License. 68f7377353db29efe0a506123deec03d70935957aAjay Panicker * You may obtain a copy of the License at 78f7377353db29efe0a506123deec03d70935957aAjay Panicker * 88f7377353db29efe0a506123deec03d70935957aAjay Panicker * http://www.apache.org/licenses/LICENSE-2.0 98f7377353db29efe0a506123deec03d70935957aAjay Panicker * 108f7377353db29efe0a506123deec03d70935957aAjay Panicker * Unless required by applicable law or agreed to in writing, software 118f7377353db29efe0a506123deec03d70935957aAjay Panicker * distributed under the License is distributed on an "AS IS" BASIS, 128f7377353db29efe0a506123deec03d70935957aAjay Panicker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138f7377353db29efe0a506123deec03d70935957aAjay Panicker * See the License for the specific language governing permissions and 148f7377353db29efe0a506123deec03d70935957aAjay Panicker * limitations under the License. 158f7377353db29efe0a506123deec03d70935957aAjay Panicker */ 168f7377353db29efe0a506123deec03d70935957aAjay Panicker 178f7377353db29efe0a506123deec03d70935957aAjay Panicker#include <gtest/gtest.h> 188f7377353db29efe0a506123deec03d70935957aAjay Panicker 198f7377353db29efe0a506123deec03d70935957aAjay Panicker#include "avrcp_test_packets.h" 208f7377353db29efe0a506123deec03d70935957aAjay Panicker#include "get_item_attributes.h" 218f7377353db29efe0a506123deec03d70935957aAjay Panicker#include "packet_test_helper.h" 228f7377353db29efe0a506123deec03d70935957aAjay Panicker 238f7377353db29efe0a506123deec03d70935957aAjay Panickernamespace bluetooth { 248f7377353db29efe0a506123deec03d70935957aAjay Panickernamespace avrcp { 258f7377353db29efe0a506123deec03d70935957aAjay Panicker 268f7377353db29efe0a506123deec03d70935957aAjay Panickerusing TestGetItemAttrsReqPacket = TestPacketType<GetItemAttributesRequest>; 278f7377353db29efe0a506123deec03d70935957aAjay Panicker 288f7377353db29efe0a506123deec03d70935957aAjay PanickerTEST(GetItemAttributesResponseBuilderTest, builderSizeTest) { 298f7377353db29efe0a506123deec03d70935957aAjay Panicker auto builder = 307bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker GetItemAttributesResponseBuilder::MakeBuilder(Status::NO_ERROR, 0xFFFF); 318f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_EQ(builder->size(), 5u); 328f7377353db29efe0a506123deec03d70935957aAjay Panicker 338f7377353db29efe0a506123deec03d70935957aAjay Panicker builder->AddAttributeEntry(Attribute::TITLE, "Test Song"); 348f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_EQ(builder->size(), 22u); 358f7377353db29efe0a506123deec03d70935957aAjay Panicker 368f7377353db29efe0a506123deec03d70935957aAjay Panicker builder->AddAttributeEntry(Attribute::ARTIST_NAME, "Test Artist"); 378f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_EQ(builder->size(), 41u); 388f7377353db29efe0a506123deec03d70935957aAjay Panicker 398f7377353db29efe0a506123deec03d70935957aAjay Panicker builder->AddAttributeEntry(Attribute::ALBUM_NAME, "Test Album"); 408f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_EQ(builder->size(), get_item_attributes_song_response.size()); 418f7377353db29efe0a506123deec03d70935957aAjay Panicker} 428f7377353db29efe0a506123deec03d70935957aAjay Panicker 438f7377353db29efe0a506123deec03d70935957aAjay PanickerTEST(GetItemAttributesResponseBuilderTest, builderTest) { 448f7377353db29efe0a506123deec03d70935957aAjay Panicker auto builder = 457bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker GetItemAttributesResponseBuilder::MakeBuilder(Status::NO_ERROR, 0xFFFF); 468f7377353db29efe0a506123deec03d70935957aAjay Panicker builder->AddAttributeEntry(Attribute::TITLE, "Test Song"); 478f7377353db29efe0a506123deec03d70935957aAjay Panicker builder->AddAttributeEntry(Attribute::ARTIST_NAME, "Test Artist"); 488f7377353db29efe0a506123deec03d70935957aAjay Panicker builder->AddAttributeEntry(Attribute::ALBUM_NAME, "Test Album"); 498f7377353db29efe0a506123deec03d70935957aAjay Panicker 508f7377353db29efe0a506123deec03d70935957aAjay Panicker auto test_packet = TestGetItemAttrsReqPacket::Make(); 518f7377353db29efe0a506123deec03d70935957aAjay Panicker builder->Serialize(test_packet); 528f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_EQ(test_packet->GetData(), get_item_attributes_song_response); 538f7377353db29efe0a506123deec03d70935957aAjay Panicker} 548f7377353db29efe0a506123deec03d70935957aAjay Panicker 557bed53df63e72be19412e6519b2f23ed2565bdaeAjay PanickerTEST(GetItemAttributesResponseBuilderTest, truncateBuilderTest) { 567bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker auto attribute = AttributeEntry(Attribute::TITLE, "1234"); 577bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker size_t truncated_size = BrowsePacket::kMinSize(); 587bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker truncated_size += 2; // Status field + Number of attributes field 597bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker truncated_size += attribute.size(); // Attribute size 607bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker 617bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker auto truncated_builder = GetItemAttributesResponseBuilder::MakeBuilder( 627bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker Status::NO_ERROR, truncated_size); 637bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker ASSERT_TRUE( 647bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker truncated_builder->AddAttributeEntry(Attribute::TITLE, "1234truncated")); 657bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker ASSERT_EQ(truncated_builder->size(), truncated_size); 667bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker 677bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker ASSERT_FALSE(truncated_builder->AddAttributeEntry(Attribute::ARTIST_NAME, 687bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker "Can not add")); 697bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker 707bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker auto truncated_packet = TestGetItemAttrsReqPacket::Make(); 717bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker truncated_builder->Serialize(truncated_packet); 727bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker 737bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker auto builder = 747bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker GetItemAttributesResponseBuilder::MakeBuilder(Status::NO_ERROR, 0xFFFF); 757bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker builder->AddAttributeEntry(attribute); 767bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker auto test_packet = TestGetItemAttrsReqPacket::Make(); 777bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker builder->Serialize(test_packet); 787bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker 797bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker ASSERT_EQ(truncated_packet->GetData(), test_packet->GetData()); 807bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker} 817bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker 828f7377353db29efe0a506123deec03d70935957aAjay PanickerTEST(GetItemAttributesResponseBuilderTest, errorStatusTest) { 838f7377353db29efe0a506123deec03d70935957aAjay Panicker std::vector<uint8_t> does_not_exist_status = {0x73, 0x00, 0x01, 0x09}; 847bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker auto builder = GetItemAttributesResponseBuilder::MakeBuilder( 857bed53df63e72be19412e6519b2f23ed2565bdaeAjay Panicker Status::DOES_NOT_EXIST, 0xFFFF); 868f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_EQ(builder->size(), does_not_exist_status.size()); 878f7377353db29efe0a506123deec03d70935957aAjay Panicker 888f7377353db29efe0a506123deec03d70935957aAjay Panicker auto test_packet = TestGetItemAttrsReqPacket::Make(); 898f7377353db29efe0a506123deec03d70935957aAjay Panicker builder->Serialize(test_packet); 908f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_EQ(test_packet->GetData(), does_not_exist_status); 918f7377353db29efe0a506123deec03d70935957aAjay Panicker} 928f7377353db29efe0a506123deec03d70935957aAjay Panicker 938f7377353db29efe0a506123deec03d70935957aAjay PanickerTEST(GetItemAttributesRequestTest, getterTest) { 948f7377353db29efe0a506123deec03d70935957aAjay Panicker auto test_packet = TestGetItemAttrsReqPacket::Make( 958f7377353db29efe0a506123deec03d70935957aAjay Panicker get_item_attributes_request_all_attributes); 968f7377353db29efe0a506123deec03d70935957aAjay Panicker 978f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_EQ(test_packet->GetScope(), Scope::NOW_PLAYING); 988f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_EQ(test_packet->GetUidCounter(), 0x0000u); 998f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_EQ(test_packet->GetUid(), 0x0000000000000001u); 1008f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_EQ(test_packet->GetNumAttributes(), 7); 1018f7377353db29efe0a506123deec03d70935957aAjay Panicker std::vector<Attribute> attrs_requested = {Attribute::TITLE, 1028f7377353db29efe0a506123deec03d70935957aAjay Panicker Attribute::ARTIST_NAME, 1038f7377353db29efe0a506123deec03d70935957aAjay Panicker Attribute::ALBUM_NAME, 1048f7377353db29efe0a506123deec03d70935957aAjay Panicker Attribute::TRACK_NUMBER, 1058f7377353db29efe0a506123deec03d70935957aAjay Panicker Attribute::TOTAL_NUMBER_OF_TRACKS, 1068f7377353db29efe0a506123deec03d70935957aAjay Panicker Attribute::GENRE, 1078f7377353db29efe0a506123deec03d70935957aAjay Panicker Attribute::PLAYING_TIME}; 1088f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_EQ(test_packet->GetAttributesRequested(), attrs_requested); 1098f7377353db29efe0a506123deec03d70935957aAjay Panicker} 1108f7377353db29efe0a506123deec03d70935957aAjay Panicker 1118f7377353db29efe0a506123deec03d70935957aAjay PanickerTEST(GetItemAttributesRequestTest, validTest) { 1128f7377353db29efe0a506123deec03d70935957aAjay Panicker auto test_packet = TestGetItemAttrsReqPacket::Make( 1138f7377353db29efe0a506123deec03d70935957aAjay Panicker get_item_attributes_request_all_attributes); 1148f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_TRUE(test_packet->IsValid()); 1158f7377353db29efe0a506123deec03d70935957aAjay Panicker} 1168f7377353db29efe0a506123deec03d70935957aAjay Panicker 1178f7377353db29efe0a506123deec03d70935957aAjay PanickerTEST(GetItemAttributesRequestTest, invalidTest) { 1188f7377353db29efe0a506123deec03d70935957aAjay Panicker auto packet_copy = get_item_attributes_request_all_attributes; 1198f7377353db29efe0a506123deec03d70935957aAjay Panicker packet_copy.push_back(0x00); 1208f7377353db29efe0a506123deec03d70935957aAjay Panicker auto test_packet = TestGetItemAttrsReqPacket::Make(packet_copy); 1218f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_FALSE(test_packet->IsValid()); 1228f7377353db29efe0a506123deec03d70935957aAjay Panicker 1238f7377353db29efe0a506123deec03d70935957aAjay Panicker std::vector<uint8_t> short_packet = {0x00, 0x01, 0x02, 0x03, 1248f7377353db29efe0a506123deec03d70935957aAjay Panicker 0x04, 0x05, 0x06, 0x07}; 1258f7377353db29efe0a506123deec03d70935957aAjay Panicker test_packet = TestGetItemAttrsReqPacket::Make(short_packet); 1268f7377353db29efe0a506123deec03d70935957aAjay Panicker ASSERT_FALSE(test_packet->IsValid()); 1278f7377353db29efe0a506123deec03d70935957aAjay Panicker} 1288f7377353db29efe0a506123deec03d70935957aAjay Panicker 1298f7377353db29efe0a506123deec03d70935957aAjay Panicker} // namespace avrcp 1308f7377353db29efe0a506123deec03d70935957aAjay Panicker} // namespace bluetooth