1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/strings/sys_string_conversions.h"
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "device/bluetooth/bluetooth_low_energy_win.h"
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "testing/gtest/include/gtest/gtest.h"
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace {
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kValidDeviceInstanceId[] =
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    "BTHLE\\DEV_BC6A29AB5FB0\\8&31038925&0&BC6A29AB5FB0";
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdochconst char kInvalidDeviceInstanceId[] =
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    "BTHLE\\BC6A29AB5FB0_DEV_\\8&31038925&0&BC6A29AB5FB0";
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace device {
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass BluetoothLowEnergyWinTest : public testing::Test {};
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
23116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(BluetoothLowEnergyWinTest, ExtractValidBluetoothAddress) {
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  BLUETOOTH_ADDRESS btha;
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::string error;
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool success =
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      device::win::ExtractBluetoothAddressFromDeviceInstanceIdForTesting(
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          kValidDeviceInstanceId, &btha, &error);
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(success);
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_TRUE(error.empty());
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0xbc, btha.rgBytes[5]);
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0x6a, btha.rgBytes[4]);
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0x29, btha.rgBytes[3]);
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0xab, btha.rgBytes[2]);
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0x5f, btha.rgBytes[1]);
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(0xb0, btha.rgBytes[0]);
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
40116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(BluetoothLowEnergyWinTest, ExtractInvalidBluetoothAddress) {
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  BLUETOOTH_ADDRESS btha;
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::string error;
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool success =
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      device::win::ExtractBluetoothAddressFromDeviceInstanceIdForTesting(
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          kInvalidDeviceInstanceId, &btha, &error);
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(success);
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_FALSE(error.empty());
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
51116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(BluetoothLowEnergyWinTest, DeviceRegistryPropertyValueAsString) {
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::string test_value = "String used for round trip test.";
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::wstring wide_value = base::SysUTF8ToWide(test_value);
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  size_t buffer_size = (wide_value.size() + 1) * sizeof(wchar_t);
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<uint8_t[]> buffer(new uint8_t[buffer_size]);
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  memcpy(buffer.get(), wide_value.c_str(), buffer_size);
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<device::win::DeviceRegistryPropertyValue> value =
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      device::win::DeviceRegistryPropertyValue::Create(
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          REG_SZ, buffer.Pass(), buffer_size).Pass();
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(test_value, value->AsString());
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
63116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(BluetoothLowEnergyWinTest, DeviceRegistryPropertyValueAsDWORD) {
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DWORD test_value = 5u;
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  size_t buffer_size = sizeof(DWORD);
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<uint8_t[]> buffer(new uint8_t[buffer_size]);
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  memcpy(buffer.get(), &test_value, buffer_size);
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<device::win::DeviceRegistryPropertyValue> value =
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      device::win::DeviceRegistryPropertyValue::Create(
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          REG_DWORD, buffer.Pass(), buffer_size).Pass();
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(test_value, value->AsDWORD());
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
74116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST_F(BluetoothLowEnergyWinTest, DevicePropertyValueAsUint32) {
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  uint32_t test_value = 5u;
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  size_t buffer_size = sizeof(uint32_t);
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<uint8_t[]> buffer(new uint8_t[buffer_size]);
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  memcpy(buffer.get(), &test_value, buffer_size);
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<device::win::DevicePropertyValue> value(
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      new device::win::DevicePropertyValue(
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch          DEVPROP_TYPE_UINT32, buffer.Pass(), buffer_size));
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  EXPECT_EQ(test_value, value->AsUint32());
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace device
86