blob: ec2d733457287243b4dc8ecac22d6c126300991c [file] [log] [blame]
/*
* Copyright 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <gtest/gtest.h>
#include "avrcp_test_packets.h"
#include "get_folder_items.h"
#include "packet_test_helper.h"
namespace bluetooth {
namespace avrcp {
using TestGetFolderItemsReqPacket = TestPacketType<GetFolderItemsRequest>;
TEST(GetFolderItemsResponseBuilderTest, builderMediaPlayerSizeTest) {
auto builder = GetFolderItemsResponseBuilder::MakePlayerListBuilder(
Status::NO_ERROR, 0x0000, 0xFFFF);
// If there are no items, then the only data in the packet is the status
ASSERT_EQ(builder->size(), get_folder_items_error_response.size());
auto player = MediaPlayerItem(0x0001, "com.google.android.music", true);
builder->AddMediaPlayer(player);
ASSERT_EQ(builder->size(), get_folder_items_media_player_response.size());
}
TEST(GetFolderItemsResponseBuilderTest, builderMediaPlayerAddTest) {
auto builder = GetFolderItemsResponseBuilder::MakePlayerListBuilder(
Status::NO_ERROR, 0x0000, 0xFFFF);
auto player = MediaPlayerItem(0x0001, "com.google.android.music", true);
builder->AddMediaPlayer(player);
auto test_packet = TestGetFolderItemsReqPacket::Make();
builder->Serialize(test_packet);
ASSERT_EQ(test_packet->GetData(), get_folder_items_media_player_response);
}
TEST(GetFolderItemsResponseBuilderTest, builderPlayerAddMtuTest) {
MediaPlayerItem player1(1, "Player 1 that fits", true);
MediaPlayerItem player2(2, "Player 2 that doesn't fit", true);
MediaPlayerItem player3(3, "Player 3 that fits", true);
// Browsing Header + Status field + UID Counter field + Number of Items field
auto packet_size = BrowsePacket::kMinSize() + 5;
packet_size += player1.size() + player3.size();
auto builder = GetFolderItemsResponseBuilder::MakePlayerListBuilder(
Status::NO_ERROR, 0x0000, packet_size);
ASSERT_TRUE(builder->AddMediaPlayer(player1));
ASSERT_FALSE(builder->AddMediaPlayer(player2));
ASSERT_TRUE(builder->AddMediaPlayer(player3));
}
TEST(GetFolderItemsResponseBuilderTest, builderFolderSizeTest) {
auto builder = GetFolderItemsResponseBuilder::MakeVFSBuilder(Status::NO_ERROR,
0x0000, 0xFFFF);
ASSERT_EQ(builder->size(), get_folder_items_error_response.size());
auto folder = FolderItem(0x0000000000000001, 0x00, true, "Test Folder");
builder->AddFolder(folder);
ASSERT_EQ(builder->size(), get_folder_items_folder_response.size());
}
TEST(GetFolderItemsResponseBuilderTest, builderFolderAddTest) {
auto builder = GetFolderItemsResponseBuilder::MakeVFSBuilder(Status::NO_ERROR,
0x0000, 0xFFFF);
auto folder = FolderItem(0x0000000000000001, 0x00, true, "Test Folder");
builder->AddFolder(folder);
auto test_packet = TestGetFolderItemsReqPacket::Make();
builder->Serialize(test_packet);
ASSERT_EQ(test_packet->GetData(), get_folder_items_folder_response);
}
TEST(GetFolderItemsResponseBuilderTest, builderFolderAddMtuTest) {
FolderItem folder1(0x01, 0x00, true, "Folder 1 that fits");
FolderItem folder2(0x02, 0x00, true, "Folder 2 that doesn't fit");
FolderItem folder3(0x03, 0x00, true, "Folder 3 that fits");
// Browsing Header + Status field + UID Counter field + Number of Items field
auto packet_size = BrowsePacket::kMinSize() + 5;
packet_size += folder1.size() + folder3.size();
auto builder = GetFolderItemsResponseBuilder::MakeVFSBuilder(
Status::NO_ERROR, 0x0000, packet_size);
ASSERT_TRUE(builder->AddFolder(folder1));
ASSERT_FALSE(builder->AddFolder(folder2));
ASSERT_TRUE(builder->AddFolder(folder3));
}
TEST(GetFolderItemsResponseBuilderTest, builderSongSizeTest) {
auto builder = GetFolderItemsResponseBuilder::MakeNowPlayingBuilder(
Status::NO_ERROR, 0x0000, 0xFFFF);
ASSERT_EQ(builder->size(), get_folder_items_error_response.size());
std::set<AttributeEntry> attributes;
attributes.insert(AttributeEntry(Attribute::TITLE, "Test Title"));
auto song = MediaElementItem(0x02, "Test Title", attributes);
builder->AddSong(song);
ASSERT_EQ(builder->size(), get_folder_items_song_response.size());
}
TEST(GetFolderItemsResponseBuilderTest, builderSongAddTest) {
auto builder = GetFolderItemsResponseBuilder::MakeNowPlayingBuilder(
Status::NO_ERROR, 0x0000, 0xFFFF);
std::set<AttributeEntry> attributes;
attributes.insert(AttributeEntry(Attribute::TITLE, "Test Title"));
auto song = MediaElementItem(0x02, "Test Title", attributes);
builder->AddSong(song);
auto test_packet = TestGetFolderItemsReqPacket::Make();
builder->Serialize(test_packet);
ASSERT_EQ(test_packet->GetData(), get_folder_items_song_response);
}
TEST(GetFolderItemsResponseBuilderTest, builderSongAddMtuTest) {
MediaElementItem song1(0x01, "Song 1 that fits", std::set<AttributeEntry>());
MediaElementItem song2(0x02, "Song 2 that doesn't fit",
std::set<AttributeEntry>());
MediaElementItem song3(0x03, "Song 3 that fits", std::set<AttributeEntry>());
auto packet_size = BrowsePacket::kMinSize() + 5;
packet_size += song1.size() + song3.size();
auto builder = GetFolderItemsResponseBuilder::MakeNowPlayingBuilder(
Status::NO_ERROR, 0x0000, packet_size);
ASSERT_TRUE(builder->AddSong(song1));
ASSERT_FALSE(builder->AddSong(song2));
ASSERT_TRUE(builder->AddSong(song3));
}
TEST(GetFolderItemsResponseBuilderTest, builderNoItemsTest) {
auto builder = GetFolderItemsResponseBuilder::MakePlayerListBuilder(
Status::NO_ERROR, 0x0000, 0xFFFF);
auto test_packet = TestGetFolderItemsReqPacket::Make();
builder->Serialize(test_packet);
ASSERT_EQ(test_packet->GetData(), get_folder_items_error_response);
builder = GetFolderItemsResponseBuilder::MakeVFSBuilder(Status::NO_ERROR,
0x0000, 0xFFFF);
test_packet = TestGetFolderItemsReqPacket::Make();
builder->Serialize(test_packet);
ASSERT_EQ(test_packet->GetData(), get_folder_items_error_response);
builder = GetFolderItemsResponseBuilder::MakeNowPlayingBuilder(
Status::NO_ERROR, 0x0000, 0xFFFF);
test_packet = TestGetFolderItemsReqPacket::Make();
builder->Serialize(test_packet);
ASSERT_EQ(test_packet->GetData(), get_folder_items_error_response);
}
TEST(GetFolderItemsResponseBuilderTest, builderErrorStatusTest) {
std::vector<uint8_t> get_folder_items_inv_scope = {0x71, 0x00, 0x01, 0x0a};
auto builder = GetFolderItemsResponseBuilder::MakePlayerListBuilder(
Status::INVALID_SCOPE, 0x0000, 0xFFFF);
// Check that the status remains INVALID_SCOPE even though there are zero
// items
auto test_packet = TestGetFolderItemsReqPacket::Make();
builder->Serialize(test_packet);
ASSERT_EQ(test_packet->GetData(), get_folder_items_inv_scope);
auto player = MediaPlayerItem(0x0001, "com.google.android.music", true);
builder->AddMediaPlayer(player);
// Check to make sure that even though we added an item, it doesn't get
// written to the packet
test_packet = TestGetFolderItemsReqPacket::Make();
builder->Serialize(test_packet);
ASSERT_EQ(test_packet->GetData(), get_folder_items_inv_scope);
}
TEST(GetFolderItemsResponseBuilderTest, builderDeathTest) {
auto player = MediaPlayerItem(0x0001, "com.google.android.music", true);
auto folder = FolderItem(0x01, 0x00, true, "test folder");
auto song = MediaElementItem(0x01, "test song", std::set<AttributeEntry>());
auto builder = GetFolderItemsResponseBuilder::MakePlayerListBuilder(
Status::NO_ERROR, 0x0000, 0xFFFF);
ASSERT_DEATH(builder->AddFolder(folder), "scope_ == Scope::VFS");
ASSERT_DEATH(builder->AddSong(song),
"scope_ == Scope::VFS \\|\\| scope_ == Scope::NOW_PLAYING");
builder = GetFolderItemsResponseBuilder::MakeVFSBuilder(Status::NO_ERROR,
0x0000, 0xFFFF);
ASSERT_DEATH(builder->AddMediaPlayer(player),
"scope_ == Scope::MEDIA_PLAYER_LIST");
builder = GetFolderItemsResponseBuilder::MakeNowPlayingBuilder(
Status::NO_ERROR, 0x0000, 0xFFFF);
ASSERT_DEATH(builder->AddMediaPlayer(player),
"scope_ == Scope::MEDIA_PLAYER_LIST");
ASSERT_DEATH(builder->AddFolder(folder), "scope_ == Scope::VFS");
}
TEST(GetFolderItemsRequestTest, getterTest) {
auto test_packet =
TestGetFolderItemsReqPacket::Make(get_folder_items_request_vfs);
ASSERT_EQ(test_packet->GetScope(), Scope::VFS);
ASSERT_EQ(test_packet->GetStartItem(), 0x00000000u);
ASSERT_EQ(test_packet->GetEndItem(), 0x00000005u);
ASSERT_EQ(test_packet->GetNumAttributes(), 1);
std::vector<Attribute> attribute_list = {Attribute::TITLE};
ASSERT_EQ(test_packet->GetAttributesRequested(), attribute_list);
}
TEST(GetFolderItemsRequestBuilderTest, builderZeroAttrsTest) {
auto builder =
GetFolderItemsRequestBuilder::MakeBuilder(Scope::VFS, 0, 9, {});
ASSERT_EQ(builder->size(), get_folder_items_request_no_attrs.size());
auto test_packet = TestGetFolderItemsReqPacket::Make();
builder->Serialize(test_packet);
ASSERT_EQ(test_packet->GetData(), get_folder_items_request_no_attrs);
}
TEST(GetFolderItemsRequestBuilderTest, builderTest) {
auto builder = GetFolderItemsRequestBuilder::MakeBuilder(Scope::VFS, 0, 9,
{Attribute::TITLE});
ASSERT_EQ(builder->size(), get_folder_items_request_title.size());
auto test_packet = TestGetFolderItemsReqPacket::Make();
builder->Serialize(test_packet);
ASSERT_EQ(test_packet->GetData(), get_folder_items_request_title);
}
} // namespace avrcp
} // namespace bluetooth