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

Side by Side Diff: components/proximity_auth/ble/bluetooth_low_energy_characteristics_finder_unittest.cc

Issue 2561203002: Migrate weave-related classes from proximity_auth/ble to cryptauth/ble. (Closed)
Patch Set: Created 4 years 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
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/proximity_auth/ble/bluetooth_low_energy_characteristics_fin der.h"
6
7 #include <memory>
8
9 #include "base/bind.h"
10 #include "base/memory/ref_counted.h"
11 #include "components/proximity_auth/ble/remote_attribute.h"
12 #include "device/bluetooth/bluetooth_adapter_factory.h"
13 #include "device/bluetooth/bluetooth_uuid.h"
14 #include "device/bluetooth/test/mock_bluetooth_adapter.h"
15 #include "device/bluetooth/test/mock_bluetooth_device.h"
16 #include "device/bluetooth/test/mock_bluetooth_gatt_characteristic.h"
17 #include "device/bluetooth/test/mock_bluetooth_gatt_service.h"
18 #include "testing/gmock/include/gmock/gmock.h"
19 #include "testing/gtest/include/gtest/gtest.h"
20
21 using testing::_;
22 using testing::AtLeast;
23 using testing::NiceMock;
24 using testing::Return;
25 using testing::StrictMock;
26 using testing::SaveArg;
27
28 namespace proximity_auth {
29 namespace {
30
31 const char kDeviceName[] = "Device name";
32 const char kBluetoothAddress[] = "11:22:33:44:55:66";
33
34 const char kServiceUUID[] = "DEADBEEF-CAFE-FEED-FOOD-D15EA5EBEEEF";
35 const char kToPeripheralCharUUID[] = "FBAE09F2-0482-11E5-8418-1697F925EC7B";
36 const char kFromPeripheralCharUUID[] = "5539ED10-0483-11E5-8418-1697F925EC7B";
37
38 const char kToPeripheralCharID[] = "to peripheral id";
39 const char kFromPeripheralCharID[] = "from peripheral id";
40
41 const device::BluetoothRemoteGattCharacteristic::Properties
42 kCharacteristicProperties =
43 device::BluetoothRemoteGattCharacteristic::PROPERTY_BROADCAST |
44 device::BluetoothRemoteGattCharacteristic::PROPERTY_READ |
45 device::BluetoothRemoteGattCharacteristic::
46 PROPERTY_WRITE_WITHOUT_RESPONSE |
47 device::BluetoothRemoteGattCharacteristic::PROPERTY_INDICATE;
48
49 const char kOtherCharUUID[] = "09731422-048A-11E5-8418-1697F925EC7B";
50 const char kOtherCharID[] = "other id";
51 } // namespace
52
53 class ProximityAuthBluetoothLowEnergyCharacteristicFinderTest
54 : public testing::Test {
55 protected:
56 ProximityAuthBluetoothLowEnergyCharacteristicFinderTest()
57 : adapter_(new NiceMock<device::MockBluetoothAdapter>),
58 success_callback_(base::Bind(
59 &ProximityAuthBluetoothLowEnergyCharacteristicFinderTest::
60 OnCharacteristicsFound,
61 base::Unretained(this))),
62 error_callback_(base::Bind(
63 &ProximityAuthBluetoothLowEnergyCharacteristicFinderTest::
64 OnCharacteristicsFinderError,
65 base::Unretained(this))),
66 device_(new NiceMock<device::MockBluetoothDevice>(adapter_.get(),
67 0,
68 kDeviceName,
69 kBluetoothAddress,
70 false,
71 false)),
72 service_(new NiceMock<device::MockBluetoothGattService>(
73 device_.get(),
74 "",
75 device::BluetoothUUID(kServiceUUID),
76 true,
77 false)),
78 remote_service_({device::BluetoothUUID(kServiceUUID), ""}),
79 to_peripheral_char_({device::BluetoothUUID(kToPeripheralCharUUID), ""}),
80 from_peripheral_char_(
81 {device::BluetoothUUID(kFromPeripheralCharUUID), ""}) {
82 device::BluetoothAdapterFactory::SetAdapterForTesting(adapter_);
83
84 // The default behavior for |device_| is to have no services discovered. Can
85 // be overrided later.
86 ON_CALL(*device_, GetGattServices())
87 .WillByDefault(
88 Return(std::vector<device::BluetoothRemoteGattService*>()));
89 }
90
91 void SetUp() {
92 EXPECT_CALL(*adapter_, AddObserver(_));
93 EXPECT_CALL(*adapter_, RemoveObserver(_));
94 }
95
96 MOCK_METHOD3(OnCharacteristicsFound,
97 void(const RemoteAttribute&,
98 const RemoteAttribute&,
99 const RemoteAttribute&));
100 MOCK_METHOD2(OnCharacteristicsFinderError,
101 void(const RemoteAttribute&, const RemoteAttribute&));
102
103 std::unique_ptr<device::MockBluetoothGattCharacteristic>
104 ExpectToFindCharacteristic(const device::BluetoothUUID& uuid,
105 const std::string& id,
106 bool valid) {
107 std::unique_ptr<device::MockBluetoothGattCharacteristic> characteristic(
108 new NiceMock<device::MockBluetoothGattCharacteristic>(
109 service_.get(), id, uuid, true, kCharacteristicProperties,
110 device::BluetoothRemoteGattCharacteristic::PERMISSION_NONE));
111
112 ON_CALL(*characteristic.get(), GetUUID()).WillByDefault(Return(uuid));
113 if (valid)
114 ON_CALL(*characteristic.get(), GetIdentifier()).WillByDefault(Return(id));
115 ON_CALL(*characteristic.get(), GetService())
116 .WillByDefault(Return(service_.get()));
117 return characteristic;
118 }
119
120 scoped_refptr<device::MockBluetoothAdapter> adapter_;
121 BluetoothLowEnergyCharacteristicsFinder::SuccessCallback success_callback_;
122 BluetoothLowEnergyCharacteristicsFinder::ErrorCallback error_callback_;
123 std::unique_ptr<device::MockBluetoothDevice> device_;
124 std::unique_ptr<device::MockBluetoothGattService> service_;
125 RemoteAttribute remote_service_;
126 RemoteAttribute to_peripheral_char_;
127 RemoteAttribute from_peripheral_char_;
128 };
129
130 TEST_F(ProximityAuthBluetoothLowEnergyCharacteristicFinderTest,
131 ConstructAndDestroyDontCrash) {
132 BluetoothLowEnergyCharacteristicsFinder characteristic_finder(
133 adapter_, device_.get(), remote_service_, to_peripheral_char_,
134 from_peripheral_char_, success_callback_, error_callback_);
135 }
136
137 TEST_F(ProximityAuthBluetoothLowEnergyCharacteristicFinderTest,
138 FindRightCharacteristics) {
139 BluetoothLowEnergyCharacteristicsFinder characteristic_finder(
140 adapter_, device_.get(), remote_service_, to_peripheral_char_,
141 from_peripheral_char_, success_callback_, error_callback_);
142 // Upcasting |characteristic_finder| to access the virtual protected methods
143 // from Observer: GattCharacteristicAdded() and
144 // GattDiscoveryCompleteForService().
145 device::BluetoothAdapter::Observer* observer =
146 static_cast<device::BluetoothAdapter::Observer*>(&characteristic_finder);
147
148 RemoteAttribute found_to_char, found_from_char;
149 EXPECT_CALL(*this, OnCharacteristicsFound(_, _, _))
150 .WillOnce(
151 DoAll(SaveArg<1>(&found_to_char), SaveArg<2>(&found_from_char)));
152 EXPECT_CALL(*this, OnCharacteristicsFinderError(_, _)).Times(0);
153
154 std::unique_ptr<device::MockBluetoothGattCharacteristic> from_char =
155 ExpectToFindCharacteristic(device::BluetoothUUID(kFromPeripheralCharUUID),
156 kFromPeripheralCharID, true);
157 observer->GattCharacteristicAdded(adapter_.get(), from_char.get());
158
159 std::unique_ptr<device::MockBluetoothGattCharacteristic> to_char =
160 ExpectToFindCharacteristic(device::BluetoothUUID(kToPeripheralCharUUID),
161 kToPeripheralCharID, true);
162 observer->GattCharacteristicAdded(adapter_.get(), to_char.get());
163
164 EXPECT_EQ(kToPeripheralCharID, found_to_char.id);
165 EXPECT_EQ(kFromPeripheralCharID, found_from_char.id);
166
167 EXPECT_CALL(*service_, GetUUID())
168 .WillOnce(Return(device::BluetoothUUID(kServiceUUID)));
169 observer->GattDiscoveryCompleteForService(adapter_.get(), service_.get());
170 }
171
172 TEST_F(ProximityAuthBluetoothLowEnergyCharacteristicFinderTest,
173 DidntFindRightCharacteristics) {
174 BluetoothLowEnergyCharacteristicsFinder characteristic_finder(
175 adapter_, device_.get(), remote_service_, to_peripheral_char_,
176 from_peripheral_char_, success_callback_, error_callback_);
177 device::BluetoothAdapter::Observer* observer =
178 static_cast<device::BluetoothAdapter::Observer*>(&characteristic_finder);
179
180 EXPECT_CALL(*this, OnCharacteristicsFound(_, _, _)).Times(0);
181 EXPECT_CALL(*this, OnCharacteristicsFinderError(_, _));
182
183 std::unique_ptr<device::MockBluetoothGattCharacteristic> other_char =
184 ExpectToFindCharacteristic(device::BluetoothUUID(kOtherCharUUID),
185 kOtherCharID, false);
186 observer->GattCharacteristicAdded(adapter_.get(), other_char.get());
187
188 EXPECT_CALL(*service_, GetUUID())
189 .WillOnce(Return(device::BluetoothUUID(kServiceUUID)));
190 observer->GattDiscoveryCompleteForService(adapter_.get(), service_.get());
191 }
192
193 TEST_F(ProximityAuthBluetoothLowEnergyCharacteristicFinderTest,
194 FindOnlyOneRightCharacteristic) {
195 BluetoothLowEnergyCharacteristicsFinder characteristic_finder(
196 adapter_, device_.get(), remote_service_, to_peripheral_char_,
197 from_peripheral_char_, success_callback_, error_callback_);
198 device::BluetoothAdapter::Observer* observer =
199 static_cast<device::BluetoothAdapter::Observer*>(&characteristic_finder);
200
201 RemoteAttribute found_to_char, found_from_char;
202 EXPECT_CALL(*this, OnCharacteristicsFound(_, _, _)).Times(0);
203 EXPECT_CALL(*this, OnCharacteristicsFinderError(_, _))
204 .WillOnce(
205 DoAll(SaveArg<0>(&found_to_char), SaveArg<1>(&found_from_char)));
206
207 std::unique_ptr<device::MockBluetoothGattCharacteristic> from_char =
208 ExpectToFindCharacteristic(device::BluetoothUUID(kFromPeripheralCharUUID),
209 kFromPeripheralCharID, true);
210 observer->GattCharacteristicAdded(adapter_.get(), from_char.get());
211
212 EXPECT_CALL(*service_, GetUUID())
213 .WillOnce(Return(device::BluetoothUUID(kServiceUUID)));
214 observer->GattDiscoveryCompleteForService(adapter_.get(), service_.get());
215 EXPECT_EQ(kFromPeripheralCharID, found_from_char.id);
216 }
217
218 TEST_F(ProximityAuthBluetoothLowEnergyCharacteristicFinderTest,
219 FindWrongCharacteristic_FindRightCharacteristics) {
220 BluetoothLowEnergyCharacteristicsFinder characteristic_finder(
221 adapter_, device_.get(), remote_service_, to_peripheral_char_,
222 from_peripheral_char_, success_callback_, error_callback_);
223 device::BluetoothAdapter::Observer* observer =
224 static_cast<device::BluetoothAdapter::Observer*>(&characteristic_finder);
225
226 RemoteAttribute found_to_char, found_from_char;
227 EXPECT_CALL(*this, OnCharacteristicsFound(_, _, _))
228 .WillOnce(
229 DoAll(SaveArg<1>(&found_to_char), SaveArg<2>(&found_from_char)));
230 EXPECT_CALL(*this, OnCharacteristicsFinderError(_, _)).Times(0);
231
232 std::unique_ptr<device::MockBluetoothGattCharacteristic> other_char =
233 ExpectToFindCharacteristic(device::BluetoothUUID(kOtherCharUUID),
234 kOtherCharID, false);
235 observer->GattCharacteristicAdded(adapter_.get(), other_char.get());
236
237 std::unique_ptr<device::MockBluetoothGattCharacteristic> from_char =
238 ExpectToFindCharacteristic(device::BluetoothUUID(kFromPeripheralCharUUID),
239 kFromPeripheralCharID, true);
240 observer->GattCharacteristicAdded(adapter_.get(), from_char.get());
241
242 std::unique_ptr<device::MockBluetoothGattCharacteristic> to_char =
243 ExpectToFindCharacteristic(device::BluetoothUUID(kToPeripheralCharUUID),
244 kToPeripheralCharID, true);
245 observer->GattCharacteristicAdded(adapter_.get(), to_char.get());
246
247 EXPECT_EQ(kToPeripheralCharID, found_to_char.id);
248 EXPECT_EQ(kFromPeripheralCharID, found_from_char.id);
249
250 EXPECT_CALL(*service_, GetUUID())
251 .WillOnce(Return(device::BluetoothUUID(kServiceUUID)));
252 observer->GattDiscoveryCompleteForService(adapter_.get(), service_.get());
253 }
254
255 TEST_F(ProximityAuthBluetoothLowEnergyCharacteristicFinderTest,
256 RightCharacteristicsAlreadyPresent) {
257 RemoteAttribute found_to_char, found_from_char;
258 EXPECT_CALL(*this, OnCharacteristicsFound(_, _, _))
259 .WillOnce(
260 DoAll(SaveArg<1>(&found_to_char), SaveArg<2>(&found_from_char)));
261 EXPECT_CALL(*this, OnCharacteristicsFinderError(_, _)).Times(0);
262
263 std::unique_ptr<device::MockBluetoothGattCharacteristic> from_char =
264 ExpectToFindCharacteristic(device::BluetoothUUID(kFromPeripheralCharUUID),
265 kFromPeripheralCharID, true);
266
267 std::unique_ptr<device::MockBluetoothGattCharacteristic> to_char =
268 ExpectToFindCharacteristic(device::BluetoothUUID(kToPeripheralCharUUID),
269 kToPeripheralCharID, true);
270
271 std::vector<device::BluetoothRemoteGattService*> services;
272 services.push_back(service_.get());
273 ON_CALL(*device_, GetGattServices()).WillByDefault(Return(services));
274
275 std::vector<device::BluetoothRemoteGattCharacteristic*> characteristics;
276 characteristics.push_back(from_char.get());
277 characteristics.push_back(to_char.get());
278 ON_CALL(*service_, GetCharacteristics())
279 .WillByDefault(Return(characteristics));
280
281 BluetoothLowEnergyCharacteristicsFinder characteristic_finder(
282 adapter_, device_.get(), remote_service_, to_peripheral_char_,
283 from_peripheral_char_, success_callback_, error_callback_);
284 device::BluetoothAdapter::Observer* observer =
285 static_cast<device::BluetoothAdapter::Observer*>(&characteristic_finder);
286
287 EXPECT_EQ(kToPeripheralCharID, found_to_char.id);
288 EXPECT_EQ(kFromPeripheralCharID, found_from_char.id);
289
290 EXPECT_CALL(*service_, GetUUID())
291 .WillOnce(Return(device::BluetoothUUID(kServiceUUID)));
292 observer->GattDiscoveryCompleteForService(adapter_.get(), service_.get());
293 }
294
295 } // namespace proximity_auth
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698