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

Powered by Google App Engine
This is Rietveld 408576698