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

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, 6 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 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 return; 255 return;
264 base::scoped_nsobject<NSDictionary> advertisement_data(AdvertisementData()); 256 base::scoped_nsobject<NSDictionary> advertisement_data(AdvertisementData());
265 257
266 EXPECT_EQ(0, NumDevices()); 258 EXPECT_EQ(0, NumDevices());
267 EXPECT_FALSE(DevicePresent(mock_peripheral)); 259 EXPECT_FALSE(DevicePresent(mock_peripheral));
268 LowEnergyDeviceUpdated(mock_peripheral, advertisement_data, kTestRssi); 260 LowEnergyDeviceUpdated(mock_peripheral, advertisement_data, kTestRssi);
269 EXPECT_EQ(1, NumDevices()); 261 EXPECT_EQ(1, NumDevices());
270 EXPECT_TRUE(DevicePresent(mock_peripheral)); 262 EXPECT_TRUE(DevicePresent(mock_peripheral));
271 } 263 }
272 264
273 TEST_F(BluetoothAdapterMacTest, LowEnergyDeviceUpdatedOldDevice) {
274 if (!SetMockCentralManager(CBCentralManagerStatePoweredOn))
275 return;
276 base::scoped_nsobject<CBPeripheral> mock_peripheral(
277 CreateMockPeripheral(kTestNSUUID));
278 if (mock_peripheral.get() == nil)
279 return;
280 base::scoped_nsobject<NSDictionary> advertisement_data(AdvertisementData());
281
282 // Update the device for the first time and check it was correctly added to
283 // |devices_|.
284 EXPECT_EQ(0, NumDevices());
285 EXPECT_FALSE(DevicePresent(mock_peripheral));
286 LowEnergyDeviceUpdated(mock_peripheral, advertisement_data, kTestRssi);
287 EXPECT_EQ(1, NumDevices());
288 EXPECT_TRUE(DevicePresent(mock_peripheral));
289 // Search for the device by the address corresponding to |kTestNSUUID|.
290 BluetoothDeviceMac* device =
291 static_cast<BluetoothDeviceMac*>(GetDevice(kTestHashAddress));
292 base::scoped_nsobject<NSDate> first_update_time(
293 [device->GetLastUpdateTime() retain]);
294
295 // Update the device a second time. The device should be updated in
296 // |devices_| so check the time returned by GetLastUpdateTime() has increased.
297 LowEnergyDeviceUpdated(mock_peripheral, advertisement_data, kTestRssi);
298 EXPECT_EQ(1, NumDevices());
299 EXPECT_TRUE(DevicePresent(mock_peripheral));
300 device = static_cast<BluetoothDeviceMac*>(GetDevice(kTestHashAddress));
301 EXPECT_TRUE([device->GetLastUpdateTime() compare:first_update_time] ==
302 NSOrderedDescending);
303 }
304
305 TEST_F(BluetoothAdapterMacTest, UpdateDevicesRemovesLowEnergyDevice) {
306 if (!SetMockCentralManager(CBCentralManagerStatePoweredOn))
307 return;
308 base::scoped_nsobject<CBPeripheral> mock_peripheral(
309 CreateMockPeripheral(kTestNSUUID));
310 if (mock_peripheral.get() == nil)
311 return;
312 base::scoped_nsobject<NSDictionary> advertisement_data(AdvertisementData());
313
314 BluetoothLowEnergyDeviceMac* device = new BluetoothLowEnergyDeviceMac(
315 adapter_mac_, mock_peripheral, advertisement_data, kTestRssi);
316 SetDeviceTimeGreaterThanTimeout(device);
317
318 EXPECT_EQ(0, NumDevices());
319 AddLowEnergyDevice(device);
320 EXPECT_EQ(1, NumDevices());
321 EXPECT_TRUE(DevicePresent(mock_peripheral));
322
323 // Check that object pointed to by |device| is deleted by the adapter.
324 RemoveTimedOutDevices();
325 EXPECT_EQ(0, NumDevices());
326 EXPECT_FALSE(DevicePresent(mock_peripheral));
327 }
328
329 } // namespace device 265 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698