1 #include <cstddef>
2 #include <cstdint>
3
4 #include "avrcp_packet.h"
5 #include "device.h"
6 #include "packet_test_helper.h"
7 #include "stack_config.h"
8
9 namespace bluetooth {
10 namespace avrcp {
11 class FakeMediaInterface : public MediaInterface {
12 public:
SendKeyEvent(uint8_t key,KeyState state)13 virtual void SendKeyEvent(uint8_t key, KeyState state) {}
14 using SongInfoCallback = base::Callback<void(SongInfo)>;
GetSongInfo(SongInfoCallback info_cb)15 virtual void GetSongInfo(SongInfoCallback info_cb) {}
16 using PlayStatusCallback = base::Callback<void(PlayStatus)>;
GetPlayStatus(PlayStatusCallback status_cb)17 virtual void GetPlayStatus(PlayStatusCallback status_cb) {}
18 using NowPlayingCallback =
19 base::Callback<void(std::string, std::vector<SongInfo>)>;
GetNowPlayingList(NowPlayingCallback now_playing_cb)20 virtual void GetNowPlayingList(NowPlayingCallback now_playing_cb) {}
21 using MediaListCallback =
22 base::Callback<void(uint16_t curr_player, std::vector<MediaPlayerInfo>)>;
GetMediaPlayerList(MediaListCallback list_cb)23 virtual void GetMediaPlayerList(MediaListCallback list_cb) {}
24 using FolderItemsCallback = base::Callback<void(std::vector<ListItem>)>;
GetFolderItems(uint16_t player_id,std::string media_id,FolderItemsCallback folder_cb)25 virtual void GetFolderItems(uint16_t player_id, std::string media_id,
26 FolderItemsCallback folder_cb) {}
27 using SetBrowsedPlayerCallback = base::Callback<void(
28 bool success, std::string root_id, uint32_t num_items)>;
SetBrowsedPlayer(uint16_t player_id,SetBrowsedPlayerCallback browse_cb)29 virtual void SetBrowsedPlayer(uint16_t player_id,
30 SetBrowsedPlayerCallback browse_cb) {}
PlayItem(uint16_t player_id,bool now_playing,std::string media_id)31 virtual void PlayItem(uint16_t player_id, bool now_playing,
32 std::string media_id) {}
SetActiveDevice(const RawAddress & address)33 virtual void SetActiveDevice(const RawAddress& address) {}
RegisterUpdateCallback(MediaCallbacks * callback)34 virtual void RegisterUpdateCallback(MediaCallbacks* callback) {}
UnregisterUpdateCallback(MediaCallbacks * callback)35 virtual void UnregisterUpdateCallback(MediaCallbacks* callback) {}
36 };
37
38 class FakeVolumeInterface : public VolumeInterface {
39 public:
DeviceConnected(const RawAddress & bdaddr)40 virtual void DeviceConnected(const RawAddress& bdaddr) {}
DeviceConnected(const RawAddress & bdaddr,VolumeChangedCb cb)41 virtual void DeviceConnected(const RawAddress& bdaddr, VolumeChangedCb cb) {}
DeviceDisconnected(const RawAddress & bdaddr)42 virtual void DeviceDisconnected(const RawAddress& bdaddr) {}
SetVolume(int8_t volume)43 virtual void SetVolume(int8_t volume) {}
44 };
45
46 class FakeA2dpInterface : public A2dpInterface {
47 public:
active_peer()48 virtual RawAddress active_peer() { return RawAddress(); }
is_peer_in_silence_mode(const RawAddress & peer_address)49 virtual bool is_peer_in_silence_mode(const RawAddress& peer_address) {
50 return false;
51 }
52 };
53
get_pts_avrcp_test(void)54 bool get_pts_avrcp_test(void) { return false; }
55
56 const stack_config_t interface = {
57 nullptr, get_pts_avrcp_test, nullptr, nullptr, nullptr, nullptr, nullptr,
58 nullptr};
59
Callback(uint8_t,bool,std::unique_ptr<::bluetooth::PacketBuilder>)60 void Callback(uint8_t, bool, std::unique_ptr<::bluetooth::PacketBuilder>) {}
61
LLVMFuzzerTestOneInput(const uint8_t * Data,size_t Size)62 extern "C" int LLVMFuzzerTestOneInput(const uint8_t* Data, size_t Size) {
63 FakeMediaInterface fmi;
64 FakeVolumeInterface fvi;
65 FakeA2dpInterface fai;
66
67 std::vector<uint8_t> Packet(Data, Data + Size);
68 Device device(RawAddress::kAny, true,
69 base::Bind([](uint8_t, bool,
70 std::unique_ptr<::bluetooth::PacketBuilder>) {}),
71 0xFFFF, 0xFFFF);
72 device.RegisterInterfaces(&fmi, &fai, &fvi);
73
74 auto browse_request = TestPacketType<BrowsePacket>::Make(Packet);
75 device.BrowseMessageReceived(1, browse_request);
76
77 auto avrcp_request = TestPacketType<avrcp::Packet>::Make(Packet);
78 device.MessageReceived(1, avrcp_request);
79 return 0;
80 }
81 } // namespace avrcp
82 } // namespace bluetooth
83
stack_config_get_interface(void)84 const stack_config_t* stack_config_get_interface(void) {
85 return &bluetooth::avrcp::interface;
86 }