| 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 18 matching lines...) Expand all Loading... |
| 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::BluetoothAudioSink; | 37 using device::BluetoothAudioSink; |
| 38 using device::BluetoothDevice; | 38 using device::BluetoothDevice; |
| 39 using device::BluetoothDeviceType; |
| 39 using device::BluetoothDiscoveryFilter; | 40 using device::BluetoothDiscoveryFilter; |
| 40 using device::BluetoothDiscoverySession; | 41 using device::BluetoothDiscoverySession; |
| 41 using device::BluetoothUUID; | 42 using device::BluetoothUUID; |
| 42 using device::TestBluetoothAdapterObserver; | 43 using device::TestBluetoothAdapterObserver; |
| 43 | 44 |
| 44 namespace bluez { | 45 namespace bluez { |
| 45 | 46 |
| 46 namespace { | 47 namespace { |
| 47 | 48 |
| 48 // Callback for BluetoothDevice::GetConnectionInfo() that simply saves the | 49 // Callback for BluetoothDevice::GetConnectionInfo() that simply saves the |
| (...skipping 2101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2150 int idx = GetDeviceIndexByAddress( | 2151 int idx = GetDeviceIndexByAddress( |
| 2151 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); | 2152 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); |
| 2152 ASSERT_NE(-1, idx); | 2153 ASSERT_NE(-1, idx); |
| 2153 ASSERT_EQ(bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress, | 2154 ASSERT_EQ(bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress, |
| 2154 devices[idx]->GetAddress()); | 2155 devices[idx]->GetAddress()); |
| 2155 | 2156 |
| 2156 // Verify the other device properties. | 2157 // Verify the other device properties. |
| 2157 EXPECT_EQ( | 2158 EXPECT_EQ( |
| 2158 base::UTF8ToUTF16(bluez::FakeBluetoothDeviceClient::kPairedDeviceAlias), | 2159 base::UTF8ToUTF16(bluez::FakeBluetoothDeviceClient::kPairedDeviceAlias), |
| 2159 devices[idx]->GetNameForDisplay()); | 2160 devices[idx]->GetNameForDisplay()); |
| 2160 EXPECT_EQ(BluetoothDevice::DEVICE_COMPUTER, devices[idx]->GetDeviceType()); | 2161 EXPECT_EQ(BluetoothDeviceType::COMPUTER, devices[idx]->GetDeviceType()); |
| 2161 EXPECT_TRUE(devices[idx]->IsPaired()); | 2162 EXPECT_TRUE(devices[idx]->IsPaired()); |
| 2162 EXPECT_FALSE(devices[idx]->IsConnected()); | 2163 EXPECT_FALSE(devices[idx]->IsConnected()); |
| 2163 EXPECT_FALSE(devices[idx]->IsConnecting()); | 2164 EXPECT_FALSE(devices[idx]->IsConnecting()); |
| 2164 | 2165 |
| 2165 // Non HID devices are always connectable. | 2166 // Non HID devices are always connectable. |
| 2166 EXPECT_TRUE(devices[idx]->IsConnectable()); | 2167 EXPECT_TRUE(devices[idx]->IsConnectable()); |
| 2167 | 2168 |
| 2168 BluetoothDevice::UUIDSet uuids = devices[idx]->GetUUIDs(); | 2169 BluetoothDevice::UUIDSet uuids = devices[idx]->GetUUIDs(); |
| 2169 EXPECT_EQ(2U, uuids.size()); | 2170 EXPECT_EQ(2U, uuids.size()); |
| 2170 EXPECT_TRUE(base::ContainsKey(uuids, BluetoothUUID("1800"))); | 2171 EXPECT_TRUE(base::ContainsKey(uuids, BluetoothUUID("1800"))); |
| 2171 EXPECT_TRUE(base::ContainsKey(uuids, BluetoothUUID("1801"))); | 2172 EXPECT_TRUE(base::ContainsKey(uuids, BluetoothUUID("1801"))); |
| 2172 | 2173 |
| 2173 EXPECT_EQ(BluetoothDevice::VENDOR_ID_USB, devices[idx]->GetVendorIDSource()); | 2174 EXPECT_EQ(BluetoothDevice::VENDOR_ID_USB, devices[idx]->GetVendorIDSource()); |
| 2174 EXPECT_EQ(0x05ac, devices[idx]->GetVendorID()); | 2175 EXPECT_EQ(0x05ac, devices[idx]->GetVendorID()); |
| 2175 EXPECT_EQ(0x030d, devices[idx]->GetProductID()); | 2176 EXPECT_EQ(0x030d, devices[idx]->GetProductID()); |
| 2176 EXPECT_EQ(0x0306, devices[idx]->GetDeviceID()); | 2177 EXPECT_EQ(0x0306, devices[idx]->GetDeviceID()); |
| 2177 } | 2178 } |
| 2178 | 2179 |
| 2179 TEST_F(BluetoothBlueZTest, DeviceClassChanged) { | 2180 TEST_F(BluetoothBlueZTest, DeviceClassChanged) { |
| 2180 // Simulate a change of class of a device, as sometimes occurs | 2181 // Simulate a change of class of a device, as sometimes occurs |
| 2181 // during discovery. | 2182 // during discovery. |
| 2182 GetAdapter(); | 2183 GetAdapter(); |
| 2183 | 2184 |
| 2184 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); | 2185 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); |
| 2185 ASSERT_EQ(2U, devices.size()); | 2186 ASSERT_EQ(2U, devices.size()); |
| 2186 | 2187 |
| 2187 int idx = GetDeviceIndexByAddress( | 2188 int idx = GetDeviceIndexByAddress( |
| 2188 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); | 2189 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); |
| 2189 ASSERT_NE(-1, idx); | 2190 ASSERT_NE(-1, idx); |
| 2190 ASSERT_EQ(BluetoothDevice::DEVICE_COMPUTER, devices[idx]->GetDeviceType()); | 2191 ASSERT_EQ(BluetoothDeviceType::COMPUTER, devices[idx]->GetDeviceType()); |
| 2191 | 2192 |
| 2192 // Install an observer; expect the DeviceChanged method to be called when | 2193 // Install an observer; expect the DeviceChanged method to be called when |
| 2193 // we change the class of the device. | 2194 // we change the class of the device. |
| 2194 TestBluetoothAdapterObserver observer(adapter_); | 2195 TestBluetoothAdapterObserver observer(adapter_); |
| 2195 | 2196 |
| 2196 bluez::FakeBluetoothDeviceClient::Properties* properties = | 2197 bluez::FakeBluetoothDeviceClient::Properties* properties = |
| 2197 fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( | 2198 fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( |
| 2198 bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); | 2199 bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); |
| 2199 | 2200 |
| 2200 properties->bluetooth_class.ReplaceValue(0x002580); | 2201 properties->bluetooth_class.ReplaceValue(0x002580); |
| 2201 | 2202 |
| 2202 EXPECT_EQ(1, observer.device_changed_count()); | 2203 EXPECT_EQ(1, observer.device_changed_count()); |
| 2203 EXPECT_EQ(devices[idx], observer.last_device()); | 2204 EXPECT_EQ(devices[idx], observer.last_device()); |
| 2204 | 2205 |
| 2205 EXPECT_EQ(BluetoothDevice::DEVICE_MOUSE, devices[idx]->GetDeviceType()); | 2206 EXPECT_EQ(BluetoothDeviceType::MOUSE, devices[idx]->GetDeviceType()); |
| 2206 } | 2207 } |
| 2207 | 2208 |
| 2208 TEST_F(BluetoothBlueZTest, DeviceAppearance) { | 2209 TEST_F(BluetoothBlueZTest, DeviceAppearance) { |
| 2209 // Simulate a device with appearance. | 2210 // Simulate a device with appearance. |
| 2210 GetAdapter(); | 2211 GetAdapter(); |
| 2211 | 2212 |
| 2212 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); | 2213 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); |
| 2213 ASSERT_EQ(2U, devices.size()); | 2214 ASSERT_EQ(2U, devices.size()); |
| 2214 | 2215 |
| 2215 int idx = GetDeviceIndexByAddress( | 2216 int idx = GetDeviceIndexByAddress( |
| 2216 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); | 2217 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); |
| 2217 ASSERT_NE(-1, idx); | 2218 ASSERT_NE(-1, idx); |
| 2218 ASSERT_EQ(BluetoothDevice::DEVICE_COMPUTER, devices[idx]->GetDeviceType()); | 2219 ASSERT_EQ(BluetoothDeviceType::COMPUTER, devices[idx]->GetDeviceType()); |
| 2219 | 2220 |
| 2220 // Install an observer; expect the DeviceChanged method to be called when | 2221 // Install an observer; expect the DeviceChanged method to be called when |
| 2221 // we change the appearance of the device. | 2222 // we change the appearance of the device. |
| 2222 TestBluetoothAdapterObserver observer(adapter_); | 2223 TestBluetoothAdapterObserver observer(adapter_); |
| 2223 | 2224 |
| 2224 bluez::FakeBluetoothDeviceClient::Properties* properties = | 2225 bluez::FakeBluetoothDeviceClient::Properties* properties = |
| 2225 fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( | 2226 fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( |
| 2226 bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); | 2227 bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); |
| 2227 | 2228 |
| 2228 // Let the device come without bluetooth_class. | 2229 // Let the device come without bluetooth_class. |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2264 TEST_F(BluetoothBlueZTest, DeviceTypebyAppearanceNotBluetoothClass) { | 2265 TEST_F(BluetoothBlueZTest, DeviceTypebyAppearanceNotBluetoothClass) { |
| 2265 // Test device type of a device with appearance but without bluetooth class. | 2266 // Test device type of a device with appearance but without bluetooth class. |
| 2266 GetAdapter(); | 2267 GetAdapter(); |
| 2267 | 2268 |
| 2268 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); | 2269 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); |
| 2269 ASSERT_EQ(2U, devices.size()); | 2270 ASSERT_EQ(2U, devices.size()); |
| 2270 | 2271 |
| 2271 int idx = GetDeviceIndexByAddress( | 2272 int idx = GetDeviceIndexByAddress( |
| 2272 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); | 2273 devices, bluez::FakeBluetoothDeviceClient::kPairedDeviceAddress); |
| 2273 ASSERT_NE(-1, idx); | 2274 ASSERT_NE(-1, idx); |
| 2274 ASSERT_EQ(BluetoothDevice::DEVICE_COMPUTER, devices[idx]->GetDeviceType()); | 2275 ASSERT_EQ(BluetoothDeviceType::COMPUTER, devices[idx]->GetDeviceType()); |
| 2275 | 2276 |
| 2276 // Install an observer; expect the DeviceChanged method to be called when | 2277 // Install an observer; expect the DeviceChanged method to be called when |
| 2277 // we change the appearance of the device. | 2278 // we change the appearance of the device. |
| 2278 TestBluetoothAdapterObserver observer(adapter_); | 2279 TestBluetoothAdapterObserver observer(adapter_); |
| 2279 | 2280 |
| 2280 bluez::FakeBluetoothDeviceClient::Properties* properties = | 2281 bluez::FakeBluetoothDeviceClient::Properties* properties = |
| 2281 fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( | 2282 fake_bluetooth_device_client_->GetProperties(dbus::ObjectPath( |
| 2282 bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); | 2283 bluez::FakeBluetoothDeviceClient::kPairedDevicePath)); |
| 2283 | 2284 |
| 2284 // Let the device come without bluetooth_class. | 2285 // Let the device come without bluetooth_class. |
| 2285 properties->bluetooth_class.ReplaceValue(0); // DeviceChanged method called | 2286 properties->bluetooth_class.ReplaceValue(0); // DeviceChanged method called |
| 2286 properties->appearance.ReplaceValue(0); // DeviceChanged method called | 2287 properties->appearance.ReplaceValue(0); // DeviceChanged method called |
| 2287 EXPECT_EQ(BluetoothDevice::DEVICE_UNKNOWN, devices[idx]->GetDeviceType()); | 2288 EXPECT_EQ(BluetoothDeviceType::UNKNOWN, devices[idx]->GetDeviceType()); |
| 2288 EXPECT_EQ(2, observer.device_changed_count()); | 2289 EXPECT_EQ(2, observer.device_changed_count()); |
| 2289 EXPECT_EQ(devices[idx], observer.last_device()); | 2290 EXPECT_EQ(devices[idx], observer.last_device()); |
| 2290 | 2291 |
| 2291 // Set the device appearance as keyboard. | 2292 // Set the device appearance as keyboard. |
| 2292 properties->appearance.ReplaceValue(961); // DeviceChanged method called | 2293 properties->appearance.ReplaceValue(961); // DeviceChanged method called |
| 2293 properties->appearance.set_valid(true); | 2294 properties->appearance.set_valid(true); |
| 2294 EXPECT_EQ(BluetoothDevice::DEVICE_KEYBOARD, devices[idx]->GetDeviceType()); | 2295 EXPECT_EQ(BluetoothDeviceType::KEYBOARD, devices[idx]->GetDeviceType()); |
| 2295 EXPECT_EQ(3, observer.device_changed_count()); | 2296 EXPECT_EQ(3, observer.device_changed_count()); |
| 2296 EXPECT_EQ(devices[idx], observer.last_device()); | 2297 EXPECT_EQ(devices[idx], observer.last_device()); |
| 2297 // When discovery is over, the value should be invalidated. | 2298 // When discovery is over, the value should be invalidated. |
| 2298 properties->appearance.set_valid(false); | 2299 properties->appearance.set_valid(false); |
| 2299 // DeviceChanged method called by NotifyPropertyChanged() | 2300 // DeviceChanged method called by NotifyPropertyChanged() |
| 2300 properties->NotifyPropertyChanged(properties->appearance.name()); | 2301 properties->NotifyPropertyChanged(properties->appearance.name()); |
| 2301 EXPECT_EQ(4, observer.device_changed_count()); | 2302 EXPECT_EQ(4, observer.device_changed_count()); |
| 2302 EXPECT_EQ(devices[idx], observer.last_device()); | 2303 EXPECT_EQ(devices[idx], observer.last_device()); |
| 2303 EXPECT_EQ(BluetoothDevice::DEVICE_UNKNOWN, devices[idx]->GetDeviceType()); | 2304 EXPECT_EQ(BluetoothDeviceType::UNKNOWN, devices[idx]->GetDeviceType()); |
| 2304 | 2305 |
| 2305 // Change the device appearance to mouse. | 2306 // Change the device appearance to mouse. |
| 2306 properties->appearance.ReplaceValue(962); // DeviceChanged method called | 2307 properties->appearance.ReplaceValue(962); // DeviceChanged method called |
| 2307 properties->appearance.set_valid(true); | 2308 properties->appearance.set_valid(true); |
| 2308 EXPECT_EQ(BluetoothDevice::DEVICE_MOUSE, devices[idx]->GetDeviceType()); | 2309 EXPECT_EQ(BluetoothDeviceType::MOUSE, devices[idx]->GetDeviceType()); |
| 2309 EXPECT_EQ(5, observer.device_changed_count()); | 2310 EXPECT_EQ(5, observer.device_changed_count()); |
| 2310 EXPECT_EQ(devices[idx], observer.last_device()); | 2311 EXPECT_EQ(devices[idx], observer.last_device()); |
| 2311 // When discovery is over, the value should be invalidated. | 2312 // When discovery is over, the value should be invalidated. |
| 2312 properties->appearance.set_valid(false); | 2313 properties->appearance.set_valid(false); |
| 2313 // DeviceChanged method called by NotifyPropertyChanged() | 2314 // DeviceChanged method called by NotifyPropertyChanged() |
| 2314 properties->NotifyPropertyChanged(properties->appearance.name()); | 2315 properties->NotifyPropertyChanged(properties->appearance.name()); |
| 2315 EXPECT_EQ(6, observer.device_changed_count()); | 2316 EXPECT_EQ(6, observer.device_changed_count()); |
| 2316 EXPECT_EQ(devices[idx], observer.last_device()); | 2317 EXPECT_EQ(devices[idx], observer.last_device()); |
| 2317 EXPECT_EQ(BluetoothDevice::DEVICE_UNKNOWN, devices[idx]->GetDeviceType()); | 2318 EXPECT_EQ(BluetoothDeviceType::UNKNOWN, devices[idx]->GetDeviceType()); |
| 2318 } | 2319 } |
| 2319 | 2320 |
| 2320 TEST_F(BluetoothBlueZTest, DeviceNameChanged) { | 2321 TEST_F(BluetoothBlueZTest, DeviceNameChanged) { |
| 2321 // Simulate a change of name of a device. | 2322 // Simulate a change of name of a device. |
| 2322 GetAdapter(); | 2323 GetAdapter(); |
| 2323 | 2324 |
| 2324 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); | 2325 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); |
| 2325 ASSERT_EQ(2U, devices.size()); | 2326 ASSERT_EQ(2U, devices.size()); |
| 2326 | 2327 |
| 2327 int idx = GetDeviceIndexByAddress( | 2328 int idx = GetDeviceIndexByAddress( |
| (...skipping 2182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4510 adapter_->Shutdown(); | 4511 adapter_->Shutdown(); |
| 4511 adapter_bluez->OnStopDiscoveryError(GetDiscoveryErrorCallback(), "", ""); | 4512 adapter_bluez->OnStopDiscoveryError(GetDiscoveryErrorCallback(), "", ""); |
| 4512 | 4513 |
| 4513 // 1 error reported to RemoveDiscoverySession because of OnStopDiscoveryError, | 4514 // 1 error reported to RemoveDiscoverySession because of OnStopDiscoveryError, |
| 4514 // and kNumberOfDiscoverySessions errors queued with AddDiscoverySession. | 4515 // and kNumberOfDiscoverySessions errors queued with AddDiscoverySession. |
| 4515 EXPECT_EQ(0, callback_count_); | 4516 EXPECT_EQ(0, callback_count_); |
| 4516 EXPECT_EQ(1 + kNumberOfDiscoverySessions, error_callback_count_); | 4517 EXPECT_EQ(1 + kNumberOfDiscoverySessions, error_callback_count_); |
| 4517 } | 4518 } |
| 4518 | 4519 |
| 4519 } // namespace bluez | 4520 } // namespace bluez |
| OLD | NEW |