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