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