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