1// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "base/basictypes.h" 6#include "base/bind.h" 7#include "base/memory/scoped_ptr.h" 8#include "base/memory/scoped_vector.h" 9#include "base/sequenced_task_runner.h" 10#include "base/strings/string_number_conversions.h" 11#include "base/test/test_simple_task_runner.h" 12#include "device/bluetooth/bluetooth_device_win.h" 13#include "device/bluetooth/bluetooth_service_record_win.h" 14#include "device/bluetooth/bluetooth_socket_thread.h" 15#include "device/bluetooth/bluetooth_task_manager_win.h" 16#include "device/bluetooth/bluetooth_uuid.h" 17#include "testing/gtest/include/gtest/gtest.h" 18 19namespace { 20 21const char kDeviceName[] = "Device"; 22const char kDeviceAddress[] = "device address"; 23 24const char kTestAudioSdpName[] = "Audio"; 25const char kTestAudioSdpAddress[] = "01:02:03:0A:10:A0"; 26const char kTestAudioSdpBytes[] = 27 "35510900000a00010001090001350319110a09000435103506190100090019350619001909" 28 "010209000535031910020900093508350619110d090102090100250c417564696f20536f75" 29 "726365090311090001"; 30const device::BluetoothUUID kTestAudioSdpUuid("110a"); 31 32const char kTestVideoSdpName[] = "Video"; 33const char kTestVideoSdpAddress[] = "A0:10:0A:03:02:01"; 34const char kTestVideoSdpBytes[] = 35 "354b0900000a000100030900013506191112191203090004350c3503190100350519000308" 36 "0b090005350319100209000935083506191108090100090100250d566f6963652047617465" 37 "776179"; 38const device::BluetoothUUID kTestVideoSdpUuid("1112"); 39 40} // namespace 41 42namespace device { 43 44class BluetoothDeviceWinTest : public testing::Test { 45 public: 46 BluetoothDeviceWinTest() { 47 BluetoothTaskManagerWin::DeviceState device_state; 48 device_state.name = kDeviceName; 49 device_state.address = kDeviceAddress; 50 51 // Add device with audio/video services. 52 BluetoothTaskManagerWin::ServiceRecordState* audio_state = 53 new BluetoothTaskManagerWin::ServiceRecordState(); 54 audio_state->name = kTestAudioSdpName; 55 audio_state->address = kTestAudioSdpAddress; 56 base::HexStringToBytes(kTestAudioSdpBytes, &audio_state->sdp_bytes); 57 device_state.service_record_states.push_back(audio_state); 58 59 BluetoothTaskManagerWin::ServiceRecordState* video_state = 60 new BluetoothTaskManagerWin::ServiceRecordState(); 61 video_state->name = kTestVideoSdpName; 62 video_state->address = kTestVideoSdpAddress; 63 base::HexStringToBytes(kTestVideoSdpBytes, &video_state->sdp_bytes); 64 device_state.service_record_states.push_back(video_state); 65 66 scoped_refptr<base::SequencedTaskRunner> ui_task_runner( 67 new base::TestSimpleTaskRunner()); 68 scoped_refptr<BluetoothSocketThread> socket_thread( 69 BluetoothSocketThread::Get()); 70 device_.reset(new BluetoothDeviceWin(device_state, 71 ui_task_runner, 72 socket_thread, 73 NULL, 74 net::NetLog::Source())); 75 76 // Add empty device. 77 device_state.service_record_states.clear(); 78 empty_device_.reset(new BluetoothDeviceWin(device_state, 79 ui_task_runner, 80 socket_thread, 81 NULL, 82 net::NetLog::Source())); 83 } 84 85 protected: 86 scoped_ptr<BluetoothDevice> device_; 87 scoped_ptr<BluetoothDevice> empty_device_; 88}; 89 90TEST_F(BluetoothDeviceWinTest, GetUUIDs) { 91 BluetoothDevice::UUIDList uuids = device_->GetUUIDs(); 92 93 EXPECT_EQ(2, uuids.size()); 94 EXPECT_EQ(kTestAudioSdpUuid, uuids[0]); 95 EXPECT_EQ(kTestVideoSdpUuid, uuids[1]); 96 97 uuids = empty_device_->GetUUIDs(); 98 EXPECT_EQ(0, uuids.size()); 99} 100 101} // namespace device 102