Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: device/bluetooth/bluetooth_adapter_mac_unittest.mm

Issue 1842223003: Remove outdated devices from Android device chooser (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased on master Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "device/bluetooth/bluetooth_adapter_mac.h" 5 #include "device/bluetooth/bluetooth_adapter_mac.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/ref_counted.h" 10 #include "base/memory/ref_counted.h"
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 CBAdvertisementDataIsConnectable : @(YES), 75 CBAdvertisementDataIsConnectable : @(YES),
76 CBAdvertisementDataServiceDataKey : [NSDictionary dictionary], 76 CBAdvertisementDataServiceDataKey : [NSDictionary dictionary],
77 }; 77 };
78 return [advertisement_data retain]; 78 return [advertisement_data retain];
79 } 79 }
80 80
81 std::string GetHashAddress(CBPeripheral* peripheral) { 81 std::string GetHashAddress(CBPeripheral* peripheral) {
82 return BluetoothLowEnergyDeviceMac::GetPeripheralHashAddress(peripheral); 82 return BluetoothLowEnergyDeviceMac::GetPeripheralHashAddress(peripheral);
83 } 83 }
84 84
85 void SetDeviceTimeGreaterThanTimeout(BluetoothLowEnergyDeviceMac* device) {
86 device->last_update_time_.reset([[NSDate
87 dateWithTimeInterval:-(BluetoothAdapterMac::kDiscoveryTimeoutSec + 1)
88 sinceDate:[NSDate date]] retain]);
89 }
90
91 void AddLowEnergyDevice(BluetoothLowEnergyDeviceMac* device) { 85 void AddLowEnergyDevice(BluetoothLowEnergyDeviceMac* device) {
92 adapter_mac_->devices_.set(device->GetAddress(), 86 adapter_mac_->devices_.set(device->GetAddress(),
93 std::unique_ptr<BluetoothDevice>(device)); 87 std::unique_ptr<BluetoothDevice>(device));
94 } 88 }
95 89
96 int NumDevices() { return adapter_mac_->devices_.size(); } 90 int NumDevices() { return adapter_mac_->devices_.size(); }
97 91
98 bool DevicePresent(CBPeripheral* peripheral) { 92 bool DevicePresent(CBPeripheral* peripheral) {
99 BluetoothDevice* device = adapter_mac_->GetDevice( 93 BluetoothDevice* device = adapter_mac_->GetDevice(
100 BluetoothLowEnergyDeviceMac::GetPeripheralHashAddress(peripheral)); 94 BluetoothLowEnergyDeviceMac::GetPeripheralHashAddress(peripheral));
101 return (device != NULL); 95 return (device != NULL);
102 } 96 }
103 97
104 void RemoveTimedOutDevices() { adapter_mac_->RemoveTimedOutDevices(); }
105
106 bool SetMockCentralManager(CBCentralManagerState desired_state) { 98 bool SetMockCentralManager(CBCentralManagerState desired_state) {
107 if (!BluetoothAdapterMac::IsLowEnergyAvailable()) { 99 if (!BluetoothAdapterMac::IsLowEnergyAvailable()) {
108 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test."; 100 LOG(WARNING) << "Low Energy Bluetooth unavailable, skipping unit test.";
109 return false; 101 return false;
110 } 102 }
111 mock_central_manager_.reset([[MockCentralManager alloc] init]); 103 mock_central_manager_.reset([[MockCentralManager alloc] init]);
112 [mock_central_manager_ setState:desired_state]; 104 [mock_central_manager_ setState:desired_state];
113 CBCentralManager* centralManager = 105 CBCentralManager* centralManager =
114 (CBCentralManager*)mock_central_manager_.get(); 106 (CBCentralManager*)mock_central_manager_.get();
115 adapter_mac_->SetCentralManagerForTesting(centralManager); 107 adapter_mac_->SetCentralManagerForTesting(centralManager);
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 base::scoped_nsobject<NSDictionary> advertisement_data( 256 base::scoped_nsobject<NSDictionary> advertisement_data(
265 CreateAdvertisementData()); 257 CreateAdvertisementData());
266 258
267 EXPECT_EQ(0, NumDevices()); 259 EXPECT_EQ(0, NumDevices());
268 EXPECT_FALSE(DevicePresent(mock_peripheral)); 260 EXPECT_FALSE(DevicePresent(mock_peripheral));
269 LowEnergyDeviceUpdated(mock_peripheral, advertisement_data, kTestRssi); 261 LowEnergyDeviceUpdated(mock_peripheral, advertisement_data, kTestRssi);
270 EXPECT_EQ(1, NumDevices()); 262 EXPECT_EQ(1, NumDevices());
271 EXPECT_TRUE(DevicePresent(mock_peripheral)); 263 EXPECT_TRUE(DevicePresent(mock_peripheral));
272 } 264 }
273 265
274 TEST_F(BluetoothAdapterMacTest, LowEnergyDeviceUpdatedOldDevice) {
275 if (!SetMockCentralManager(CBCentralManagerStatePoweredOn))
276 return;
277 base::scoped_nsobject<CBPeripheral> mock_peripheral(
278 CreateMockPeripheral(kTestNSUUID));
279 if (mock_peripheral.get() == nil)
280 return;
281 base::scoped_nsobject<NSDictionary> advertisement_data(
282 CreateAdvertisementData());
283
284 // Update the device for the first time and check it was correctly added to
285 // |devices_|.
286 EXPECT_EQ(0, NumDevices());
287 EXPECT_FALSE(DevicePresent(mock_peripheral));
288 LowEnergyDeviceUpdated(mock_peripheral, advertisement_data, kTestRssi);
289 EXPECT_EQ(1, NumDevices());
290 EXPECT_TRUE(DevicePresent(mock_peripheral));
291 // Search for the device by the address corresponding to |kTestNSUUID|.
292 BluetoothDeviceMac* device =
293 static_cast<BluetoothDeviceMac*>(GetDevice(kTestHashAddress));
294 base::scoped_nsobject<NSDate> first_update_time(
295 [device->GetLastUpdateTime() retain]);
296
297 // Update the device a second time. The device should be updated in
298 // |devices_| so check the time returned by GetLastUpdateTime() has increased.
299 LowEnergyDeviceUpdated(mock_peripheral, advertisement_data, kTestRssi);
300 EXPECT_EQ(1, NumDevices());
301 EXPECT_TRUE(DevicePresent(mock_peripheral));
302 device = static_cast<BluetoothDeviceMac*>(GetDevice(kTestHashAddress));
303 EXPECT_TRUE([device->GetLastUpdateTime() compare:first_update_time] ==
304 NSOrderedDescending);
305 }
306
307 TEST_F(BluetoothAdapterMacTest, UpdateDevicesRemovesLowEnergyDevice) {
308 if (!SetMockCentralManager(CBCentralManagerStatePoweredOn))
309 return;
310 base::scoped_nsobject<CBPeripheral> mock_peripheral(
311 CreateMockPeripheral(kTestNSUUID));
312 if (mock_peripheral.get() == nil)
313 return;
314 base::scoped_nsobject<NSDictionary> advertisement_data(
315 CreateAdvertisementData());
316
317 BluetoothLowEnergyDeviceMac* device = new BluetoothLowEnergyDeviceMac(
318 adapter_mac_, mock_peripheral, advertisement_data, kTestRssi);
319 SetDeviceTimeGreaterThanTimeout(device);
320
321 EXPECT_EQ(0, NumDevices());
322 AddLowEnergyDevice(device);
323 EXPECT_EQ(1, NumDevices());
324 EXPECT_TRUE(DevicePresent(mock_peripheral));
325
326 // Check that object pointed to by |device| is deleted by the adapter.
327 RemoveTimedOutDevices();
328 EXPECT_EQ(0, NumDevices());
329 EXPECT_FALSE(DevicePresent(mock_peripheral));
330 }
331
332 } // namespace device 266 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698