OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2015 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 "device/serial/serial_io_handler_posix.h" | |
6 #include "testing/gtest/include/gtest/gtest.h" | |
7 | |
8 namespace device { | |
9 | |
10 class SerialIoHandlerPosixTest : public testing::Test { | |
11 public: | |
12 SerialIoHandlerPosixTest() {} | |
13 | |
14 void SetUp() override { | |
15 serial_io_handler_posix_ = new SerialIoHandlerPosix(nullptr, nullptr); | |
16 } | |
17 | |
18 void set_error_detect_state(ErrorDetectState state) { | |
19 serial_io_handler_posix_->error_detect_state_ = state; | |
20 } | |
21 | |
22 ErrorDetectState get_error_detect_state() { | |
23 return serial_io_handler_posix_->error_detect_state_; | |
24 } | |
25 | |
26 void set_parity_check_enabled(bool enabled) { | |
27 serial_io_handler_posix_->parity_check_enabled_ = enabled; | |
28 } | |
29 | |
30 void set_num_chars_ignored(int n) { | |
31 serial_io_handler_posix_->num_chars_ignored_ = n; | |
32 } | |
33 | |
34 int num_chars_ignored() { | |
35 return serial_io_handler_posix_->num_chars_ignored_; | |
36 } | |
37 | |
38 void set_chars_ignored(int index, char ch) { | |
39 serial_io_handler_posix_->chars_ignored_[index] = ch; | |
40 } | |
41 | |
42 char get_chars_ignored(int index) { | |
Reilly Grant (use Gerrit)
2015/07/30 00:00:41
You don't need these wrappers anymore.
juncai
2015/07/30 16:04:37
Done.
| |
43 return serial_io_handler_posix_->chars_ignored_[index]; | |
44 } | |
45 | |
46 void initialize(ErrorDetectState error_detect_state, | |
Reilly Grant (use Gerrit)
2015/07/30 00:00:41
initialize -> Initialize
juncai
2015/07/30 16:04:37
Done.
| |
47 bool parity_check_enabled, | |
48 const char* chars_ignored, | |
49 int num_chars_ignored) { | |
50 set_error_detect_state(error_detect_state); | |
51 set_parity_check_enabled(parity_check_enabled); | |
52 set_num_chars_ignored(num_chars_ignored); | |
53 for (int i = 0; i < num_chars_ignored; ++i) { | |
54 set_chars_ignored(i, chars_ignored[i]); | |
55 } | |
56 } | |
57 | |
58 void test_helper(char* buffer, | |
Reilly Grant (use Gerrit)
2015/07/30 00:00:41
test_helper -> TestHelper
juncai
2015/07/30 16:04:36
Done.
| |
59 int buffer_len, | |
60 int bytes_read, | |
61 ErrorDetectState error_detect_state_expected, | |
62 const char* chars_ignored_expected, | |
63 int num_chars_ignored_expected, | |
64 const char* buffer_expected, | |
65 int new_bytes_read_expected, | |
66 bool break_detected_expected, | |
67 bool parity_error_detected_expected) { | |
68 bool break_detected = false; | |
69 bool parity_error_detected = false; | |
70 int new_bytes_read = serial_io_handler_posix_->CheckReceiveError( | |
71 buffer, buffer_len, bytes_read, break_detected, parity_error_detected); | |
72 | |
73 EXPECT_EQ(error_detect_state_expected, get_error_detect_state()); | |
74 EXPECT_EQ(num_chars_ignored_expected, num_chars_ignored()); | |
75 for (int i = 0; i < num_chars_ignored_expected; ++i) { | |
76 EXPECT_EQ(chars_ignored_expected[i], get_chars_ignored(i)); | |
77 } | |
78 EXPECT_EQ(new_bytes_read_expected, new_bytes_read); | |
79 for (int i = 0; i < new_bytes_read_expected; ++i) { | |
80 EXPECT_EQ(buffer_expected[i], buffer[i]); | |
81 } | |
82 EXPECT_EQ(break_detected_expected, break_detected); | |
83 EXPECT_EQ(parity_error_detected_expected, parity_error_detected); | |
84 } | |
85 | |
86 protected: | |
87 scoped_refptr<SerialIoHandlerPosix> serial_io_handler_posix_; | |
88 | |
89 private: | |
90 DISALLOW_COPY_AND_ASSIGN(SerialIoHandlerPosixTest); | |
91 }; | |
92 | |
93 // 'a' 'b' 'c' | |
94 TEST_F(SerialIoHandlerPosixTest, NoErrorReadOnce) { | |
95 char buffer[30]; | |
96 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) { | |
97 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
98 | |
99 int bytes_read = 3; | |
100 memcpy(buffer, "abc", bytes_read); | |
Reilly Grant (use Gerrit)
2015/07/30 00:00:41
Use an array literal instead of memcpy:
char buff
juncai
2015/07/30 16:04:36
Done.
| |
101 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
102 0, "abc", 3, false, false); | |
103 } | |
104 } | |
105 | |
106 // 'a' 'b' | |
107 // 'c' | |
108 TEST_F(SerialIoHandlerPosixTest, NoErrorReadTwiceBytesReadTwoAndOne) { | |
109 char buffer[30]; | |
110 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) { | |
111 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
112 | |
113 int bytes_read = 2; | |
114 memcpy(buffer, "ab", bytes_read); | |
115 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
116 0, "ab", 2, false, false); | |
117 | |
118 bytes_read = 1; | |
119 memcpy(buffer, "c", bytes_read); | |
120 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
121 0, "c", 1, false, false); | |
122 } | |
123 } | |
124 | |
125 // 'a' | |
126 // 'b' c' | |
127 TEST_F(SerialIoHandlerPosixTest, NoErrorReadTwiceBytesReadOneAndTwo) { | |
128 char buffer[30]; | |
129 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) { | |
130 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
131 | |
132 int bytes_read = 1; | |
133 memcpy(buffer, "a", bytes_read); | |
134 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
135 0, "a", 1, false, false); | |
136 | |
137 bytes_read = 2; | |
138 memcpy(buffer, "bc", bytes_read); | |
139 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
140 0, "bc", 2, false, false); | |
141 } | |
142 } | |
143 | |
144 // 'a' | |
145 // 'b' | |
146 // 'c' | |
147 TEST_F(SerialIoHandlerPosixTest, NoErrorReadThreeTimes) { | |
148 char buffer[30]; | |
149 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) { | |
150 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
151 | |
152 int bytes_read = 1; | |
153 memcpy(buffer, "a", bytes_read); | |
154 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
155 0, "a", 1, false, false); | |
156 | |
157 bytes_read = 1; | |
158 memcpy(buffer, "b", bytes_read); | |
159 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
160 0, "b", 1, false, false); | |
161 | |
162 bytes_read = 1; | |
163 memcpy(buffer, "c", bytes_read); | |
164 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
165 0, "c", 1, false, false); | |
166 } | |
167 } | |
168 | |
169 // '\377' '\0' '\0' | |
170 TEST_F(SerialIoHandlerPosixTest, BreakReadOnce) { | |
171 char buffer[30]; | |
172 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) { | |
173 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
174 | |
175 int bytes_read = 3; | |
176 memcpy(buffer, "\377\0\0", bytes_read); | |
177 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
178 0, "", 0, true, false); | |
179 } | |
180 } | |
181 | |
182 // 'a' 'b' '\377' '\0' '\0' 'c' 'd' 'e' | |
183 TEST_F(SerialIoHandlerPosixTest, BreakReadOnceHasBytesBeforeAndAfterBreak) { | |
184 char buffer[30]; | |
185 for (int buffer_len = 8; buffer_len <= 20; ++buffer_len) { | |
186 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
187 | |
188 int bytes_read = 8; | |
189 memcpy(buffer, "ab\377\0\000cde", bytes_read); | |
190 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
191 0, "abcde", 5, true, false); | |
192 } | |
193 } | |
194 | |
195 // '\377' '\0' | |
196 // '\0' | |
197 TEST_F(SerialIoHandlerPosixTest, BreakReadTwiceBytesReadTwoAndOne) { | |
198 char buffer[30]; | |
199 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) { | |
200 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
201 | |
202 int bytes_read = 2; | |
203 memcpy(buffer, "\377\0", bytes_read); | |
204 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
205 "\377\0", 2, "", 0, false, false); | |
206 | |
207 bytes_read = 1; | |
208 memcpy(buffer, "\0", bytes_read); | |
209 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
210 0, "", 0, true, false); | |
211 } | |
212 } | |
213 | |
214 // 'a' 'b' 'c' \377' '\0' | |
215 // '\0' 'd' 'e' | |
216 TEST_F(SerialIoHandlerPosixTest, | |
217 BreakReadTwiceBytesReadTwoAndOneHasBytesBeforeAndAfterBreak) { | |
218 char buffer[30]; | |
219 for (int buffer_len = 5; buffer_len <= 20; ++buffer_len) { | |
220 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
221 | |
222 int bytes_read = 5; | |
223 memcpy(buffer, "abc\377\0", bytes_read); | |
224 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
225 "\377\0", 2, "abc", 3, false, false); | |
226 | |
227 bytes_read = 3; | |
228 memcpy(buffer, "\000de", bytes_read); | |
229 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
230 0, "de", 2, true, false); | |
231 } | |
232 } | |
233 | |
234 // '\377' | |
235 // '\0' '\0' | |
236 TEST_F(SerialIoHandlerPosixTest, BreakReadTwiceBytesReadOneAndTwo) { | |
237 char buffer[30]; | |
238 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) { | |
239 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
240 | |
241 int bytes_read = 1; | |
242 memcpy(buffer, "\377", bytes_read); | |
243 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
244 "\377", 1, "", 0, false, false); | |
245 | |
246 bytes_read = 2; | |
247 memcpy(buffer, "\0\0", bytes_read); | |
248 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
249 0, "", 0, true, false); | |
250 } | |
251 } | |
252 | |
253 // 'a' 'b' \377' | |
254 // '\0' '\0' 'c' | |
255 TEST_F(SerialIoHandlerPosixTest, | |
256 BreakReadTwiceBytesReadOneAndTwoHasBytesBeforeAndAfterBreak) { | |
257 char buffer[30]; | |
258 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) { | |
259 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
260 | |
261 int bytes_read = 3; | |
262 memcpy(buffer, "ab\377", bytes_read); | |
263 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
264 "\377", 1, "ab", 2, false, false); | |
265 | |
266 bytes_read = 3; | |
267 memcpy(buffer, "\0\000c", bytes_read); | |
268 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
269 0, "c", 1, true, false); | |
270 } | |
271 } | |
272 | |
273 // '\377' | |
274 // '\0' | |
275 // '\0' | |
276 TEST_F(SerialIoHandlerPosixTest, BreakReadThreeTimes) { | |
277 char buffer[30]; | |
278 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) { | |
279 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
280 | |
281 int bytes_read = 1; | |
282 memcpy(buffer, "\377", bytes_read); | |
283 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
284 "\377", 1, "", 0, false, false); | |
285 | |
286 bytes_read = 1; | |
287 memcpy(buffer, "\0", bytes_read); | |
288 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
289 "\377\0", 2, "", 0, false, false); | |
290 | |
291 bytes_read = 1; | |
292 memcpy(buffer, "\0", bytes_read); | |
293 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
294 0, "", 0, true, false); | |
295 } | |
296 } | |
297 | |
298 // 'a' \377' | |
299 // '\0' | |
300 // '\0' 'b' | |
301 TEST_F(SerialIoHandlerPosixTest, | |
302 BreakReadThreeTimesHasBytesBeforeAndAfterBreak) { | |
303 char buffer[30]; | |
304 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) { | |
305 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
306 | |
307 int bytes_read = 2; | |
308 memcpy(buffer, "a\377", bytes_read); | |
309 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
310 "\377", 1, "a", 1, false, false); | |
311 | |
312 bytes_read = 1; | |
313 memcpy(buffer, "\0", bytes_read); | |
314 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
315 "\377\0", 2, "", 0, false, false); | |
316 | |
317 bytes_read = 2; | |
318 memcpy(buffer, "\000b", bytes_read); | |
319 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
320 0, "b", 1, true, false); | |
321 } | |
322 } | |
323 | |
324 // '\377' '\0' 'a' | |
325 TEST_F(SerialIoHandlerPosixTest, ParityErrorReadOnce) { | |
326 char buffer[30]; | |
327 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) { | |
328 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
329 | |
330 int bytes_read = 3; | |
331 memcpy(buffer, "\377\000a", bytes_read); | |
332 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
333 0, "", 0, false, true); | |
334 } | |
335 } | |
336 | |
337 // 'b' 'c' \377' '\0' 'a' 'd' | |
338 TEST_F(SerialIoHandlerPosixTest, | |
339 ParityErrorReadOnceHasBytesBeforeAndAfterParityError) { | |
340 char buffer[30]; | |
341 for (int buffer_len = 6; buffer_len <= 20; ++buffer_len) { | |
342 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
343 | |
344 int bytes_read = 6; | |
345 memcpy(buffer, "bc\377\000ad", bytes_read); | |
346 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
347 0, "bcd", 3, false, true); | |
348 } | |
349 } | |
350 | |
351 // '\377' '\0' | |
352 // 'a' | |
353 TEST_F(SerialIoHandlerPosixTest, ParityErrorReadTwiceBytesReadTwoAndOne) { | |
354 char buffer[30]; | |
355 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) { | |
356 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
357 | |
358 int bytes_read = 2; | |
359 memcpy(buffer, "\377\0", bytes_read); | |
360 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
361 "\377\0", 2, "", 0, false, false); | |
362 | |
363 bytes_read = 1; | |
364 memcpy(buffer, "a", bytes_read); | |
365 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
366 0, "", 0, false, true); | |
367 } | |
368 } | |
369 | |
370 // 'b' \377' '\0' | |
371 // 'a' 'c' 'd' | |
372 TEST_F( | |
373 SerialIoHandlerPosixTest, | |
374 ParityErrorReadTwiceBytesReadTwoAndOneHasBytesBeforeAndAfterParityError) { | |
375 char buffer[30]; | |
376 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) { | |
377 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
378 | |
379 int bytes_read = 3; | |
380 memcpy(buffer, "b\377\0", bytes_read); | |
381 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
382 "\377\0", 2, "b", 1, false, false); | |
383 | |
384 bytes_read = 3; | |
385 memcpy(buffer, "acd", bytes_read); | |
386 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
387 0, "cd", 2, false, true); | |
388 } | |
389 } | |
390 | |
391 // '\377' | |
392 // '\0' 'a' | |
393 TEST_F(SerialIoHandlerPosixTest, ParityErrorReadTwiceBytesReadOneAndTwo) { | |
394 char buffer[30]; | |
395 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) { | |
396 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
397 | |
398 int bytes_read = 1; | |
399 memcpy(buffer, "\377", bytes_read); | |
400 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
401 "\377", 1, "", 0, false, false); | |
402 | |
403 bytes_read = 2; | |
404 memcpy(buffer, "\00a", bytes_read); | |
405 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
406 0, "", 0, false, true); | |
407 } | |
408 } | |
409 | |
410 // 'b' 'c' \377' | |
411 // '\0' 'a' 'd' | |
412 TEST_F( | |
413 SerialIoHandlerPosixTest, | |
414 ParityErrorReadTwiceBytesReadOneAndTwoHasBytesBeforeAndAfterParityError) { | |
415 char buffer[30]; | |
416 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) { | |
417 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
418 | |
419 int bytes_read = 3; | |
420 memcpy(buffer, "bc\377", bytes_read); | |
421 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
422 "\377", 1, "bc", 2, false, false); | |
423 | |
424 bytes_read = 3; | |
425 memcpy(buffer, "\000ad", bytes_read); | |
426 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
427 0, "d", 1, false, true); | |
428 } | |
429 } | |
430 | |
431 // '\377' | |
432 // '\0' | |
433 // 'a' | |
434 TEST_F(SerialIoHandlerPosixTest, ParityErrorReadThreeTimes) { | |
435 char buffer[30]; | |
436 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) { | |
437 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
438 | |
439 int bytes_read = 1; | |
440 memcpy(buffer, "\377", bytes_read); | |
441 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
442 "\377", 1, "", 0, false, false); | |
443 | |
444 bytes_read = 1; | |
445 memcpy(buffer, "\0", bytes_read); | |
446 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
447 "\377\0", 2, "", 0, false, false); | |
448 | |
449 bytes_read = 1; | |
450 memcpy(buffer, "a", bytes_read); | |
451 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
452 0, "", 0, false, true); | |
453 } | |
454 } | |
455 | |
456 // 'b' '\377' | |
457 // '\0' | |
458 // 'a' 'c' | |
459 TEST_F(SerialIoHandlerPosixTest, | |
460 ParityErrorReadThreeTimesHasBytesBeforeAndAfterParityError) { | |
461 char buffer[30]; | |
462 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) { | |
463 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
464 | |
465 int bytes_read = 2; | |
466 memcpy(buffer, "b\377", bytes_read); | |
467 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
468 "\377", 1, "b", 1, false, false); | |
469 | |
470 bytes_read = 1; | |
471 memcpy(buffer, "\0", bytes_read); | |
472 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
473 "\377\0", 2, "", 0, false, false); | |
474 | |
475 bytes_read = 2; | |
476 memcpy(buffer, "ac", bytes_read); | |
477 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
478 0, "c", 1, false, true); | |
479 } | |
480 } | |
481 | |
482 // '\377' '\377' | |
483 TEST_F(SerialIoHandlerPosixTest, TwoEOFsReadOnce) { | |
484 char buffer[30]; | |
485 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) { | |
486 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
487 | |
488 int bytes_read = 2; | |
489 memcpy(buffer, "\377\377", bytes_read); | |
490 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
491 0, "\377", 1, false, false); | |
492 } | |
493 } | |
494 | |
495 // 'a' \377' '\377' 'b' 'c' | |
496 TEST_F(SerialIoHandlerPosixTest, TwoEOFsReadOnceHasBytesBeforeAndAfterEOF) { | |
497 char buffer[30]; | |
498 for (int buffer_len = 5; buffer_len <= 20; ++buffer_len) { | |
499 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
500 | |
501 int bytes_read = 5; | |
502 memcpy(buffer, "a\377\377bc", bytes_read); | |
503 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
504 0, "a\377bc", 4, false, false); | |
505 } | |
506 } | |
507 | |
508 // '\377' | |
509 // '\377' | |
510 TEST_F(SerialIoHandlerPosixTest, TwoEOFsReadTwice) { | |
511 char buffer[30]; | |
512 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) { | |
513 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
514 | |
515 int bytes_read = 1; | |
516 memcpy(buffer, "\377", bytes_read); | |
517 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
518 "\377", 1, "", 0, false, false); | |
519 | |
520 bytes_read = 1; | |
521 memcpy(buffer, "\377", bytes_read); | |
522 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
523 0, "\377", 1, false, false); | |
524 } | |
525 } | |
526 | |
527 // 'a' \377' | |
528 // '\377' 'b' | |
529 TEST_F(SerialIoHandlerPosixTest, TwoEOFsReadTwiceHasBytesBeforeAndAfterEOF) { | |
530 char buffer[30]; | |
531 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) { | |
532 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
533 | |
534 int bytes_read = 2; | |
535 memcpy(buffer, "a\377", bytes_read); | |
536 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
537 "\377", 1, "a", 1, false, false); | |
538 | |
539 bytes_read = 2; | |
540 memcpy(buffer, "\377b", bytes_read); | |
541 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
542 0, "\377b", 2, false, false); | |
543 } | |
544 } | |
545 | |
546 // '\377' '\0' 'a' | |
547 TEST_F(SerialIoHandlerPosixTest, ParityCheckDisabledReadOnce) { | |
548 char buffer[30]; | |
549 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) { | |
550 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
551 | |
552 int bytes_read = 3; | |
553 memcpy(buffer, "\377\000a", bytes_read); | |
554 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
555 0, "\377\000a", 3, false, false); | |
556 } | |
557 } | |
558 | |
559 // 'b' '\377' '\0' 'a' 'c' | |
560 TEST_F(SerialIoHandlerPosixTest, | |
561 ParityCheckDisabledReadOnceHasBytesBeforeAndAfter) { | |
562 char buffer[30]; | |
563 for (int buffer_len = 5; buffer_len <= 20; ++buffer_len) { | |
564 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
565 | |
566 int bytes_read = 5; | |
567 memcpy(buffer, "b\377\000ac", bytes_read); | |
568 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
569 0, "b\377\000ac", 5, false, false); | |
570 } | |
571 } | |
572 | |
573 // '\377' '\0' | |
574 // 'a' | |
575 TEST_F(SerialIoHandlerPosixTest, | |
576 ParityCheckDisabledReadTwiceBytesReadTwoAndOne) { | |
577 char buffer[30]; | |
578 int buffer_len = 2; | |
579 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
580 | |
581 int bytes_read = 2; | |
582 memcpy(buffer, "\377\0", bytes_read); | |
583 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
584 "\377\0", 2, "", 0, false, false); | |
585 | |
586 bytes_read = 1; | |
587 memcpy(buffer, "a", bytes_read); | |
588 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a", | |
589 1, "\377\0", 2, false, false); | |
590 } | |
591 | |
592 // '\377' '\0' | |
593 // 'a' 'b' | |
594 TEST_F(SerialIoHandlerPosixTest, | |
595 ParityCheckDisabledReadTwiceBytesReadTwoAndOneHasBytesAfter) { | |
596 char buffer[30]; | |
597 int buffer_len = 2; | |
598 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
599 | |
600 int bytes_read = 2; | |
601 memcpy(buffer, "\377\0", bytes_read); | |
602 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
603 "\377\0", 2, "", 0, false, false); | |
604 | |
605 bytes_read = 2; | |
606 memcpy(buffer, "ab", bytes_read); | |
607 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "ab", | |
608 2, "\377\0", 2, false, false); | |
609 } | |
610 | |
611 // '\377' '\0' | |
612 // 'a' | |
613 TEST_F(SerialIoHandlerPosixTest, | |
614 ParityCheckDisabledReadTwiceBytesReadTwoAndOneLargerBufferLen) { | |
615 char buffer[30]; | |
616 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) { | |
617 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
618 | |
619 int bytes_read = 2; | |
620 memcpy(buffer, "\377\0", bytes_read); | |
621 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
622 "\377\0", 2, "", 0, false, false); | |
623 | |
624 bytes_read = 1; | |
625 memcpy(buffer, "a", bytes_read); | |
626 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
627 0, "\377\000a", 3, false, false); | |
628 } | |
629 } | |
630 | |
631 // 'b' '\377' '\0' | |
632 // 'a' 'c' | |
633 TEST_F( | |
634 SerialIoHandlerPosixTest, | |
635 ParityCheckDisabledReadTwiceBytesReadTwoAndOneBufferLenThreeHasBytesBeforeAn dAfter) { | |
636 char buffer[30]; | |
637 int buffer_len = 3; | |
638 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
639 | |
640 int bytes_read = 3; | |
641 memcpy(buffer, "b\377\0", bytes_read); | |
642 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
643 "\377\0", 2, "b", 1, false, false); | |
644 | |
645 bytes_read = 2; | |
646 memcpy(buffer, "ac", bytes_read); | |
647 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "c", | |
648 1, "\377\000a", 3, false, false); | |
649 } | |
650 | |
651 // 'b' '\377' '\0' | |
652 // 'a' 'c' | |
653 TEST_F( | |
654 SerialIoHandlerPosixTest, | |
655 ParityCheckDisabledReadTwiceBytesReadTwoAndOneLargerBufferLenHasBytesBeforeA ndAfter) { | |
656 char buffer[30]; | |
657 for (int buffer_len = 4; buffer_len <= 20; ++buffer_len) { | |
658 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
659 | |
660 int bytes_read = 3; | |
661 memcpy(buffer, "b\377\0", bytes_read); | |
662 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
663 "\377\0", 2, "b", 1, false, false); | |
664 | |
665 bytes_read = 2; | |
666 memcpy(buffer, "ac", bytes_read); | |
667 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
668 0, "\377\000ac", 4, false, false); | |
669 } | |
670 } | |
671 | |
672 // '\377' | |
673 // '\0' 'a' | |
674 TEST_F(SerialIoHandlerPosixTest, | |
675 ParityCheckDisabledReadTwiceBytesReadOneAndTwo) { | |
676 char buffer[30]; | |
677 int buffer_len = 2; | |
678 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
679 | |
680 int bytes_read = 1; | |
681 memcpy(buffer, "\377", bytes_read); | |
682 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
683 "\377", 1, "", 0, false, false); | |
684 | |
685 bytes_read = 2; | |
686 memcpy(buffer, "\000a", bytes_read); | |
687 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a", | |
688 1, "\377\0", 2, false, false); | |
689 } | |
690 | |
691 // 'b' '\377' | |
692 // '\0' 'a' | |
693 TEST_F(SerialIoHandlerPosixTest, | |
694 ParityCheckDisabledReadTwiceBytesReadOneAndTwoHasBytesBefore) { | |
695 char buffer[30]; | |
696 int buffer_len = 2; | |
697 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
698 | |
699 int bytes_read = 2; | |
700 memcpy(buffer, "b\377", bytes_read); | |
701 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
702 "\377", 1, "b", 1, false, false); | |
703 | |
704 bytes_read = 2; | |
705 memcpy(buffer, "\000a", bytes_read); | |
706 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a", | |
707 1, "\377\0", 2, false, false); | |
708 } | |
709 | |
710 // '\377' | |
711 // '\0' 'a' | |
712 TEST_F(SerialIoHandlerPosixTest, | |
713 ParityCheckDisabledReadTwiceBytesReadOneAndTwoLargerBufferLen) { | |
714 char buffer[30]; | |
715 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) { | |
716 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
717 | |
718 int bytes_read = 1; | |
719 memcpy(buffer, "\377", bytes_read); | |
720 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
721 "\377", 1, "", 0, false, false); | |
722 | |
723 bytes_read = 2; | |
724 memcpy(buffer, "\000a", bytes_read); | |
725 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
726 0, "\377\000a", 3, false, false); | |
727 } | |
728 } | |
729 | |
730 // 'b' '\377' | |
731 // '\0' 'a' 'c' | |
732 TEST_F( | |
733 SerialIoHandlerPosixTest, | |
734 ParityCheckDisabledReadTwiceBytesReadOneAndTwoBufferLenThreeHasBytesBeforeAn dAfter) { | |
735 char buffer[30]; | |
736 int buffer_len = 3; | |
737 | |
738 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
739 | |
740 int bytes_read = 2; | |
741 memcpy(buffer, "b\377", bytes_read); | |
742 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
743 "\377", 1, "b", 1, false, false); | |
744 | |
745 bytes_read = 3; | |
746 memcpy(buffer, "\000ac", bytes_read); | |
747 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "c", | |
748 1, "\377\000a", 3, false, false); | |
749 } | |
750 | |
751 // 'b' '\377' | |
752 // '\0' 'a' 'c' | |
753 TEST_F( | |
754 SerialIoHandlerPosixTest, | |
755 ParityCheckDisabledReadTwiceBytesReadOneAndTwoLargerBufferLenHasBytesBeforeA ndAfter) { | |
756 char buffer[30]; | |
757 for (int buffer_len = 4; buffer_len <= 20; ++buffer_len) { | |
758 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
759 | |
760 int bytes_read = 2; | |
761 memcpy(buffer, "b\377", bytes_read); | |
762 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
763 "\377", 1, "b", 1, false, false); | |
764 | |
765 bytes_read = 3; | |
766 memcpy(buffer, "\000ac", bytes_read); | |
767 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
768 0, "\377\000ac", 4, false, false); | |
769 } | |
770 } | |
771 | |
772 // '\377' | |
773 // '\0' | |
774 // 'a' | |
775 TEST_F(SerialIoHandlerPosixTest, | |
776 ParityCheckDisabledReadThreeTimesBufferLenOne) { | |
777 char buffer[30]; | |
778 int buffer_len = 1; | |
779 | |
780 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
781 | |
782 int bytes_read = 1; | |
783 memcpy(buffer, "\377", bytes_read); | |
784 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
785 "\377", 1, "", 0, false, false); | |
786 | |
787 bytes_read = 1; | |
788 memcpy(buffer, "\0", bytes_read); | |
789 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
790 "\377\0", 2, "", 0, false, false); | |
791 | |
792 bytes_read = 1; | |
793 memcpy(buffer, "a", bytes_read); | |
794 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, | |
795 "\000a", 2, "\377", 1, false, false); | |
796 } | |
797 | |
798 // '\377' | |
799 // '\0' | |
800 // 'a' | |
801 TEST_F(SerialIoHandlerPosixTest, | |
802 ParityCheckDisabledReadThreeTimesBufferLenTwo) { | |
803 char buffer[30]; | |
804 int buffer_len = 2; | |
805 | |
806 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
807 | |
808 int bytes_read = 1; | |
809 memcpy(buffer, "\377", bytes_read); | |
810 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
811 "\377", 1, "", 0, false, false); | |
812 | |
813 bytes_read = 1; | |
814 memcpy(buffer, "\0", bytes_read); | |
815 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
816 "\377\0", 2, "", 0, false, false); | |
817 | |
818 bytes_read = 1; | |
819 memcpy(buffer, "a", bytes_read); | |
820 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a", | |
821 1, "\377\0", 2, false, false); | |
822 } | |
823 | |
824 // '\377' | |
825 // '\0' | |
826 // 'a' | |
827 TEST_F(SerialIoHandlerPosixTest, | |
828 ParityCheckDisabledReadThreeTimesLargerBufferLen) { | |
829 char buffer[30]; | |
830 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) { | |
831 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
832 | |
833 int bytes_read = 1; | |
834 memcpy(buffer, "\377", bytes_read); | |
835 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
836 "\377", 1, "", 0, false, false); | |
837 | |
838 bytes_read = 1; | |
839 memcpy(buffer, "\0", bytes_read); | |
840 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
841 "\377\0", 2, "", 0, false, false); | |
842 | |
843 bytes_read = 1; | |
844 memcpy(buffer, "a", bytes_read); | |
845 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
846 0, "\377\000a", 3, false, false); | |
847 } | |
848 } | |
849 | |
850 // 'b' '\377' | |
851 // '\0' | |
852 // 'a' 'c' | |
853 TEST_F(SerialIoHandlerPosixTest, | |
854 ParityCheckDisabledReadThreeTimesBufferLenThreeByteBeforeAndAfter) { | |
855 char buffer[30]; | |
856 int buffer_len = 3; | |
857 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
858 | |
859 int bytes_read = 2; | |
860 memcpy(buffer, "b\377", bytes_read); | |
861 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
862 "\377", 1, "b", 1, false, false); | |
863 | |
864 bytes_read = 1; | |
865 memcpy(buffer, "\0", bytes_read); | |
866 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
867 "\377\0", 2, "", 0, false, false); | |
868 | |
869 bytes_read = 2; | |
870 memcpy(buffer, "ac", bytes_read); | |
871 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "c", | |
872 1, "\377\000a", 3, false, false); | |
873 } | |
874 | |
875 // 'b' '\377' | |
876 // '\0' | |
877 // 'a' 'c' | |
878 TEST_F(SerialIoHandlerPosixTest, | |
879 ParityCheckDisabledReadThreeTimesLargerBufferLenHasBytesBeforeAndAfter) { | |
880 char buffer[30]; | |
881 for (int buffer_len = 4; buffer_len <= 20; ++buffer_len) { | |
882 initialize(ErrorDetectState::NO_ERROR, false, "", 0); | |
883 | |
884 int bytes_read = 2; | |
885 memcpy(buffer, "b\377", bytes_read); | |
886 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
887 "\377", 1, "b", 1, false, false); | |
888 | |
889 bytes_read = 1; | |
890 memcpy(buffer, "\0", bytes_read); | |
891 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
892 "\377\0", 2, "", 0, false, false); | |
893 | |
894 bytes_read = 2; | |
895 memcpy(buffer, "ac", bytes_read); | |
896 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
897 0, "\377\000ac", 4, false, false); | |
898 } | |
899 } | |
900 | |
901 TEST_F(SerialIoHandlerPosixTest, BytesReadZero) { | |
902 char buffer[30]; | |
903 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) { | |
904 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
905 | |
906 int bytes_read = 0; | |
907 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
908 0, "", 0, false, false); | |
909 } | |
910 } | |
911 | |
912 // '\377' 'a' 'b' | |
913 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadOnce) { | |
914 char buffer[30]; | |
915 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) { | |
916 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
917 | |
918 int bytes_read = 3; | |
919 memcpy(buffer, "\377ab", bytes_read); | |
920 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
921 0, "\377ab", 3, false, false); | |
922 } | |
923 } | |
924 | |
925 // '\377' 'a' | |
926 // 'b' | |
927 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadTwiceBytesReadTwoAndOne) { | |
928 char buffer[30]; | |
929 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) { | |
930 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
931 | |
932 int bytes_read = 2; | |
933 memcpy(buffer, "\377a", bytes_read); | |
934 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
935 0, "\377a", 2, false, false); | |
936 | |
937 bytes_read = 1; | |
938 memcpy(buffer, "b", bytes_read); | |
939 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
940 0, "b", 1, false, false); | |
941 } | |
942 } | |
943 | |
944 // '\377' | |
945 // 'a' 'b' | |
946 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadTwiceBytesReadOneAndTwo) { | |
947 char buffer[30]; | |
948 int buffer_len = 2; | |
949 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
950 | |
951 int bytes_read = 1; | |
952 memcpy(buffer, "\377", bytes_read); | |
953 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
954 "\377", 1, "", 0, false, false); | |
955 | |
956 bytes_read = 2; | |
957 memcpy(buffer, "ab", bytes_read); | |
958 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "b", | |
959 1, "\377a", 2, false, false); | |
960 } | |
961 | |
962 // '\377' | |
963 // 'a' 'b' | |
964 TEST_F(SerialIoHandlerPosixTest, | |
965 InvalidSequenceReadTwiceBytesReadOneAndTwoLargerBufferLen) { | |
966 char buffer[30]; | |
967 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) { | |
968 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
969 | |
970 int bytes_read = 1; | |
971 memcpy(buffer, "\377", bytes_read); | |
972 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
973 "\377", 1, "", 0, false, false); | |
974 | |
975 bytes_read = 2; | |
976 memcpy(buffer, "ab", bytes_read); | |
977 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
978 0, "\377ab", 3, false, false); | |
979 } | |
980 } | |
981 | |
982 // '\377' | |
983 // 'a' | |
984 // 'b' | |
985 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadThreeTimes) { | |
986 char buffer[30]; | |
987 int buffer_len = 1; | |
988 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
989 | |
990 int bytes_read = 1; | |
991 memcpy(buffer, "\377", bytes_read); | |
992 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
993 "\377", 1, "", 0, false, false); | |
994 | |
995 bytes_read = 1; | |
996 memcpy(buffer, "a", bytes_read); | |
997 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a", | |
998 1, "\377", 1, false, false); | |
999 | |
1000 bytes_read = 1; | |
1001 memcpy(buffer, "b", bytes_read); | |
1002 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "b", | |
1003 1, "a", 1, false, false); | |
1004 } | |
1005 | |
1006 // '\377' | |
1007 // 'a' | |
1008 // 'b' | |
1009 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadThreeTimesLargerBufferLen) { | |
1010 char buffer[30]; | |
1011 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) { | |
1012 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
1013 | |
1014 int bytes_read = 1; | |
1015 memcpy(buffer, "\377", bytes_read); | |
1016 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
1017 "\377", 1, "", 0, false, false); | |
1018 | |
1019 bytes_read = 1; | |
1020 memcpy(buffer, "a", bytes_read); | |
1021 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
1022 0, "\377a", 2, false, false); | |
1023 | |
1024 bytes_read = 1; | |
1025 memcpy(buffer, "b", bytes_read); | |
1026 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
1027 0, "b", 1, false, false); | |
1028 } | |
1029 } | |
1030 | |
1031 // 'a' 'b' 'c' '\377' | |
1032 TEST_F(SerialIoHandlerPosixTest, CharsIgnoredPreset) { | |
1033 char buffer[30]; | |
1034 int buffer_len = 2; | |
1035 initialize(ErrorDetectState::NO_ERROR, true, "ab", 2); | |
1036 | |
1037 int bytes_read = 2; | |
1038 memcpy(buffer, "c\377", bytes_read); | |
1039 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
1040 "c\377", 2, "ab", 2, false, false); | |
1041 } | |
1042 | |
1043 // 'b' 'c' '\377' '\0' '\0' '\377' '\377' '\377' '\0' 'a' 'd' 'e' | |
1044 TEST_F(SerialIoHandlerPosixTest, BreakAndEOFAndParityError) { | |
1045 char buffer[30]; | |
1046 int buffer_len = 12; | |
1047 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
1048 | |
1049 int bytes_read = 12; | |
1050 memcpy(buffer, "bc\377\0\0\377\377\377\000ade", bytes_read); | |
1051 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", 0, | |
1052 "bc\377de", 5, true, true); | |
1053 } | |
1054 | |
1055 // 'b' 'c' '\377' '\0' '\0' '\377' | |
1056 // '\377' '\377' '\0' | |
1057 // 'a' 'd' 'e' | |
1058 TEST_F(SerialIoHandlerPosixTest, BreakAndEOFAndParityErrorReadThreeTimes) { | |
1059 char buffer[30]; | |
1060 for (int buffer_len = 6; buffer_len <= 20; ++buffer_len) { | |
1061 initialize(ErrorDetectState::NO_ERROR, true, "", 0); | |
1062 | |
1063 int bytes_read = 6; | |
1064 memcpy(buffer, "bc\377\0\0\377", bytes_read); | |
1065 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN, | |
1066 "\377", 1, "bc", 2, true, false); | |
1067 | |
1068 bytes_read = 3; | |
1069 memcpy(buffer, "\377\377\0", bytes_read); | |
1070 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN, | |
1071 "\377\0", 2, "\377", 1, false, false); | |
1072 | |
1073 bytes_read = 3; | |
1074 memcpy(buffer, "ade", bytes_read); | |
1075 test_helper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", | |
1076 0, "de", 2, false, true); | |
1077 } | |
1078 } | |
1079 | |
1080 } // namespace device | |
OLD | NEW |