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

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

Issue 2053013002: Weave Packet Receiver (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@proximity_auth_weave_migration
Patch Set: divided tests into little chunks 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
(Empty)
1 // Copyright 2016 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_weave_packet_receiv er.h"
6
7 #include <algorithm>
8 #include <string>
9
10 #include "base/logging.h"
11 #include "components/proximity_auth/ble/bluetooth_low_energy_weave_packet_genera tor.h"
12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14
15 using proximity_auth::BluetoothLowEnergyWeavePacketGenerator;
16 using proximity_auth::BluetoothLowEnergyWeavePacketReceiver;
17
18 // TODO(jingxuy): invent error codes for the various kinds of possible error
19 namespace {
20 typedef BluetoothLowEnergyWeavePacketReceiver::State State;
21 typedef BluetoothLowEnergyWeavePacketReceiver::ReceiverType ReceiverType;
22 typedef BluetoothLowEnergyWeavePacketGenerator::ReasonForClose ReasonForClose;
23
24 const uint16_t kDefaultPacketSize = 20;
25 const uint8_t kWeaveVersion = 1;
26 const uint8_t kSelectDefaultPacketSize = 0;
27 const uint8_t kEmptyUpperByte = 0;
28 const uint8_t kCloseWithoutError = 0;
29
30 // uWeave Header:
31 // 1--- ---- : type = 1 (control packet)
32 // -000 ---- : counter = 0
33 // ---- 0000 : command = 0 (request)
34 // 1000 0000 = 0x80
35 const uint8_t kControlRequestHeader = 0x80;
36
37 // uWeave Header:
38 // 1--- ---- : type = 1 (control packet)
39 // -000 ---- : counter = 0
40 // ---- 0001 : command = 1 (response)
41 // 1000 0001 = 0x81
42 const uint8_t kControlResponseHeader = 0x81;
43 } // namespace
44
45 namespace proximity_auth {
46
47 class ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest
48 : public testing::Test {
49 protected:
50 ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest() {}
51
52 private:
53 DISALLOW_COPY_AND_ASSIGN(
54 ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest);
55 };
56
57 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
58 WellBehavingServerPacketsNoControlDataTest) {
59 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
60 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
61 factory.NewInstance(ReceiverType::SERVER);
62
63 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
64 kWeaveVersion, kEmptyUpperByte,
65 kWeaveVersion, kEmptyUpperByte,
66 kSelectDefaultPacketSize};
67 receiver->ReceivePacket(p0);
68 EXPECT_EQ(State::WAITING, receiver->GetState());
69
70 std::vector<uint8_t> p1(kDefaultPacketSize, 'a');
71 // uWeave Header:
72 // 0--- ---- : type = 0 (data packet)
73 // -001 ---- : counter = 1
74 // ---- 1--- : first packet = true
75 // ---- -0-- : last packet = false
76 // ---- --00 : defined by uWeave to be 0
77 // 0001 1000 = 0x18
78 p1[0] = 0x18;
79 receiver->ReceivePacket(p1);
80 EXPECT_EQ(State::RECEIVING_DATA, receiver->GetState());
81
82 // uWeave Header:
83 // 0--- ---- : type = 0 (data packet)
84 // -010 ---- : counter = 2
85 // ---- 0--- : first packet = false
86 // ---- -1-- : last packet = true
87 // ---- --00 : defined by uWeave to be 0
88 // 0010 0100 = 0x24
89 std::vector<uint8_t> p2{0x24, 'c', 'd'};
90 receiver->ReceivePacket(p2);
91 EXPECT_EQ(State::DATA_READY, receiver->GetState());
92 EXPECT_EQ("aaaaaaaaaaaaaaaaaaacd", receiver->GetDataMessage());
93
94 // uWeave Header:
95 // 0--- ---- : type = 0 (data packet)
96 // -011 ---- : counter = 3
97 // ---- 1--- : first packet = true
98 // ---- -1-- : last packet = true
99 // ---- --00 : defined by uWeave to be 0
100 // 0011 1100 = 0x3C
101 std::vector<uint8_t> p3{0x3C, 'g', 'o', 'o', 'g', 'l', 'e'};
102 receiver->ReceivePacket(p3);
103 EXPECT_EQ(State::DATA_READY, receiver->GetState());
104 EXPECT_EQ("google", receiver->GetDataMessage());
105
106 // uWeave Header:
107 // 1--- ---- : type = 1 (control packet)
108 // -100 ---- : counter = 4
109 // ---- 0010 : command = 2 (close)
110 // 1100 0010 = 0xC2
111 // 0x80 is the hex value for APPLICATION_ERROR
112 std::vector<uint8_t> p4{0xC2, 0, 0x80};
113 receiver->ReceivePacket(p4);
114 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
115 EXPECT_EQ(ReasonForClose::APPLICATION_ERROR, receiver->GetReasonForClose());
116 }
117
118 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
119 WellBehavingServerPacketsWithFullControlDataTest) {
120 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
121 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
122 factory.NewInstance(ReceiverType::SERVER);
123
124 std::vector<uint8_t> p0{kControlRequestHeader,
125 kEmptyUpperByte,
126 kWeaveVersion,
127 kEmptyUpperByte,
128 kWeaveVersion,
129 kEmptyUpperByte,
130 kSelectDefaultPacketSize,
131 'a',
132 'b',
133 'c',
134 'd',
135 'e',
136 'f',
137 'g',
138 'h',
139 'i',
140 'j',
141 'k',
142 'l',
143 'm'};
144
145 receiver->ReceivePacket(p0);
146 EXPECT_EQ(State::DATA_READY, receiver->GetState());
147 EXPECT_EQ("abcdefghijklm", receiver->GetDataMessage());
148
149 // uWeave Header:
150 // 0--- ---- : type = 0 (data packet)
151 // -001 ---- : counter = 1
152 // ---- 1--- : first packet = true
153 // ---- -0-- : last packet = false
154 // ---- --00 : defined by uWeave to be 0
155 // 0001 1000 = 0x18
156 std::vector<uint8_t> p1(kDefaultPacketSize, 'o');
157 p1[0] = 0x18;
158 receiver->ReceivePacket(p1);
159 EXPECT_EQ(State::RECEIVING_DATA, receiver->GetState());
160
161 // uWeave Header:
162 // 0--- ---- : type = 0 (data packet)
163 // -010 ---- : counter = 2
164 // ---- 0--- : first packet = false
165 // ---- -1-- : last packet = true
166 // ---- --00 : defined by uWeave to be 0
167 // 0010 0100 = 0x24
168 std::vector<uint8_t> p2{0x24, 'p', 'q'};
169 receiver->ReceivePacket(p2);
170 EXPECT_EQ(State::DATA_READY, receiver->GetState());
171 EXPECT_EQ("ooooooooooooooooooopq", receiver->GetDataMessage());
172
173 // uWeave Header:
174 // 1--- ---- : type = 1 (control packet)
175 // -011 ---- : counter = 3
176 // ---- 0010 : command = 2 (close)
177 // 1011 0010 = 0xB2
178 std::vector<uint8_t> p3{0xB2, kEmptyUpperByte, kCloseWithoutError};
179 receiver->ReceivePacket(p3);
180 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
181 EXPECT_EQ(ReasonForClose::CLOSE_WITHOUT_ERROR, receiver->GetReasonForClose());
182 }
183
184 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
185 WellBehavingServerPacketsWithSomeControlDataTest) {
186 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
187 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
188 factory.NewInstance(ReceiverType::SERVER);
189
190 std::vector<uint8_t> p0{kControlRequestHeader,
191 kEmptyUpperByte,
192 kWeaveVersion,
193 kEmptyUpperByte,
194 kWeaveVersion,
195 kEmptyUpperByte,
196 kSelectDefaultPacketSize,
197 'a'};
198
199 receiver->ReceivePacket(p0);
200 EXPECT_EQ(State::DATA_READY, receiver->GetState());
201 EXPECT_EQ("a", receiver->GetDataMessage());
202
203 // uWeave Header:
204 // 0--- ---- : type = 0 (data packet)
205 // -001 ---- : counter = 1
206 // ---- 1--- : first packet = true
207 // ---- -0-- : last packet = false
208 // ---- --00 : defined by uWeave to be 0
209 // 0001 1000 = 0x18
210 std::vector<uint8_t> p1(kDefaultPacketSize, 'o');
211 p1[0] = 0x18;
212 receiver->ReceivePacket(p1);
213 EXPECT_EQ(State::RECEIVING_DATA, receiver->GetState());
214
215 // uWeave Header:
216 // 0--- ---- : type = 0 (data packet)
217 // -010 ---- : counter = 2
218 // ---- 0--- : first packet = false
219 // ---- -1-- : last packet = true
220 // ---- --00 : defined by uWeave to be 0
221 // 0010 0100 = 0x24
222 std::vector<uint8_t> p2{0x24, 'p', 'q'};
223 receiver->ReceivePacket(p2);
224 EXPECT_EQ(State::DATA_READY, receiver->GetState());
225 EXPECT_EQ("ooooooooooooooooooopq", receiver->GetDataMessage());
226
227 // uWeave Header:
228 // 1--- ---- : type = 1 (control packet)
229 // -011 ---- : counter = 3
230 // ---- 0010 : command = 2 (close)
231 // 1011 0010 = 0xB2
232 std::vector<uint8_t> p3{0xB2, kEmptyUpperByte, kCloseWithoutError};
233 receiver->ReceivePacket(p3);
234 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
235 EXPECT_EQ(ReasonForClose::CLOSE_WITHOUT_ERROR, receiver->GetReasonForClose());
236 }
237
238 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
239 WellBehavingClientPacketsNoControlDataTest) {
240 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
241 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
242 factory.NewInstance(ReceiverType::CLIENT);
243
244 const uint32_t kSelectedPacketSize = 30;
245 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
246 kWeaveVersion, kEmptyUpperByte, kSelectedPacketSize};
247 receiver->ReceivePacket(p0);
248 EXPECT_EQ(State::WAITING, receiver->GetState());
249 EXPECT_EQ(kSelectedPacketSize, receiver->GetMaxPacketSize());
250
251 std::vector<uint8_t> p1(kSelectedPacketSize, 'o');
252 // uWeave Header:
253 // 0--- ---- : type = 0 (data packet)
254 // -001 ---- : counter = 1
255 // ---- 1--- : first packet = true
256 // ---- -1-- : last packet = true
257 // ---- --00 : defined by uWeave to be 0
258 // 0001 1100 = 0x1C
259 p1[0] = 0x1C;
260 receiver->ReceivePacket(p1);
261 EXPECT_EQ(State::DATA_READY, receiver->GetState());
262 EXPECT_EQ("ooooooooooooooooooooooooooooo", receiver->GetDataMessage());
263
264 const uint8_t kApplicationError = 0x80;
265 // uWeave Header:
266 // 1--- ---- : type = 1 (control packet)
267 // -010 ---- : counter = 2
268 // ---- 0010 : command = 2 (close)
269 // 1010 0010 = 0xA2
270 std::vector<uint8_t> p2{0xA2, kEmptyUpperByte, kApplicationError};
271 receiver->ReceivePacket(p2);
272 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
273 EXPECT_EQ(ReasonForClose::APPLICATION_ERROR, receiver->GetReasonForClose());
274 }
275
276 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
277 WellBehavingClientPacketsWithFullControlDataTest) {
278 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
279 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
280 factory.NewInstance(ReceiverType::CLIENT);
281
282 std::vector<uint8_t> p0{kControlResponseHeader,
283 kEmptyUpperByte,
284 kWeaveVersion,
285 kEmptyUpperByte,
286 kDefaultPacketSize,
287 'a',
288 'b',
289 'c',
290 'd',
291 'e',
292 'f',
293 'g',
294 'h',
295 'i',
296 'j',
297 'k',
298 'l',
299 'm',
300 'n',
301 'o'};
302 receiver->ReceivePacket(p0);
303 EXPECT_EQ(State::DATA_READY, receiver->GetState());
304 EXPECT_EQ("abcdefghijklmno", receiver->GetDataMessage());
305
306 // uWeave Header:
307 // 0--- ---- : type = 0 (data packet)
308 // -001 ---- : counter = 1
309 // ---- 1--- : first packet = true
310 // ---- -1-- : last packet = true
311 // ---- --00 : defined by uWeave to be 0
312 // 0001 1100 = 0x1C
313 std::vector<uint8_t> p1{0x1C, 'g', 'o', 'o', 'g', 'l', 'e'};
314 receiver->ReceivePacket(p1);
315 EXPECT_EQ(State::DATA_READY, receiver->GetState());
316 EXPECT_EQ("google", receiver->GetDataMessage());
317
318 // uWeave Header:
319 // 1--- ---- : type = 1 (control packet)
320 // -010 ---- : counter = 2
321 // ---- 0010 : command = 2 (close)
322 // 1010 0010 = 0xA2
323 std::vector<uint8_t> p2{0xA2, kEmptyUpperByte, kCloseWithoutError};
324 receiver->ReceivePacket(p2);
325 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
326 EXPECT_EQ(ReasonForClose::CLOSE_WITHOUT_ERROR, receiver->GetReasonForClose());
327 }
328
329 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
330 WellBehavingClientPacketsWithSomeControlDataTest) {
331 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
332 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
333 factory.NewInstance(ReceiverType::CLIENT);
334
335 std::vector<uint8_t> p0{kControlResponseHeader,
336 kEmptyUpperByte,
337 kWeaveVersion,
338 kEmptyUpperByte,
339 kDefaultPacketSize,
340 'a',
341 'b',
342 'c'};
343 receiver->ReceivePacket(p0);
344 EXPECT_EQ(State::DATA_READY, receiver->GetState());
345 EXPECT_EQ("abc", receiver->GetDataMessage());
346
347 // uWeave Header:
348 // 0--- ---- : type = 0 (data packet)
349 // -001 ---- : counter = 1
350 // ---- 1--- : first packet = true
351 // ---- -1-- : last packet = true
352 // ---- --00 : defined by uWeave to be 0
353 // 0001 1100 = 0x1C
354 std::vector<uint8_t> p1{0x1C, 'g', 'o', 'o', 'g', 'l', 'e'};
355 receiver->ReceivePacket(p1);
356 EXPECT_EQ(State::DATA_READY, receiver->GetState());
357 EXPECT_EQ("google", receiver->GetDataMessage());
358
359 // uWeave Header:
360 // 1--- ---- : type = 1 (control packet)
361 // -010 ---- : counter = 2
362 // ---- 0010 : command = 2 (close)
363 // 1010 0010 = 0xA2
364 std::vector<uint8_t> p2{0xA2, kEmptyUpperByte, kCloseWithoutError};
365 receiver->ReceivePacket(p2);
366 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
367 EXPECT_EQ(ReasonForClose::CLOSE_WITHOUT_ERROR, receiver->GetReasonForClose());
368 }
369
370 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
371 LegacyCloseWithoutReasonTest) {
372 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
373 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
374 factory.NewInstance(ReceiverType::SERVER);
375
376 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
377 kWeaveVersion, kEmptyUpperByte,
378 kWeaveVersion, kEmptyUpperByte,
379 kSelectDefaultPacketSize};
380 receiver->ReceivePacket(p0);
381 EXPECT_EQ(State::WAITING, receiver->GetState());
382
383 // uWeave Header:
384 // 1--- ---- : type = 1 (control packet)
385 // -001 ---- : counter = 1
386 // ---- 0010 : command = 2 (close)
387 // 1001 0010 = 0x92
388 std::vector<uint8_t> p1{0x92};
389 receiver->ReceivePacket(p1);
390 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
391 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonForClose());
392 }
393
394 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
395 OneBytePacketTest) {
396 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
397
398 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
399 factory.NewInstance(ReceiverType::CLIENT);
400
401 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
402 kWeaveVersion, kEmptyUpperByte, kDefaultPacketSize};
403 receiver->ReceivePacket(p0);
404 EXPECT_EQ(State::WAITING, receiver->GetState());
405
406 // uWeave Header:
407 // 0--- ---- : type = 0 (data packet)
408 // -001 ---- : counter = 1
409 // ---- 1--- : first packet = true
410 // ---- -1-- : last packet = true
411 // ---- --00 : defined by uWeave to be 0
412 // 0001 1100 = 0x1C
413 std::vector<uint8_t> p1{0x1C};
414 receiver->ReceivePacket(p1);
415 EXPECT_EQ(State::DATA_READY, receiver->GetState());
416 EXPECT_EQ("", receiver->GetDataMessage());
417 }
418
419 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
420 EmptyPacketTest) {
421 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
422
423 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
424 factory.NewInstance(ReceiverType::CLIENT);
425
426 std::vector<uint8_t> p0;
427 receiver->ReceivePacket(p0);
428 EXPECT_EQ(State::ERROR, receiver->GetState());
429 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
430 }
431
432 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
433 ServerReceivingConnectionRequestTest) {
434 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
435
436 // Server receives connection response.
437 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
438 factory.NewInstance(ReceiverType::SERVER);
439 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
440 kWeaveVersion, kEmptyUpperByte, kDefaultPacketSize};
441 receiver->ReceivePacket(p0);
442 EXPECT_EQ(State::ERROR, receiver->GetState());
443 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
444 }
445
446 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
447 ClientReceivingConnectionResponseTest) {
448 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
449 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
450 factory.NewInstance(ReceiverType::CLIENT);
451 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
452 kWeaveVersion, kEmptyUpperByte,
453 kWeaveVersion, kEmptyUpperByte,
454 kSelectDefaultPacketSize};
455 receiver->ReceivePacket(p0);
456 EXPECT_EQ(State::ERROR, receiver->GetState());
457 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
458 }
459
460 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
461 ReceiveConnectionCloseOnConnecting) {
462 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
463 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
464 factory.NewInstance(ReceiverType::SERVER);
465
466 // uWeave Header:
467 // 1--- ---- : type = 1 (control packet)
468 // -000 ---- : counter = 0
469 // ---- 0010 : command = 2 (close)
470 // 1000 0010 = 0x82
471 std::vector<uint8_t> p0{0x82, kEmptyUpperByte, kCloseWithoutError};
472 receiver->ReceivePacket(p0);
473 EXPECT_EQ(State::ERROR, receiver->GetState());
474 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
475 }
476
477 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
478 ReceiveDataOnConnection) {
479 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
480 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
481 factory.NewInstance(ReceiverType::SERVER);
482
483 // uWeave Header:
484 // 0--- ---- : type = 0 (data packet)
485 // -000 ---- : counter = 0
486 // ---- 1--- : first packet = true
487 // ---- -0-- : last packet = false
488 // ---- --00 : defined by uWeave to be 0
489 // 0000 1000 = 0x08
490 std::vector<uint8_t> p3{0x08, 'a', 'b', 'c', 'd'};
491 receiver->ReceivePacket(p3);
492 EXPECT_EQ(State::ERROR, receiver->GetState());
493 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
494 }
495
496 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
497 ConnectionRequestTooSmallTest) {
498 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
499
500 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
501 factory.NewInstance(ReceiverType::SERVER);
502 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
503 kWeaveVersion, kEmptyUpperByte,
504 kWeaveVersion, kEmptyUpperByte};
505 receiver->ReceivePacket(p0);
506 EXPECT_EQ(State::ERROR, receiver->GetState());
507 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
508 }
509
510 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
511 ConnectionResponseTooSmallTest) {
512 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
513
514 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
515 factory.NewInstance(ReceiverType::CLIENT);
516 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
517 kWeaveVersion, kEmptyUpperByte};
518 receiver->ReceivePacket(p0);
519 EXPECT_EQ(State::ERROR, receiver->GetState());
520 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
521 }
522
523 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
524 ConnectionRequestTooLargeTest) {
525 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
526
527 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
528 factory.NewInstance(ReceiverType::SERVER);
529
530 std::vector<uint8_t> p0(kDefaultPacketSize + 1, 0);
531 p0[0] = kControlRequestHeader;
532 p0[2] = kWeaveVersion;
533 p0[4] = kWeaveVersion;
534 receiver->ReceivePacket(p0);
535 EXPECT_EQ(State::ERROR, receiver->GetState());
536 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
537 }
538
539 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
540 ConnectionResponseTooLargeTest) {
541 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
542
543 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
544 factory.NewInstance(ReceiverType::CLIENT);
545 std::vector<uint8_t> p0(kDefaultPacketSize + 1, 0);
546 p0[0] = kControlResponseHeader;
547 p0[2] = kWeaveVersion;
548 p0[4] = kDefaultPacketSize;
549 receiver->ReceivePacket(p0);
550 EXPECT_EQ(State::ERROR, receiver->GetState());
551 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
552 }
553
554 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
555 FirstPacketNoFirstNOrLastBitTest) {
556 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
557
558 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
559 factory.NewInstance(ReceiverType::SERVER);
560 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
561 kWeaveVersion, kEmptyUpperByte,
562 kWeaveVersion, kEmptyUpperByte,
563 kSelectDefaultPacketSize};
564 receiver->ReceivePacket(p0);
565 EXPECT_EQ(State::WAITING, receiver->GetState());
566
567 // uWeave Header:
568 // 0--- ---- : type = 0 (data packet)
569 // -001 ---- : counter = 1
570 // ---- 0--- : first packet = false
571 // ---- -0-- : last packet = false
572 // ---- --00 : defined by uWeave to be 0
573 // 0001 0000 = 0x10
574 std::vector<uint8_t> p1{0x10};
575 receiver->ReceivePacket(p1);
576 EXPECT_EQ(State::ERROR, receiver->GetState());
577 EXPECT_EQ(ReasonForClose::RECEIVED_PACKET_OUT_OF_SEQUENCE,
578 receiver->GetReasonToClose());
579 }
580
581 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
582 FirstPacketNoFirstYesLastBitTest) {
583 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
584
585 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
586 factory.NewInstance(ReceiverType::SERVER);
587 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
588 kWeaveVersion, kEmptyUpperByte,
589 kWeaveVersion, kEmptyUpperByte,
590 kSelectDefaultPacketSize};
591 receiver->ReceivePacket(p0);
592 EXPECT_EQ(State::WAITING, receiver->GetState());
593
594 // uWeave Header:
595 // 0--- ---- : type = 0 (data packet)
596 // -001 ---- : counter = 1
597 // ---- 0--- : first packet = false
598 // ---- -1-- : last packet = true
599 // ---- --00 : defined by uWeave to be 0
600 // 0001 0100 = 0x14
601 std::vector<uint8_t> p1{0x14};
602 receiver->ReceivePacket(p1);
603 EXPECT_EQ(State::ERROR, receiver->GetState());
604 EXPECT_EQ(ReasonForClose::RECEIVED_PACKET_OUT_OF_SEQUENCE,
605 receiver->GetReasonToClose());
606 }
607
608 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
609 NonFirstPacketYesFirstBitTest) {
610 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
611
612 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
613 factory.NewInstance(ReceiverType::SERVER);
614 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
615 kWeaveVersion, kEmptyUpperByte,
616 kWeaveVersion, kEmptyUpperByte,
617 kSelectDefaultPacketSize};
618 receiver->ReceivePacket(p0);
619 EXPECT_EQ(State::WAITING, receiver->GetState());
620
621 // uWeave Header:
622 // 0--- ---- : type = 0 (data packet)
623 // -001 ---- : counter = 1
624 // ---- 1--- : first packet = true
625 // ---- -0-- : last packet = false
626 // ---- --00 : defined by uWeave to be 0
627 // 0001 1000 = 0x18
628 std::vector<uint8_t> p1{0x18};
629 receiver->ReceivePacket(p1);
630 EXPECT_EQ(State::RECEIVING_DATA, receiver->GetState());
631
632 // uWeave Header:
633 // 0--- ---- : type = 0 (data packet)
634 // -010 ---- : counter = 2
635 // ---- 1--- : first packet = true
636 // ---- -0-- : last packet = false
637 // ---- --00 : defined by uWeave to be 0
638 // 0010 1000 = 0x28
639 std::vector<uint8_t> p2{0x28};
640 receiver->ReceivePacket(p2);
641 EXPECT_EQ(State::ERROR, receiver->GetState());
642 EXPECT_EQ(ReasonForClose::RECEIVED_PACKET_OUT_OF_SEQUENCE,
643 receiver->GetReasonToClose());
644 }
645
646 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
647 OutOfOrderPacketTest) {
648 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
649
650 // Skip a packet in number.
651 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
652 factory.NewInstance(ReceiverType::SERVER);
653 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
654 kWeaveVersion, kEmptyUpperByte,
655 kWeaveVersion, kEmptyUpperByte,
656 kSelectDefaultPacketSize};
657 receiver->ReceivePacket(p0);
658 EXPECT_EQ(State::WAITING, receiver->GetState());
659
660 // uWeave Header:
661 // 0--- ---- : type = 0 (data packet)
662 // -010 ---- : counter = 2
663 // ---- 0--- : first packet = false
664 // ---- -0-- : last packet = false
665 // ---- --00 : defined by uWeave to be 0
666 // 0010 0000 = 0x20
667 std::vector<uint8_t> p1{0x20};
668 receiver->ReceivePacket(p1);
669 EXPECT_EQ(State::ERROR, receiver->GetState());
670 EXPECT_EQ(ReasonForClose::RECEIVED_PACKET_OUT_OF_SEQUENCE,
671 receiver->GetReasonToClose());
672 }
673
674 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
675 InvalidVersionInConnectionRequestTest) {
676 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
677
678 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
679 factory.NewInstance(ReceiverType::SERVER);
680 const uint8_t kWrongVersion = 2;
681 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
682 kWrongVersion, kEmptyUpperByte,
683 kWeaveVersion, kEmptyUpperByte,
684 kSelectDefaultPacketSize};
685 receiver->ReceivePacket(p0);
686 EXPECT_EQ(State::ERROR, receiver->GetState());
687 EXPECT_EQ(ReasonForClose::NO_COMMON_VERSION_SUPPORTED,
688 receiver->GetReasonToClose());
689 }
690
691 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
692 InvalidMaxPacketSizeInConnectionRequestTest) {
693 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
694
695 const uint8_t kSmallMaxPacketSize = 19;
696
697 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
698 factory.NewInstance(ReceiverType::SERVER);
699 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
700 kWeaveVersion, kEmptyUpperByte,
701 kWeaveVersion, kEmptyUpperByte,
702 kSmallMaxPacketSize};
703 receiver->ReceivePacket(p0);
704 EXPECT_EQ(State::ERROR, receiver->GetState());
705 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
706 }
707
708 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
709 InvalidSelectedVersionInConnectionResponseTest) {
710 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
711
712 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
713 factory.NewInstance(ReceiverType::CLIENT);
714 std::vector<uint8_t> p0{kControlResponseHeader, kWeaveVersion,
715 kEmptyUpperByte, kEmptyUpperByte, kDefaultPacketSize};
716 receiver->ReceivePacket(p0);
717 EXPECT_EQ(State::ERROR, receiver->GetState());
718 EXPECT_EQ(ReasonForClose::NO_COMMON_VERSION_SUPPORTED,
719 receiver->GetReasonToClose());
720 }
721
722 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
723 InvalidSelectedMaxPacketSizeInConnectionResponseTest) {
724 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
725
726 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
727 factory.NewInstance(ReceiverType::CLIENT);
728
729 const uint8_t kSmallMaxPacketSize = 19;
730 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
731 kWeaveVersion, kEmptyUpperByte, kSmallMaxPacketSize};
732 receiver->ReceivePacket(p0);
733 EXPECT_EQ(State::ERROR, receiver->GetState());
734 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
735 }
736
737 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
738 InvalidReasonForCloseInConnectionCloseTest) {
739 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
740
741 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
742 factory.NewInstance(ReceiverType::CLIENT);
743
744 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
745 kWeaveVersion, kEmptyUpperByte, kDefaultPacketSize};
746 receiver->ReceivePacket(p0);
747 EXPECT_EQ(State::WAITING, receiver->GetState());
748
749 const uint8_t kInvalidReasonForClose = 5;
750 // uWeave Header:
751 // 1--- ---- : type = 1 (control packet)
752 // -001 ---- : counter = 1
753 // ---- 0010 : command = 2 (close)
754 // 1001 0010 = 0x92
755 std::vector<uint8_t> p1{0x92, kEmptyUpperByte, kInvalidReasonForClose};
756 receiver->ReceivePacket(p1);
757 EXPECT_EQ(State::ERROR, receiver->GetState());
758 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
759 }
760
761 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
762 InvalidControlCommandBitTwoTest) {
763 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
764
765 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
766 factory.NewInstance(ReceiverType::SERVER);
767 // uWeave Header:
768 // 1--- ---- : type = 1 (control packet)
769 // -000 ---- : counter = 0
770 // ---- 0100 : command = 4 (INVALID)
771 // 1000 0100 = 0x84
772 std::vector<uint8_t> p0{
773 0x84, kEmptyUpperByte, kWeaveVersion, kEmptyUpperByte,
774 kWeaveVersion, kEmptyUpperByte, kSelectDefaultPacketSize};
775 receiver->ReceivePacket(p0);
776 EXPECT_EQ(State::ERROR, receiver->GetState());
777 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
778 }
779
780 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
781 InvalidControlCommandBitThreeTest) {
782 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
783
784 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
785 factory.NewInstance(ReceiverType::CLIENT);
786 // uWeave Header:
787 // 1--- ---- : type = 1 (control packet)
788 // -000 ---- : counter = 0
789 // ---- 1000 : command = 8 (INVALID)
790 // 1000 1000 = 0x88
791 std::vector<uint8_t> p0{0x88, kEmptyUpperByte, kWeaveVersion, kEmptyUpperByte,
792 kDefaultPacketSize};
793 receiver->ReceivePacket(p0);
794 EXPECT_EQ(State::ERROR, receiver->GetState());
795 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
796 }
797
798 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
799 InvalidBitOneInDataPacketHeaderTest) {
800 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
801
802 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
803 factory.NewInstance(ReceiverType::CLIENT);
804 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
805 kWeaveVersion, kEmptyUpperByte, kDefaultPacketSize};
806 receiver->ReceivePacket(p0);
807 EXPECT_EQ(State::WAITING, receiver->GetState());
808
809 // uWeave Header:
810 // 0--- ---- : type = 0 (data packet)
811 // -001 ---- : counter = 1
812 // ---- 1--- : first packet = true
813 // ---- -1-- : last packet = true
814 // ---- --10 : defined by uWeave to be 0, but bit 1 is not
815 // 0001 1110 = 0x1E
816 std::vector<uint8_t> p1{0x1E, 'a'};
817 receiver->ReceivePacket(p1);
818 EXPECT_EQ(State::ERROR, receiver->GetState());
819 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
820 }
821
822 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
823 InvalidBitZeroInDataPacketHeaderTest) {
824 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
825
826 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
827 factory.NewInstance(ReceiverType::CLIENT);
828 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
829 kWeaveVersion, kEmptyUpperByte, kDefaultPacketSize};
830 receiver->ReceivePacket(p0);
831 EXPECT_EQ(State::WAITING, receiver->GetState());
832
833 // uWeave Header:
834 // 0--- ---- : type = 0 (data packet)
835 // -001 ---- : counter = 1
836 // ---- 1--- : first packet = true
837 // ---- -1-- : last packet = true
838 // ---- --01 : defined by uWeave to be 0, but bit 0 is not
839 // 0001 1101 = 0x1D
840 std::vector<uint8_t> p1{0x1E, 'a'};
841 receiver->ReceivePacket(p1);
842 EXPECT_EQ(State::ERROR, receiver->GetState());
843 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
844 }
845
846 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
847 ReceivedPacketInErrorState) {
848 BluetoothLowEnergyWeavePacketReceiver::Factory factory;
849
850 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
851 factory.NewInstance(ReceiverType::CLIENT);
852 std::vector<uint8_t> p0;
853 receiver->ReceivePacket(p0);
854 EXPECT_EQ(State::ERROR, receiver->GetState());
855 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
856
857 std::vector<uint8_t> p1{kControlResponseHeader, kEmptyUpperByte,
858 kWeaveVersion, kEmptyUpperByte,
859 kSelectDefaultPacketSize};
860 receiver->ReceivePacket(p0);
861 EXPECT_EQ(State::ERROR, receiver->GetState());
862 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
863 }
864 } // namespace proximity_auth
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698