OLD | NEW |
| (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 | |
OLD | NEW |