12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_vector.h" 9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/sequenced_task_runner.h" 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_number_conversions.h" 11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/test/test_simple_task_runner.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "device/bluetooth/bluetooth_device_win.h" 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "device/bluetooth/bluetooth_service_record_win.h" 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "device/bluetooth/bluetooth_socket_thread.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "device/bluetooth/bluetooth_task_manager_win.h" 16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "device/bluetooth/bluetooth_uuid.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kDeviceName[] = "Device"; 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)const char kDeviceAddress[] = "01:02:03:0A:10:A0"; 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kTestAudioSdpName[] = "Audio"; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kTestAudioSdpBytes[] = 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "35510900000a00010001090001350319110a09000435103506190100090019350619001909" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "010209000535031910020900093508350619110d090102090100250c417564696f20536f75" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "726365090311090001"; 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochconst device::BluetoothUUID kTestAudioSdpUuid("110a"); 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kTestVideoSdpName[] = "Video"; 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char kTestVideoSdpBytes[] = 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "354b0900000a000100030900013506191112191203090004350c3503190100350519000308" 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "0b090005350319100209000935083506191108090100090100250d566f6963652047617465" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "776179"; 36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochconst device::BluetoothUUID kTestVideoSdpUuid("1112"); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace device { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BluetoothDeviceWinTest : public testing::Test { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) BluetoothDeviceWinTest() { 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> ui_task_runner( 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new base::TestSimpleTaskRunner()); 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_refptr<BluetoothSocketThread> socket_thread( 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) BluetoothSocketThread::Get()); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Add device with audio/video services. 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) device_state_.reset(new BluetoothTaskManagerWin::DeviceState()); 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) device_state_->name = kDeviceName; 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) device_state_->address = kDeviceAddress; 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BluetoothTaskManagerWin::ServiceRecordState* audio_state = 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new BluetoothTaskManagerWin::ServiceRecordState(); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) audio_state->name = kTestAudioSdpName; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::HexStringToBytes(kTestAudioSdpBytes, &audio_state->sdp_bytes); 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) device_state_->service_record_states.push_back(audio_state); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BluetoothTaskManagerWin::ServiceRecordState* video_state = 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new BluetoothTaskManagerWin::ServiceRecordState(); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) video_state->name = kTestVideoSdpName; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::HexStringToBytes(kTestVideoSdpBytes, &video_state->sdp_bytes); 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) device_state_->service_record_states.push_back(video_state); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) device_.reset(new BluetoothDeviceWin(*device_state_, 68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ui_task_runner, 69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch socket_thread, 70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch NULL, 71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch net::NetLog::Source())); 72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Add empty device. 745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) empty_device_state_.reset(new BluetoothTaskManagerWin::DeviceState()); 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) empty_device_state_->name = kDeviceName; 765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) empty_device_state_->address = kDeviceAddress; 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) empty_device_.reset(new BluetoothDeviceWin(*empty_device_state_, 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ui_task_runner, 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch socket_thread, 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch NULL, 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch net::NetLog::Source())); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<BluetoothDeviceWin> device_; 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<BluetoothTaskManagerWin::DeviceState> device_state_; 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<BluetoothDeviceWin> empty_device_; 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) scoped_ptr<BluetoothTaskManagerWin::DeviceState> empty_device_state_; 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)TEST_F(BluetoothDeviceWinTest, GetUUIDs) { 9223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) BluetoothDevice::UUIDList uuids = device_->GetUUIDs(); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(2, uuids.size()); 95c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(kTestAudioSdpUuid, uuids[0]); 96c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(kTestVideoSdpUuid, uuids[1]); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) uuids = empty_device_->GetUUIDs(); 9923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) EXPECT_EQ(0, uuids.size()); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)TEST_F(BluetoothDeviceWinTest, IsEqual) { 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(device_->IsEqual(*device_state_)); 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(device_->IsEqual(*empty_device_state_)); 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_FALSE(empty_device_->IsEqual(*device_state_)); 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) EXPECT_TRUE(empty_device_->IsEqual(*empty_device_state_)); 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 1085f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 10923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)} // namespace device 110