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

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

Issue 2561203002: Migrate weave-related classes from proximity_auth/ble to cryptauth/ble. (Closed)
Patch Set: Rebase. 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 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 "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace proximity_auth {
15 namespace weave {
16 namespace {
17
18 typedef BluetoothLowEnergyWeavePacketReceiver::ReceiverType ReceiverType;
19 typedef BluetoothLowEnergyWeavePacketReceiver::State State;
20 typedef BluetoothLowEnergyWeavePacketReceiver::ReceiverError ReceiverError;
21
22 const uint8_t kCloseWithoutError = 0;
23
24 // uWeave Header:
25 // 1--- ---- : type = 1 (control packet)
26 // -000 ---- : counter = 0
27 // ---- 0000 : command = 0 (request)
28 // 1000 0000 = 0x80
29 const uint8_t kControlRequestHeader = 0x80;
30
31 // uWeave Header:
32 // 1--- ---- : type = 1 (control packet)
33 // -000 ---- : counter = 0
34 // ---- 0001 : command = 1 (response)
35 // 1000 0001 = 0x81
36 const uint8_t kControlResponseHeader = 0x81;
37 } // namespace
38
39 class ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest
40 : public testing::Test {
41 protected:
42 ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest() {}
43
44 private:
45 DISALLOW_COPY_AND_ASSIGN(
46 ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest);
47 };
48
49 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
50 WellBehavingServerPacketsNoControlDataTest) {
51 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
52 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
53 ReceiverType::SERVER);
54
55 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
56 kByteWeaveVersion, kEmptyUpperByte,
57 kByteWeaveVersion, kEmptyUpperByte,
58 kByteSelectMaxPacketSize};
59 receiver->ReceivePacket(p0);
60 EXPECT_EQ(State::WAITING, receiver->GetState());
61
62 std::vector<uint8_t> p1(kByteDefaultMaxPacketSize, 'a');
63 // uWeave Header:
64 // 0--- ---- : type = 0 (data packet)
65 // -001 ---- : counter = 1
66 // ---- 1--- : first packet = true
67 // ---- -0-- : last packet = false
68 // ---- --00 : defined by uWeave to be 0
69 // 0001 1000 = 0x18
70 p1[0] = 0x18;
71 receiver->ReceivePacket(p1);
72 EXPECT_EQ(State::RECEIVING_DATA, receiver->GetState());
73
74 // uWeave Header:
75 // 0--- ---- : type = 0 (data packet)
76 // -010 ---- : counter = 2
77 // ---- 0--- : first packet = false
78 // ---- -1-- : last packet = true
79 // ---- --00 : defined by uWeave to be 0
80 // 0010 0100 = 0x24
81 std::vector<uint8_t> p2{0x24, 'c', 'd'};
82 receiver->ReceivePacket(p2);
83 EXPECT_EQ(State::DATA_READY, receiver->GetState());
84 EXPECT_EQ("aaaaaaaaaaaaaaaaaaacd", receiver->GetDataMessage());
85
86 // uWeave Header:
87 // 0--- ---- : type = 0 (data packet)
88 // -011 ---- : counter = 3
89 // ---- 1--- : first packet = true
90 // ---- -1-- : last packet = true
91 // ---- --00 : defined by uWeave to be 0
92 // 0011 1100 = 0x3C
93 std::vector<uint8_t> p3{0x3C, 'g', 'o', 'o', 'g', 'l', 'e'};
94 receiver->ReceivePacket(p3);
95 EXPECT_EQ(State::DATA_READY, receiver->GetState());
96 EXPECT_EQ("google", receiver->GetDataMessage());
97
98 // uWeave Header:
99 // 1--- ---- : type = 1 (control packet)
100 // -100 ---- : counter = 4
101 // ---- 0010 : command = 2 (close)
102 // 1100 0010 = 0xC2
103 // 0x80 is the hex value for APPLICATION_ERROR
104 std::vector<uint8_t> p4{0xC2, kEmptyUpperByte, 0x80};
105 receiver->ReceivePacket(p4);
106 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
107 EXPECT_EQ(ReasonForClose::APPLICATION_ERROR, receiver->GetReasonForClose());
108 }
109
110 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
111 WellBehavingServerPacketsWithFullControlDataTest) {
112 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
113 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
114 ReceiverType::SERVER);
115
116 std::vector<uint8_t> p0{kControlRequestHeader,
117 kEmptyUpperByte,
118 kByteWeaveVersion,
119 kEmptyUpperByte,
120 kByteWeaveVersion,
121 kEmptyUpperByte,
122 kByteSelectMaxPacketSize,
123 'a',
124 'b',
125 'c',
126 'd',
127 'e',
128 'f',
129 'g',
130 'h',
131 'i',
132 'j',
133 'k',
134 'l',
135 'm'};
136
137 receiver->ReceivePacket(p0);
138 EXPECT_EQ(State::DATA_READY, receiver->GetState());
139 EXPECT_EQ("abcdefghijklm", receiver->GetDataMessage());
140
141 // uWeave Header:
142 // 0--- ---- : type = 0 (data packet)
143 // -001 ---- : counter = 1
144 // ---- 1--- : first packet = true
145 // ---- -0-- : last packet = false
146 // ---- --00 : defined by uWeave to be 0
147 // 0001 1000 = 0x18
148 std::vector<uint8_t> p1(kByteDefaultMaxPacketSize, 'o');
149 p1[0] = 0x18;
150 receiver->ReceivePacket(p1);
151 EXPECT_EQ(State::RECEIVING_DATA, receiver->GetState());
152
153 // uWeave Header:
154 // 0--- ---- : type = 0 (data packet)
155 // -010 ---- : counter = 2
156 // ---- 0--- : first packet = false
157 // ---- -1-- : last packet = true
158 // ---- --00 : defined by uWeave to be 0
159 // 0010 0100 = 0x24
160 std::vector<uint8_t> p2{0x24, 'p', 'q'};
161 receiver->ReceivePacket(p2);
162 EXPECT_EQ(State::DATA_READY, receiver->GetState());
163 EXPECT_EQ("ooooooooooooooooooopq", receiver->GetDataMessage());
164
165 // uWeave Header:
166 // 1--- ---- : type = 1 (control packet)
167 // -011 ---- : counter = 3
168 // ---- 0010 : command = 2 (close)
169 // 1011 0010 = 0xB2
170 std::vector<uint8_t> p3{0xB2, kEmptyUpperByte, kCloseWithoutError};
171 receiver->ReceivePacket(p3);
172 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
173 EXPECT_EQ(ReasonForClose::CLOSE_WITHOUT_ERROR, receiver->GetReasonForClose());
174 }
175
176 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
177 WellBehavingServerPacketsWithSomeControlDataTest) {
178 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
179 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
180 ReceiverType::SERVER);
181
182 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
183 kByteWeaveVersion, kEmptyUpperByte,
184 kByteWeaveVersion, kEmptyUpperByte,
185 kByteSelectMaxPacketSize, 'a'};
186
187 receiver->ReceivePacket(p0);
188 EXPECT_EQ(State::DATA_READY, receiver->GetState());
189 EXPECT_EQ("a", receiver->GetDataMessage());
190
191 // uWeave Header:
192 // 0--- ---- : type = 0 (data packet)
193 // -001 ---- : counter = 1
194 // ---- 1--- : first packet = true
195 // ---- -0-- : last packet = false
196 // ---- --00 : defined by uWeave to be 0
197 // 0001 1000 = 0x18
198 std::vector<uint8_t> p1(kByteDefaultMaxPacketSize, 'o');
199 p1[0] = 0x18;
200 receiver->ReceivePacket(p1);
201 EXPECT_EQ(State::RECEIVING_DATA, receiver->GetState());
202
203 // uWeave Header:
204 // 0--- ---- : type = 0 (data packet)
205 // -010 ---- : counter = 2
206 // ---- 0--- : first packet = false
207 // ---- -1-- : last packet = true
208 // ---- --00 : defined by uWeave to be 0
209 // 0010 0100 = 0x24
210 std::vector<uint8_t> p2{0x24, 'p', 'q'};
211 receiver->ReceivePacket(p2);
212 EXPECT_EQ(State::DATA_READY, receiver->GetState());
213 EXPECT_EQ("ooooooooooooooooooopq", receiver->GetDataMessage());
214
215 // uWeave Header:
216 // 1--- ---- : type = 1 (control packet)
217 // -011 ---- : counter = 3
218 // ---- 0010 : command = 2 (close)
219 // 1011 0010 = 0xB2
220 std::vector<uint8_t> p3{0xB2, kEmptyUpperByte, kCloseWithoutError};
221 receiver->ReceivePacket(p3);
222 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
223 EXPECT_EQ(ReasonForClose::CLOSE_WITHOUT_ERROR, receiver->GetReasonForClose());
224 }
225
226 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
227 WellBehavingClientPacketsNoControlDataTest) {
228 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
229 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
230 ReceiverType::CLIENT);
231
232 const uint8_t kSelectedPacketSize = 30;
233 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
234 kByteWeaveVersion, kEmptyUpperByte,
235 kSelectedPacketSize};
236 receiver->ReceivePacket(p0);
237 EXPECT_EQ(State::WAITING, receiver->GetState());
238 EXPECT_EQ(kSelectedPacketSize, receiver->GetMaxPacketSize());
239
240 std::vector<uint8_t> p1(kSelectedPacketSize, 'o');
241 // uWeave Header:
242 // 0--- ---- : type = 0 (data packet)
243 // -001 ---- : counter = 1
244 // ---- 1--- : first packet = true
245 // ---- -1-- : last packet = true
246 // ---- --00 : defined by uWeave to be 0
247 // 0001 1100 = 0x1C
248 p1[0] = 0x1C;
249 receiver->ReceivePacket(p1);
250 EXPECT_EQ(State::DATA_READY, receiver->GetState());
251 EXPECT_EQ("ooooooooooooooooooooooooooooo", receiver->GetDataMessage());
252
253 const uint8_t kApplicationError = 0x80;
254 // uWeave Header:
255 // 1--- ---- : type = 1 (control packet)
256 // -010 ---- : counter = 2
257 // ---- 0010 : command = 2 (close)
258 // 1010 0010 = 0xA2
259 std::vector<uint8_t> p2{0xA2, kEmptyUpperByte, kApplicationError};
260 receiver->ReceivePacket(p2);
261 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
262 EXPECT_EQ(ReasonForClose::APPLICATION_ERROR, receiver->GetReasonForClose());
263 }
264
265 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
266 WellBehavingClientPacketsWithFullControlDataTest) {
267 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
268 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
269 ReceiverType::CLIENT);
270
271 std::vector<uint8_t> p0{kControlResponseHeader,
272 kEmptyUpperByte,
273 kByteWeaveVersion,
274 kEmptyUpperByte,
275 kByteDefaultMaxPacketSize,
276 'a',
277 'b',
278 'c',
279 'd',
280 'e',
281 'f',
282 'g',
283 'h',
284 'i',
285 'j',
286 'k',
287 'l',
288 'm',
289 'n',
290 'o'};
291 receiver->ReceivePacket(p0);
292 EXPECT_EQ(State::DATA_READY, receiver->GetState());
293 EXPECT_EQ("abcdefghijklmno", receiver->GetDataMessage());
294
295 // uWeave Header:
296 // 0--- ---- : type = 0 (data packet)
297 // -001 ---- : counter = 1
298 // ---- 1--- : first packet = true
299 // ---- -1-- : last packet = true
300 // ---- --00 : defined by uWeave to be 0
301 // 0001 1100 = 0x1C
302 std::vector<uint8_t> p1{0x1C, 'g', 'o', 'o', 'g', 'l', 'e'};
303 receiver->ReceivePacket(p1);
304 EXPECT_EQ(State::DATA_READY, receiver->GetState());
305 EXPECT_EQ("google", receiver->GetDataMessage());
306
307 // uWeave Header:
308 // 1--- ---- : type = 1 (control packet)
309 // -010 ---- : counter = 2
310 // ---- 0010 : command = 2 (close)
311 // 1010 0010 = 0xA2
312 std::vector<uint8_t> p2{0xA2, kEmptyUpperByte, kCloseWithoutError};
313 receiver->ReceivePacket(p2);
314 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
315 EXPECT_EQ(ReasonForClose::CLOSE_WITHOUT_ERROR, receiver->GetReasonForClose());
316 }
317
318 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
319 WellBehavingClientPacketsWithSomeControlDataTest) {
320 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
321 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
322 ReceiverType::CLIENT);
323
324 std::vector<uint8_t> p0{kControlResponseHeader,
325 kEmptyUpperByte,
326 kByteWeaveVersion,
327 kEmptyUpperByte,
328 kByteDefaultMaxPacketSize,
329 'a',
330 'b',
331 'c'};
332 receiver->ReceivePacket(p0);
333 EXPECT_EQ(State::DATA_READY, receiver->GetState());
334 EXPECT_EQ("abc", receiver->GetDataMessage());
335
336 // uWeave Header:
337 // 0--- ---- : type = 0 (data packet)
338 // -001 ---- : counter = 1
339 // ---- 1--- : first packet = true
340 // ---- -1-- : last packet = true
341 // ---- --00 : defined by uWeave to be 0
342 // 0001 1100 = 0x1C
343 std::vector<uint8_t> p1{0x1C, 'g', 'o', 'o', 'g', 'l', 'e'};
344 receiver->ReceivePacket(p1);
345 EXPECT_EQ(State::DATA_READY, receiver->GetState());
346 EXPECT_EQ("google", receiver->GetDataMessage());
347
348 // uWeave Header:
349 // 1--- ---- : type = 1 (control packet)
350 // -010 ---- : counter = 2
351 // ---- 0010 : command = 2 (close)
352 // 1010 0010 = 0xA2
353 std::vector<uint8_t> p2{0xA2, kEmptyUpperByte, kCloseWithoutError};
354 receiver->ReceivePacket(p2);
355 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
356 EXPECT_EQ(ReasonForClose::CLOSE_WITHOUT_ERROR, receiver->GetReasonForClose());
357 }
358
359 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
360 LegacyCloseWithoutReasonTest) {
361 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
362 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
363 ReceiverType::SERVER);
364
365 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
366 kByteWeaveVersion, kEmptyUpperByte,
367 kByteWeaveVersion, kEmptyUpperByte,
368 kByteSelectMaxPacketSize};
369 receiver->ReceivePacket(p0);
370 EXPECT_EQ(State::WAITING, receiver->GetState());
371
372 // uWeave Header:
373 // 1--- ---- : type = 1 (control packet)
374 // -001 ---- : counter = 1
375 // ---- 0010 : command = 2 (close)
376 // 1001 0010 = 0x92
377 std::vector<uint8_t> p1{0x92};
378 receiver->ReceivePacket(p1);
379 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
380 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonForClose());
381 }
382
383 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
384 OneBytePacketTest) {
385 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
386 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
387 ReceiverType::CLIENT);
388
389 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
390 kByteWeaveVersion, kEmptyUpperByte,
391 kByteDefaultMaxPacketSize};
392 receiver->ReceivePacket(p0);
393 EXPECT_EQ(State::WAITING, receiver->GetState());
394
395 // uWeave Header:
396 // 0--- ---- : type = 0 (data packet)
397 // -001 ---- : counter = 1
398 // ---- 1--- : first packet = true
399 // ---- -1-- : last packet = true
400 // ---- --00 : defined by uWeave to be 0
401 // 0001 1100 = 0x1C
402 std::vector<uint8_t> p1{0x1C};
403 receiver->ReceivePacket(p1);
404 EXPECT_EQ(State::DATA_READY, receiver->GetState());
405 EXPECT_EQ("", receiver->GetDataMessage());
406 }
407
408 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
409 EmptyPacketTest) {
410 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
411 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
412 ReceiverType::CLIENT);
413
414 std::vector<uint8_t> p0;
415 receiver->ReceivePacket(p0);
416 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
417 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
418 EXPECT_EQ(ReceiverError::EMPTY_PACKET, receiver->GetReceiverError());
419 }
420
421 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
422 ServerReceivingConnectionResponseTest) {
423 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
424 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
425 ReceiverType::SERVER);
426 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
427 kByteWeaveVersion, kEmptyUpperByte,
428 kByteDefaultMaxPacketSize};
429 receiver->ReceivePacket(p0);
430 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
431 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
432 EXPECT_EQ(ReceiverError::CLIENT_RECEIVED_CONNECTION_REQUEST,
433 receiver->GetReceiverError());
434 }
435
436 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
437 ClientReceivingConnectionRequestTest) {
438 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
439 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
440 ReceiverType::CLIENT);
441 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
442 kByteWeaveVersion, kEmptyUpperByte,
443 kByteWeaveVersion, kEmptyUpperByte,
444 kByteSelectMaxPacketSize};
445 receiver->ReceivePacket(p0);
446 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
447 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
448 EXPECT_EQ(ReceiverError::SERVER_RECEIVED_CONNECTION_RESPONSE,
449 receiver->GetReceiverError());
450 }
451
452 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
453 ReceiveConnectionCloseInConnecting) {
454 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
455 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
456 ReceiverType::SERVER);
457
458 // uWeave Header:
459 // 1--- ---- : type = 1 (control packet)
460 // -000 ---- : counter = 0
461 // ---- 0010 : command = 2 (close)
462 // 1000 0010 = 0x82
463 std::vector<uint8_t> p0{0x82, kEmptyUpperByte, kCloseWithoutError};
464 receiver->ReceivePacket(p0);
465 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
466 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
467 EXPECT_EQ(ReceiverError::RECEIVED_CONNECTION_CLOSE_IN_CONNECTING,
468 receiver->GetReceiverError());
469 }
470
471 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
472 ReceiveDataInConnecting) {
473 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
474 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
475 ReceiverType::SERVER);
476
477 // uWeave Header:
478 // 0--- ---- : type = 0 (data packet)
479 // -000 ---- : counter = 0
480 // ---- 1--- : first packet = true
481 // ---- -0-- : last packet = false
482 // ---- --00 : defined by uWeave to be 0
483 // 0000 1000 = 0x08
484 std::vector<uint8_t> p3{0x08, 'a', 'b', 'c', 'd'};
485 receiver->ReceivePacket(p3);
486 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
487 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
488 EXPECT_EQ(ReceiverError::RECEIVED_DATA_IN_CONNECTING,
489 receiver->GetReceiverError());
490 }
491
492 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
493 ConnectionRequestTooSmallTest) {
494 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
495 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
496 ReceiverType::SERVER);
497 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
498 kByteWeaveVersion, kEmptyUpperByte,
499 kByteWeaveVersion, kEmptyUpperByte};
500 receiver->ReceivePacket(p0);
501 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
502 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
503 EXPECT_EQ(ReceiverError::INVALID_CONNECTION_REQUEST_SIZE,
504 receiver->GetReceiverError());
505 }
506
507 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
508 ConnectionRequestTooLargeTest) {
509 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
510 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
511 ReceiverType::SERVER);
512
513 std::vector<uint8_t> p0(kByteDefaultMaxPacketSize + 1, 0);
514 p0[0] = kControlRequestHeader;
515 p0[2] = kByteWeaveVersion;
516 p0[4] = kByteWeaveVersion;
517 receiver->ReceivePacket(p0);
518 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
519 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
520 EXPECT_EQ(ReceiverError::INVALID_CONNECTION_REQUEST_SIZE,
521 receiver->GetReceiverError());
522 }
523
524 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
525 ConnectionResponseTooSmallTest) {
526 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
527 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
528 ReceiverType::CLIENT);
529
530 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
531 kByteWeaveVersion, kEmptyUpperByte};
532 receiver->ReceivePacket(p0);
533 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
534 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
535 EXPECT_EQ(ReceiverError::INVALID_CONNECTION_RESPONSE_SIZE,
536 receiver->GetReceiverError());
537 }
538
539 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
540 ConnectionResponseTooLargeTest) {
541 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
542 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
543 ReceiverType::CLIENT);
544
545 std::vector<uint8_t> p0(kByteDefaultMaxPacketSize + 1, 0);
546 p0[0] = kControlResponseHeader;
547 p0[2] = kByteWeaveVersion;
548 p0[4] = kByteDefaultMaxPacketSize;
549 receiver->ReceivePacket(p0);
550 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
551 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
552 EXPECT_EQ(ReceiverError::INVALID_CONNECTION_RESPONSE_SIZE,
553 receiver->GetReceiverError());
554 }
555
556 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
557 ConnectionCloseTooLargeTest) {
558 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
559 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
560 ReceiverType::SERVER);
561
562 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
563 kByteWeaveVersion, kEmptyUpperByte,
564 kByteWeaveVersion, kEmptyUpperByte,
565 kByteSelectMaxPacketSize};
566 receiver->ReceivePacket(p0);
567 EXPECT_EQ(State::WAITING, receiver->GetState());
568
569 // uWeave Header:
570 // 1--- ---- : type = 1 (control packet)
571 // -001 ---- : counter = 1
572 // ---- 0010 : command = 2 (close)
573 // 1001 0010 = 0x92
574 std::vector<uint8_t> p1{0x92, kEmptyUpperByte, kCloseWithoutError, 'a'};
575 receiver->ReceivePacket(p1);
576 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
577 EXPECT_EQ(ReceiverError::INVALID_CONNECTION_CLOSE_SIZE,
578 receiver->GetReceiverError());
579 }
580
581 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
582 DataPacketTooLargeTest) {
583 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
584 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
585 ReceiverType::SERVER);
586
587 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
588 kByteWeaveVersion, kEmptyUpperByte,
589 kByteWeaveVersion, kEmptyUpperByte,
590 kByteSelectMaxPacketSize};
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 // ---- 1--- : first packet = true
598 // ---- -1-- : last packet = true
599 // ---- --00 : defined by uWeave to be 0
600 // 0001 1100 = 0x1C
601 std::vector<uint8_t> p1(kByteDefaultMaxPacketSize + 1, 'a');
602 p1[0] = 0x1C;
603 receiver->ReceivePacket(p1);
604 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
605 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
606 EXPECT_EQ(ReceiverError::INVALID_DATA_PACKET_SIZE,
607 receiver->GetReceiverError());
608 }
609
610 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
611 FirstPacketNoFirstNorLastBitTest) {
612 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
613 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
614 ReceiverType::SERVER);
615
616 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
617 kByteWeaveVersion, kEmptyUpperByte,
618 kByteWeaveVersion, kEmptyUpperByte,
619 kByteSelectMaxPacketSize};
620 receiver->ReceivePacket(p0);
621 EXPECT_EQ(State::WAITING, receiver->GetState());
622
623 // uWeave Header:
624 // 0--- ---- : type = 0 (data packet)
625 // -001 ---- : counter = 1
626 // ---- 0--- : first packet = false
627 // ---- -0-- : last packet = false
628 // ---- --00 : defined by uWeave to be 0
629 // 0001 0000 = 0x10
630 std::vector<uint8_t> p1{0x10};
631 receiver->ReceivePacket(p1);
632 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
633 EXPECT_EQ(ReasonForClose::RECEIVED_PACKET_OUT_OF_SEQUENCE,
634 receiver->GetReasonToClose());
635 EXPECT_EQ(ReceiverError::INCORRECT_DATA_FIRST_BIT,
636 receiver->GetReceiverError());
637 }
638
639 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
640 FirstPacketNoFirstYesLastBitTest) {
641 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
642 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
643 ReceiverType::SERVER);
644
645 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
646 kByteWeaveVersion, kEmptyUpperByte,
647 kByteWeaveVersion, kEmptyUpperByte,
648 kByteSelectMaxPacketSize};
649 receiver->ReceivePacket(p0);
650 EXPECT_EQ(State::WAITING, receiver->GetState());
651
652 // uWeave Header:
653 // 0--- ---- : type = 0 (data packet)
654 // -001 ---- : counter = 1
655 // ---- 0--- : first packet = false
656 // ---- -1-- : last packet = true
657 // ---- --00 : defined by uWeave to be 0
658 // 0001 0100 = 0x14
659 std::vector<uint8_t> p1{0x14};
660 receiver->ReceivePacket(p1);
661 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
662 EXPECT_EQ(ReasonForClose::RECEIVED_PACKET_OUT_OF_SEQUENCE,
663 receiver->GetReasonToClose());
664 EXPECT_EQ(ReceiverError::INCORRECT_DATA_FIRST_BIT,
665 receiver->GetReceiverError());
666 }
667
668 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
669 NonFirstPacketYesFirstBitTest) {
670 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
671 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
672 ReceiverType::SERVER);
673
674 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
675 kByteWeaveVersion, kEmptyUpperByte,
676 kByteWeaveVersion, kEmptyUpperByte,
677 kByteSelectMaxPacketSize};
678 receiver->ReceivePacket(p0);
679 EXPECT_EQ(State::WAITING, receiver->GetState());
680
681 // uWeave Header:
682 // 0--- ---- : type = 0 (data packet)
683 // -001 ---- : counter = 1
684 // ---- 1--- : first packet = true
685 // ---- -0-- : last packet = false
686 // ---- --00 : defined by uWeave to be 0
687 // 0001 1000 = 0x18
688 std::vector<uint8_t> p1{0x18};
689 receiver->ReceivePacket(p1);
690 EXPECT_EQ(State::RECEIVING_DATA, receiver->GetState());
691
692 // uWeave Header:
693 // 0--- ---- : type = 0 (data packet)
694 // -010 ---- : counter = 2
695 // ---- 1--- : first packet = true
696 // ---- -0-- : last packet = false
697 // ---- --00 : defined by uWeave to be 0
698 // 0010 1000 = 0x28
699 std::vector<uint8_t> p2{0x28};
700 receiver->ReceivePacket(p2);
701 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
702 EXPECT_EQ(ReasonForClose::RECEIVED_PACKET_OUT_OF_SEQUENCE,
703 receiver->GetReasonToClose());
704 EXPECT_EQ(ReceiverError::INCORRECT_DATA_FIRST_BIT,
705 receiver->GetReceiverError());
706 }
707
708 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
709 OutOfOrderPacketTest) {
710 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
711 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
712 ReceiverType::SERVER);
713
714 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
715 kByteWeaveVersion, kEmptyUpperByte,
716 kByteWeaveVersion, kEmptyUpperByte,
717 kByteSelectMaxPacketSize};
718 receiver->ReceivePacket(p0);
719 EXPECT_EQ(State::WAITING, receiver->GetState());
720
721 // uWeave Header:
722 // 0--- ---- : type = 0 (data packet)
723 // -010 ---- : counter = 2
724 // ---- 0--- : first packet = false
725 // ---- -0-- : last packet = false
726 // ---- --00 : defined by uWeave to be 0
727 // 0010 0000 = 0x20
728 std::vector<uint8_t> p1{0x20};
729 receiver->ReceivePacket(p1);
730 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
731 EXPECT_EQ(ReasonForClose::RECEIVED_PACKET_OUT_OF_SEQUENCE,
732 receiver->GetReasonToClose());
733 EXPECT_EQ(ReceiverError::PACKET_OUT_OF_SEQUENCE,
734 receiver->GetReceiverError());
735 }
736
737 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
738 InvalidVersionInConnectionRequestTest) {
739 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
740 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
741 ReceiverType::SERVER);
742
743 const uint8_t kWrongVersion = 2;
744 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
745 kWrongVersion, kEmptyUpperByte,
746 kByteWeaveVersion, kEmptyUpperByte,
747 kByteSelectMaxPacketSize};
748 receiver->ReceivePacket(p0);
749 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
750 EXPECT_EQ(ReasonForClose::NO_COMMON_VERSION_SUPPORTED,
751 receiver->GetReasonToClose());
752 EXPECT_EQ(ReceiverError::NOT_SUPPORTED_REQUESTED_VERSION,
753 receiver->GetReceiverError());
754 }
755
756 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
757 InvalidMaxPacketSizeInConnectionRequestTest) {
758 const uint8_t kSmallMaxPacketSize = 19;
759
760 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
761 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
762 ReceiverType::SERVER);
763
764 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
765 kByteWeaveVersion, kEmptyUpperByte,
766 kByteWeaveVersion, kEmptyUpperByte,
767 kSmallMaxPacketSize};
768 receiver->ReceivePacket(p0);
769 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
770 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
771 EXPECT_EQ(ReceiverError::INVALID_REQUESTED_MAX_PACKET_SIZE,
772 receiver->GetReceiverError());
773 }
774
775 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
776 InvalidSelectedVersionInConnectionResponseTest) {
777 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
778 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
779 ReceiverType::CLIENT);
780
781 std::vector<uint8_t> p0{kControlResponseHeader, kByteWeaveVersion,
782 kEmptyUpperByte, kEmptyUpperByte,
783 kByteDefaultMaxPacketSize};
784 receiver->ReceivePacket(p0);
785 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
786 EXPECT_EQ(ReasonForClose::NO_COMMON_VERSION_SUPPORTED,
787 receiver->GetReasonToClose());
788 EXPECT_EQ(ReceiverError::NOT_SUPPORTED_SELECTED_VERSION,
789 receiver->GetReceiverError());
790 }
791
792 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
793 InvalidSelectedMaxPacketSizeInConnectionResponseTest) {
794 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
795 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
796 ReceiverType::CLIENT);
797
798 const uint8_t kSmallMaxPacketSize = 19;
799 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
800 kByteWeaveVersion, kEmptyUpperByte,
801 kSmallMaxPacketSize};
802 receiver->ReceivePacket(p0);
803 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
804 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
805 EXPECT_EQ(ReceiverError::INVALID_SELECTED_MAX_PACKET_SIZE,
806 receiver->GetReceiverError());
807 }
808
809 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
810 UnrecognizedReasonForCloseInConnectionCloseTest) {
811 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
812 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
813 ReceiverType::CLIENT);
814
815 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
816 kByteWeaveVersion, kEmptyUpperByte,
817 kByteDefaultMaxPacketSize};
818 receiver->ReceivePacket(p0);
819 EXPECT_EQ(State::WAITING, receiver->GetState());
820
821 const uint8_t kInvalidReasonForClose = 5;
822 // uWeave Header:
823 // 1--- ---- : type = 1 (control packet)
824 // -001 ---- : counter = 1
825 // ---- 0010 : command = 2 (close)
826 // 1001 0010 = 0x92
827 std::vector<uint8_t> p1{0x92, kEmptyUpperByte, kInvalidReasonForClose};
828 receiver->ReceivePacket(p1);
829 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
830 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
831 EXPECT_EQ(ReceiverError::UNRECOGNIZED_REASON_FOR_CLOSE,
832 receiver->GetReceiverError());
833 }
834
835 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
836 UnrecognizedControlCommandBitTwoTest) {
837 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
838 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
839 ReceiverType::SERVER);
840
841 // uWeave Header:
842 // 1--- ---- : type = 1 (control packet)
843 // -000 ---- : counter = 0
844 // ---- 0100 : command = 4 (INVALID)
845 // 1000 0100 = 0x84
846 std::vector<uint8_t> p0{0x84,
847 kEmptyUpperByte,
848 kByteWeaveVersion,
849 kEmptyUpperByte,
850 kByteWeaveVersion,
851 kEmptyUpperByte,
852 kByteSelectMaxPacketSize};
853 receiver->ReceivePacket(p0);
854 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
855 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
856 EXPECT_EQ(ReceiverError::UNRECOGNIZED_CONTROL_COMMAND,
857 receiver->GetReceiverError());
858 }
859
860 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
861 InvalidControlCommandBitThreeTest) {
862 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
863 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
864 ReceiverType::CLIENT);
865
866 // uWeave Header:
867 // 1--- ---- : type = 1 (control packet)
868 // -000 ---- : counter = 0
869 // ---- 1000 : command = 8 (INVALID)
870 // 1000 1000 = 0x88
871 std::vector<uint8_t> p0{0x88, kEmptyUpperByte, kByteWeaveVersion,
872 kEmptyUpperByte, kByteDefaultMaxPacketSize};
873 receiver->ReceivePacket(p0);
874 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
875 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
876 EXPECT_EQ(ReceiverError::UNRECOGNIZED_CONTROL_COMMAND,
877 receiver->GetReceiverError());
878 }
879
880 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
881 InvalidBitOneInDataPacketHeaderTest) {
882 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
883 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
884 ReceiverType::CLIENT);
885
886 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
887 kByteWeaveVersion, kEmptyUpperByte,
888 kByteDefaultMaxPacketSize};
889 receiver->ReceivePacket(p0);
890 EXPECT_EQ(State::WAITING, receiver->GetState());
891
892 // uWeave Header:
893 // 0--- ---- : type = 0 (data packet)
894 // -001 ---- : counter = 1
895 // ---- 1--- : first packet = true
896 // ---- -1-- : last packet = true
897 // ---- --10 : defined by uWeave to be 0, but bit 1 is not
898 // 0001 1110 = 0x1E
899 std::vector<uint8_t> p1{0x1E, 'a'};
900 receiver->ReceivePacket(p1);
901 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
902 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
903 EXPECT_EQ(ReceiverError::DATA_HEADER_LOW_BITS_NOT_CLEARED,
904 receiver->GetReceiverError());
905 }
906
907 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
908 InvalidBitZeroInDataPacketHeaderTest) {
909 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
910 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
911 ReceiverType::CLIENT);
912
913 std::vector<uint8_t> p0{kControlResponseHeader, kEmptyUpperByte,
914 kByteWeaveVersion, kEmptyUpperByte,
915 kByteDefaultMaxPacketSize};
916 receiver->ReceivePacket(p0);
917 EXPECT_EQ(State::WAITING, receiver->GetState());
918
919 // uWeave Header:
920 // 0--- ---- : type = 0 (data packet)
921 // -001 ---- : counter = 1
922 // ---- 1--- : first packet = true
923 // ---- -1-- : last packet = true
924 // ---- --01 : defined by uWeave to be 0, but bit 0 is not
925 // 0001 1101 = 0x1D
926 std::vector<uint8_t> p1{0x1D, 'a'};
927 receiver->ReceivePacket(p1);
928 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
929 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
930 EXPECT_EQ(ReceiverError::DATA_HEADER_LOW_BITS_NOT_CLEARED,
931 receiver->GetReceiverError());
932 }
933
934 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
935 ReceivedPacketInErrorState) {
936 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
937 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
938 ReceiverType::CLIENT);
939
940 std::vector<uint8_t> p0;
941 receiver->ReceivePacket(p0);
942 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
943 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
944
945 std::vector<uint8_t> p1{kControlResponseHeader, kEmptyUpperByte,
946 kByteWeaveVersion, kEmptyUpperByte,
947 kByteSelectMaxPacketSize};
948 receiver->ReceivePacket(p1);
949 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
950 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
951 EXPECT_EQ(ReceiverError::EMPTY_PACKET, receiver->GetReceiverError());
952 }
953
954 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
955 ReceivedPacketInConnectionClosedStateTest) {
956 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
957 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
958 ReceiverType::SERVER);
959
960 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
961 kByteWeaveVersion, kEmptyUpperByte,
962 kByteWeaveVersion, kEmptyUpperByte,
963 kByteSelectMaxPacketSize};
964 receiver->ReceivePacket(p0);
965 EXPECT_EQ(State::WAITING, receiver->GetState());
966
967 // uWeave Header:
968 // 1--- ---- : type = 1 (control packet)
969 // -001 ---- : counter = 1
970 // ---- 0010 : command = 2 (close)
971 // 1001 0010 = 0x92
972 std::vector<uint8_t> p1{0x92, kEmptyUpperByte, kCloseWithoutError};
973 receiver->ReceivePacket(p1);
974 EXPECT_EQ(State::CONNECTION_CLOSED, receiver->GetState());
975 EXPECT_EQ(ReasonForClose::CLOSE_WITHOUT_ERROR, receiver->GetReasonForClose());
976
977 // uWeave Header:
978 // 0--- ---- : type = 0 (data packet)
979 // -010 ---- : counter = 2
980 // ---- 1--- : first packet = true
981 // ---- -1-- : last packet = true
982 // ---- --00 : defined by uWeave to be 0
983 // 0010 1100 = 0x2C
984 std::vector<uint8_t> p2{0x2C, 'a'};
985 receiver->ReceivePacket(p2);
986 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
987 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
988 EXPECT_EQ(ReceiverError::RECEIVED_PACKET_IN_CONNECTION_CLOSED,
989 receiver->GetReceiverError());
990 }
991
992 TEST_F(ProximityAuthBluetoothLowEnergyWeavePacketReceiverTest,
993 MultipleControlPacketTest) {
994 std::unique_ptr<BluetoothLowEnergyWeavePacketReceiver> receiver =
995 BluetoothLowEnergyWeavePacketReceiver::Factory::NewInstance(
996 ReceiverType::SERVER);
997
998 std::vector<uint8_t> p0{kControlRequestHeader, kEmptyUpperByte,
999 kByteWeaveVersion, kEmptyUpperByte,
1000 kByteWeaveVersion, kEmptyUpperByte,
1001 kByteSelectMaxPacketSize};
1002 receiver->ReceivePacket(p0);
1003 EXPECT_EQ(State::WAITING, receiver->GetState());
1004
1005 // uWeave Header:
1006 // 1--- ---- : type = 1 (control packet)
1007 // -001 ---- : counter = 1
1008 // ---- 0000 : command = 0 (request)
1009 // 1001 0000 = 0x90
1010 std::vector<uint8_t> p1{0x90,
1011 kEmptyUpperByte,
1012 kByteWeaveVersion,
1013 kEmptyUpperByte,
1014 kByteWeaveVersion,
1015 kEmptyUpperByte,
1016 kByteSelectMaxPacketSize};
1017 receiver->ReceivePacket(p1);
1018 EXPECT_EQ(State::ERROR_DETECTED, receiver->GetState());
1019 EXPECT_EQ(ReasonForClose::UNKNOWN_ERROR, receiver->GetReasonToClose());
1020 EXPECT_EQ(ReceiverError::INVALID_CONTROL_COMMAND_IN_DATA_TRANSACTION,
1021 receiver->GetReceiverError());
1022 }
1023
1024 } // namespace weave
1025
1026 } // namespace proximity_auth
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698