| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 #include "device/bluetooth/dbus/fake_bluetooth_device_client.h" | 28 #include "device/bluetooth/dbus/fake_bluetooth_device_client.h" |
| 29 #include "device/bluetooth/dbus/fake_bluetooth_gatt_service_client.h" | 29 #include "device/bluetooth/dbus/fake_bluetooth_gatt_service_client.h" |
| 30 #include "device/bluetooth/dbus/fake_bluetooth_input_client.h" | 30 #include "device/bluetooth/dbus/fake_bluetooth_input_client.h" |
| 31 #include "device/bluetooth/test/test_bluetooth_adapter_observer.h" | 31 #include "device/bluetooth/test/test_bluetooth_adapter_observer.h" |
| 32 #include "testing/gtest/include/gtest/gtest.h" | 32 #include "testing/gtest/include/gtest/gtest.h" |
| 33 #include "third_party/cros_system_api/dbus/service_constants.h" | 33 #include "third_party/cros_system_api/dbus/service_constants.h" |
| 34 | 34 |
| 35 using device::BluetoothAdapter; | 35 using device::BluetoothAdapter; |
| 36 using device::BluetoothAdapterFactory; | 36 using device::BluetoothAdapterFactory; |
| 37 using device::BluetoothDevice; | 37 using device::BluetoothDevice; |
| 38 using device::BluetoothDeviceType; |
| 38 using device::BluetoothDiscoveryFilter; | 39 using device::BluetoothDiscoveryFilter; |
| 39 using device::BluetoothDiscoverySession; | 40 using device::BluetoothDiscoverySession; |
| 40 using device::BluetoothUUID; | 41 using device::BluetoothUUID; |
| 41 using device::TestBluetoothAdapterObserver; | 42 using device::TestBluetoothAdapterObserver; |
| 42 | 43 |
| 43 namespace bluez { | 44 namespace bluez { |
| 44 | 45 |
| 45 namespace { | 46 namespace { |
| 46 | 47 |
| 47 // Callback for BluetoothDevice::GetConnectionInfo() that simply saves the | 48 // Callback for BluetoothDevice::GetConnectionInfo() that simply saves the |
| (...skipping 2091 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2139 int idx = GetDeviceIndexByAddress( | 2140 int idx = GetDeviceIndexByAddress( |
| 2140 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); | 2141 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); |
| 2141 ASSERT_NE(-1, idx); | 2142 ASSERT_NE(-1, idx); |
| 2142 ASSERT_EQ(bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress, | 2143 ASSERT_EQ(bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress, |
| 2143 devices[idx]->GetAddress()); | 2144 devices[idx]->GetAddress()); |
| 2144 | 2145 |
| 2145 // Verify the other device properties. | 2146 // Verify the other device properties. |
| 2146 EXPECT_EQ( | 2147 EXPECT_EQ( |
| 2147 base::UTF8ToUTF16(bluez::FakeBluetoothDeviceClient::kPairedDeviceAlias), | 2148 base::UTF8ToUTF16(bluez::FakeBluetoothDeviceClient::kPairedDeviceAlias), |
| 2148 devices[idx]->GetNameForDisplay()); | 2149 devices[idx]->GetNameForDisplay()); |
| 2149 EXPECT_EQ(BluetoothDevice::DEVICE_COMPUTER, devices[idx]->GetDeviceType()); | 2150 EXPECT_EQ(BluetoothDeviceType::COMPUTER, devices[idx]->GetDeviceType()); |
| 2150 EXPECT_TRUE(devices[idx]->IsPaired()); | 2151 EXPECT_TRUE(devices[idx]->IsPaired()); |
| 2151 EXPECT_FALSE(devices[idx]->IsConnected()); | 2152 EXPECT_FALSE(devices[idx]->IsConnected()); |
| 2152 EXPECT_FALSE(devices[idx]->IsConnecting()); | 2153 EXPECT_FALSE(devices[idx]->IsConnecting()); |
| 2153 | 2154 |
| 2154 // Non HID devices are always connectable. | 2155 // Non HID devices are always connectable. |
| 2155 EXPECT_TRUE(devices[idx]->IsConnectable()); | 2156 EXPECT_TRUE(devices[idx]->IsConnectable()); |
| 2156 | 2157 |
| 2157 BluetoothDevice::UUIDSet uuids = devices[idx]->GetUUIDs(); | 2158 BluetoothDevice::UUIDSet uuids = devices[idx]->GetUUIDs(); |
| 2158 EXPECT_EQ(2U, uuids.size()); | 2159 EXPECT_EQ(2U, uuids.size()); |
| 2159 EXPECT_TRUE(base::ContainsKey(uuids, BluetoothUUID("1800"))); | 2160 EXPECT_TRUE(base::ContainsKey(uuids, BluetoothUUID("1800"))); |
| 2160 EXPECT_TRUE(base::ContainsKey(uuids, BluetoothUUID("1801"))); | 2161 EXPECT_TRUE(base::ContainsKey(uuids, BluetoothUUID("1801"))); |
| 2161 | 2162 |
| 2162 EXPECT_EQ(BluetoothDevice::VENDOR_ID_USB, devices[idx]->GetVendorIDSource()); | 2163 EXPECT_EQ(BluetoothDevice::VENDOR_ID_USB, devices[idx]->GetVendorIDSource()); |
| 2163 EXPECT_EQ(0x05ac, devices[idx]->GetVendorID()); | 2164 EXPECT_EQ(0x05ac, devices[idx]->GetVendorID()); |
| 2164 EXPECT_EQ(0x030d, devices[idx]->GetProductID()); | 2165 EXPECT_EQ(0x030d, devices[idx]->GetProductID()); |
| 2165 EXPECT_EQ(0x0306, devices[idx]->GetDeviceID()); | 2166 EXPECT_EQ(0x0306, devices[idx]->GetDeviceID()); |
| 2166 } | 2167 } |
| 2167 | 2168 |
| 2168 TEST_F(BluetoothBlueZTest, DeviceClassChanged) { | 2169 TEST_F(BluetoothBlueZTest, DeviceClassChanged) { |
| 2169 // Simulate a change of class of a device, as sometimes occurs | 2170 // Simulate a change of class of a device, as sometimes occurs |
| 2170 // during discovery. | 2171 // during discovery. |
| 2171 GetAdapter(); | 2172 GetAdapter(); |
| 2172 | 2173 |
| 2173 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); | 2174 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); |
| 2174 ASSERT_EQ(2U, devices.size()); | 2175 ASSERT_EQ(2U, devices.size()); |
| 2175 | 2176 |
| 2176 int idx = GetDeviceIndexByAddress( | 2177 int idx = GetDeviceIndexByAddress( |
| 2177 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); | 2178 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); |
| 2178 ASSERT_NE(-1, idx); | 2179 ASSERT_NE(-1, idx); |
| 2179 ASSERT_EQ(BluetoothDevice::DEVICE_COMPUTER, devices[idx]->GetDeviceType()); | 2180 ASSERT_EQ(BluetoothDeviceType::COMPUTER, devices[idx]->GetDeviceType()); |
| 2180 | 2181 |
| 2181 // Install an observer; expect the DeviceChanged method to be called when | 2182 // Install an observer; expect the DeviceChanged method to be called when |
| 2182 // we change the class of the device. | 2183 // we change the class of the device. |
| 2183 TestBluetoothAdapterObserver observer(adapter_); | 2184 TestBluetoothAdapterObserver observer(adapter_); |
| 2184 | 2185 |
| 2185 bluez::FakeBluetoothDeviceClient::Properties* properties = | 2186 bluez::FakeBluetoothDeviceClient::Properties* properties = |
| 2186 fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( | 2187 fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( |
| 2187 bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); | 2188 bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); |
| 2188 | 2189 |
| 2189 properties->bluetooth_class.ReplaceValue(0x002580); | 2190 properties->bluetooth_class.ReplaceValue(0x002580); |
| 2190 | 2191 |
| 2191 EXPECT_EQ(1, observer.device_changed_count()); | 2192 EXPECT_EQ(1, observer.device_changed_count()); |
| 2192 EXPECT_EQ(devices[idx], observer.last_device()); | 2193 EXPECT_EQ(devices[idx], observer.last_device()); |
| 2193 | 2194 |
| 2194 EXPECT_EQ(BluetoothDevice::DEVICE_MOUSE, devices[idx]->GetDeviceType()); | 2195 EXPECT_EQ(BluetoothDeviceType::MOUSE, devices[idx]->GetDeviceType()); |
| 2195 } | 2196 } |
| 2196 | 2197 |
| 2197 TEST_F(BluetoothBlueZTest, DeviceAppearance) { | 2198 TEST_F(BluetoothBlueZTest, DeviceAppearance) { |
| 2198 // Simulate a device with appearance. | 2199 // Simulate a device with appearance. |
| 2199 GetAdapter(); | 2200 GetAdapter(); |
| 2200 | 2201 |
| 2201 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); | 2202 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); |
| 2202 ASSERT_EQ(2U, devices.size()); | 2203 ASSERT_EQ(2U, devices.size()); |
| 2203 | 2204 |
| 2204 int idx = GetDeviceIndexByAddress( | 2205 int idx = GetDeviceIndexByAddress( |
| 2205 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); | 2206 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); |
| 2206 ASSERT_NE(-1, idx); | 2207 ASSERT_NE(-1, idx); |
| 2207 ASSERT_EQ(BluetoothDevice::DEVICE_COMPUTER, devices[idx]->GetDeviceType()); | 2208 ASSERT_EQ(BluetoothDeviceType::COMPUTER, devices[idx]->GetDeviceType()); |
| 2208 | 2209 |
| 2209 // Install an observer; expect the DeviceChanged method to be called when | 2210 // Install an observer; expect the DeviceChanged method to be called when |
| 2210 // we change the appearance of the device. | 2211 // we change the appearance of the device. |
| 2211 TestBluetoothAdapterObserver observer(adapter_); | 2212 TestBluetoothAdapterObserver observer(adapter_); |
| 2212 | 2213 |
| 2213 bluez::FakeBluetoothDeviceClient::Properties* properties = | 2214 bluez::FakeBluetoothDeviceClient::Properties* properties = |
| 2214 fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( | 2215 fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( |
| 2215 bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); | 2216 bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); |
| 2216 | 2217 |
| 2217 // Let the device come without bluetooth_class. | 2218 // Let the device come without bluetooth_class. |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2253 TEST_F(BluetoothBlueZTest, DeviceTypebyAppearanceNotBluetoothClass) { | 2254 TEST_F(BluetoothBlueZTest, DeviceTypebyAppearanceNotBluetoothClass) { |
| 2254 // Test device type of a device with appearance but without bluetooth class. | 2255 // Test device type of a device with appearance but without bluetooth class. |
| 2255 GetAdapter(); | 2256 GetAdapter(); |
| 2256 | 2257 |
| 2257 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); | 2258 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); |
| 2258 ASSERT_EQ(2U, devices.size()); | 2259 ASSERT_EQ(2U, devices.size()); |
| 2259 | 2260 |
| 2260 int idx = GetDeviceIndexByAddress( | 2261 int idx = GetDeviceIndexByAddress( |
| 2261 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); | 2262 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); |
| 2262 ASSERT_NE(-1, idx); | 2263 ASSERT_NE(-1, idx); |
| 2263 ASSERT_EQ(BluetoothDevice::DEVICE_COMPUTER, devices[idx]->GetDeviceType()); | 2264 ASSERT_EQ(BluetoothDeviceType::COMPUTER, devices[idx]->GetDeviceType()); |
| 2264 | 2265 |
| 2265 // Install an observer; expect the DeviceChanged method to be called when | 2266 // Install an observer; expect the DeviceChanged method to be called when |
| 2266 // we change the appearance of the device. | 2267 // we change the appearance of the device. |
| 2267 TestBluetoothAdapterObserver observer(adapter_); | 2268 TestBluetoothAdapterObserver observer(adapter_); |
| 2268 | 2269 |
| 2269 bluez::FakeBluetoothDeviceClient::Properties* properties = | 2270 bluez::FakeBluetoothDeviceClient::Properties* properties = |
| 2270 fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( | 2271 fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( |
| 2271 bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); | 2272 bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); |
| 2272 | 2273 |
| 2273 // Let the device come without bluetooth_class. | 2274 // Let the device come without bluetooth_class. |
| 2274 properties->bluetooth_class.ReplaceValue(0); // DeviceChanged method called | 2275 properties->bluetooth_class.ReplaceValue(0); // DeviceChanged method called |
| 2275 properties->appearance.ReplaceValue(0); // DeviceChanged method called | 2276 properties->appearance.ReplaceValue(0); // DeviceChanged method called |
| 2276 EXPECT_EQ(BluetoothDevice::DEVICE_UNKNOWN, devices[idx]->GetDeviceType()); | 2277 EXPECT_EQ(BluetoothDeviceType::UNKNOWN, devices[idx]->GetDeviceType()); |
| 2277 EXPECT_EQ(2, observer.device_changed_count()); | 2278 EXPECT_EQ(2, observer.device_changed_count()); |
| 2278 EXPECT_EQ(devices[idx], observer.last_device()); | 2279 EXPECT_EQ(devices[idx], observer.last_device()); |
| 2279 | 2280 |
| 2280 // Set the device appearance as keyboard. | 2281 // Set the device appearance as keyboard. |
| 2281 properties->appearance.ReplaceValue(961); // DeviceChanged method called | 2282 properties->appearance.ReplaceValue(961); // DeviceChanged method called |
| 2282 properties->appearance.set_valid(true); | 2283 properties->appearance.set_valid(true); |
| 2283 EXPECT_EQ(BluetoothDevice::DEVICE_KEYBOARD, devices[idx]->GetDeviceType()); | 2284 EXPECT_EQ(BluetoothDeviceType::KEYBOARD, devices[idx]->GetDeviceType()); |
| 2284 EXPECT_EQ(3, observer.device_changed_count()); | 2285 EXPECT_EQ(3, observer.device_changed_count()); |
| 2285 EXPECT_EQ(devices[idx], observer.last_device()); | 2286 EXPECT_EQ(devices[idx], observer.last_device()); |
| 2286 // When discovery is over, the value should be invalidated. | 2287 // When discovery is over, the value should be invalidated. |
| 2287 properties->appearance.set_valid(false); | 2288 properties->appearance.set_valid(false); |
| 2288 // DeviceChanged method called by NotifyPropertyChanged() | 2289 // DeviceChanged method called by NotifyPropertyChanged() |
| 2289 properties->NotifyPropertyChanged(properties->appearance.name()); | 2290 properties->NotifyPropertyChanged(properties->appearance.name()); |
| 2290 EXPECT_EQ(4, observer.device_changed_count()); | 2291 EXPECT_EQ(4, observer.device_changed_count()); |
| 2291 EXPECT_EQ(devices[idx], observer.last_device()); | 2292 EXPECT_EQ(devices[idx], observer.last_device()); |
| 2292 EXPECT_EQ(BluetoothDevice::DEVICE_UNKNOWN, devices[idx]->GetDeviceType()); | 2293 EXPECT_EQ(BluetoothDeviceType::UNKNOWN, devices[idx]->GetDeviceType()); |
| 2293 | 2294 |
| 2294 // Change the device appearance to mouse. | 2295 // Change the device appearance to mouse. |
| 2295 properties->appearance.ReplaceValue(962); // DeviceChanged method called | 2296 properties->appearance.ReplaceValue(962); // DeviceChanged method called |
| 2296 properties->appearance.set_valid(true); | 2297 properties->appearance.set_valid(true); |
| 2297 EXPECT_EQ(BluetoothDevice::DEVICE_MOUSE, devices[idx]->GetDeviceType()); | 2298 EXPECT_EQ(BluetoothDeviceType::MOUSE, devices[idx]->GetDeviceType()); |
| 2298 EXPECT_EQ(5, observer.device_changed_count()); | 2299 EXPECT_EQ(5, observer.device_changed_count()); |
| 2299 EXPECT_EQ(devices[idx], observer.last_device()); | 2300 EXPECT_EQ(devices[idx], observer.last_device()); |
| 2300 // When discovery is over, the value should be invalidated. | 2301 // When discovery is over, the value should be invalidated. |
| 2301 properties->appearance.set_valid(false); | 2302 properties->appearance.set_valid(false); |
| 2302 // DeviceChanged method called by NotifyPropertyChanged() | 2303 // DeviceChanged method called by NotifyPropertyChanged() |
| 2303 properties->NotifyPropertyChanged(properties->appearance.name()); | 2304 properties->NotifyPropertyChanged(properties->appearance.name()); |
| 2304 EXPECT_EQ(6, observer.device_changed_count()); | 2305 EXPECT_EQ(6, observer.device_changed_count()); |
| 2305 EXPECT_EQ(devices[idx], observer.last_device()); | 2306 EXPECT_EQ(devices[idx], observer.last_device()); |
| 2306 EXPECT_EQ(BluetoothDevice::DEVICE_UNKNOWN, devices[idx]->GetDeviceType()); | 2307 EXPECT_EQ(BluetoothDeviceType::UNKNOWN, devices[idx]->GetDeviceType()); |
| 2307 } | 2308 } |
| 2308 | 2309 |
| 2309 TEST_F(BluetoothBlueZTest, DeviceNameChanged) { | 2310 TEST_F(BluetoothBlueZTest, DeviceNameChanged) { |
| 2310 // Simulate a change of name of a device. | 2311 // Simulate a change of name of a device. |
| 2311 GetAdapter(); | 2312 GetAdapter(); |
| 2312 | 2313 |
| 2313 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); | 2314 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); |
| 2314 ASSERT_EQ(2U, devices.size()); | 2315 ASSERT_EQ(2U, devices.size()); |
| 2315 | 2316 |
| 2316 int idx = GetDeviceIndexByAddress( | 2317 int idx = GetDeviceIndexByAddress( |
| (...skipping 2163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4480 adapter_->Shutdown(); | 4481 adapter_->Shutdown(); |
| 4481 adapter_bluez->OnStopDiscoveryError(GetDiscoveryErrorCallback(), "", ""); | 4482 adapter_bluez->OnStopDiscoveryError(GetDiscoveryErrorCallback(), "", ""); |
| 4482 | 4483 |
| 4483 // 1 error reported to RemoveDiscoverySession because of OnStopDiscoveryError, | 4484 // 1 error reported to RemoveDiscoverySession because of OnStopDiscoveryError, |
| 4484 // and kNumberOfDiscoverySessions errors queued with AddDiscoverySession. | 4485 // and kNumberOfDiscoverySessions errors queued with AddDiscoverySession. |
| 4485 EXPECT_EQ(0, callback_count_); | 4486 EXPECT_EQ(0, callback_count_); |
| 4486 EXPECT_EQ(1 + kNumberOfDiscoverySessions, error_callback_count_); | 4487 EXPECT_EQ(1 + kNumberOfDiscoverySessions, error_callback_count_); |
| 4487 } | 4488 } |
| 4488 | 4489 |
| 4489 } // namespace bluez | 4490 } // namespace bluez |
| OLD | NEW |