1 // Copyright 2015 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "services/device/serial/serial_io_handler_posix.h"
7 #include "testing/gtest/include/gtest/gtest.h"
11 class SerialIoHandlerPosixTest : public testing::Test {
13 SerialIoHandlerPosixTest() = default;
15 SerialIoHandlerPosixTest(const SerialIoHandlerPosixTest&) = delete;
16 SerialIoHandlerPosixTest& operator=(const SerialIoHandlerPosixTest&) = delete;
18 void SetUp() override {
19 serial_io_handler_posix_ =
20 new SerialIoHandlerPosix(base::FilePath("dummy-port"), nullptr);
23 void Initialize(bool parity_check_enabled,
24 const char* chars_stashed,
25 int num_chars_stashed) {
26 serial_io_handler_posix_->error_detect_state_ = ErrorDetectState::NO_ERROR;
27 serial_io_handler_posix_->parity_check_enabled_ = parity_check_enabled;
28 serial_io_handler_posix_->num_chars_stashed_ = num_chars_stashed;
29 for (int i = 0; i < num_chars_stashed; ++i) {
30 serial_io_handler_posix_->chars_stashed_[i] = chars_stashed[i];
34 void TestHelper(char* buffer,
37 ErrorDetectState error_detect_state_expected,
38 const char* chars_stashed_expected,
39 int num_chars_stashed_expected,
40 const char* buffer_expected,
41 int new_bytes_read_expected,
42 bool break_detected_expected,
43 bool parity_error_detected_expected) {
44 bool break_detected = false;
45 bool parity_error_detected = false;
46 int new_bytes_read = serial_io_handler_posix_->CheckReceiveError(
47 base::make_span(reinterpret_cast<uint8_t*>(buffer), buffer_len),
48 bytes_read, break_detected, parity_error_detected);
50 EXPECT_EQ(error_detect_state_expected,
51 serial_io_handler_posix_->error_detect_state_);
52 EXPECT_EQ(num_chars_stashed_expected,
53 serial_io_handler_posix_->num_chars_stashed_);
54 for (int i = 0; i < num_chars_stashed_expected; ++i) {
55 EXPECT_EQ(chars_stashed_expected[i],
56 static_cast<char>(serial_io_handler_posix_->chars_stashed_[i]));
58 EXPECT_EQ(new_bytes_read_expected, new_bytes_read);
59 for (int i = 0; i < new_bytes_read_expected; ++i) {
60 EXPECT_EQ(buffer_expected[i], buffer[i]);
62 EXPECT_EQ(break_detected_expected, break_detected);
63 EXPECT_EQ(parity_error_detected_expected, parity_error_detected);
67 scoped_refptr<SerialIoHandlerPosix> serial_io_handler_posix_;
71 TEST_F(SerialIoHandlerPosixTest, NoErrorReadOnce) {
72 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
73 Initialize(true, "", 0);
75 char buffer[30] = {'a', 'b', 'c'};
77 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
78 0, "abc", 3, false, false);
84 TEST_F(SerialIoHandlerPosixTest, NoErrorReadTwiceBytesReadTwoAndOne) {
85 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
86 Initialize(true, "", 0);
88 char buffer_1[30] = {'a', 'b'};
90 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
91 0, "ab", 2, false, false);
93 char buffer_2[30] = {'c'};
95 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
96 0, "c", 1, false, false);
102 TEST_F(SerialIoHandlerPosixTest, NoErrorReadTwiceBytesReadOneAndTwo) {
103 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
104 Initialize(true, "", 0);
106 char buffer_1[30] = {'a'};
108 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
109 0, "a", 1, false, false);
111 char buffer_2[30] = {'b', 'c'};
113 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
114 0, "bc", 2, false, false);
121 TEST_F(SerialIoHandlerPosixTest, NoErrorReadThreeTimes) {
122 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) {
123 Initialize(true, "", 0);
125 char buffer_1[30] = {'a'};
127 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
128 0, "a", 1, false, false);
130 char buffer_2[30] = {'b'};
132 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
133 0, "b", 1, false, false);
135 char buffer_3[30] = {'c'};
137 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
138 0, "c", 1, false, false);
143 TEST_F(SerialIoHandlerPosixTest, BreakReadOnce) {
144 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
145 Initialize(true, "", 0);
147 char buffer[30] = {'\377', '\0', '\0'};
149 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
150 0, "", 0, true, false);
154 // 'a' 'b' '\377' '\0' '\0' 'c' 'd' 'e'
155 TEST_F(SerialIoHandlerPosixTest, BreakReadOnceHasBytesBeforeAndAfterBreak) {
156 for (int buffer_len = 8; buffer_len <= 20; ++buffer_len) {
157 Initialize(true, "", 0);
159 char buffer[30] = {'a', 'b', '\377', '\0', '\0', 'c', 'd', 'e'};
161 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
162 0, "abcde", 5, true, false);
168 TEST_F(SerialIoHandlerPosixTest, BreakReadTwiceBytesReadTwoAndOne) {
169 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
170 Initialize(true, "", 0);
172 char buffer_1[30] = {'\377', '\0'};
174 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
175 "\377\0", 2, "", 0, false, false);
177 char buffer_2[30] = {'\0'};
179 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
180 0, "", 0, true, false);
184 // 'a' 'b' 'c' '\377' '\0'
186 TEST_F(SerialIoHandlerPosixTest,
187 BreakReadTwiceBytesReadTwoAndOneHasBytesBeforeAndAfterBreak) {
188 for (int buffer_len = 5; buffer_len <= 20; ++buffer_len) {
189 Initialize(true, "", 0);
191 char buffer_1[30] = {'a', 'b', 'c', '\377', '\0'};
193 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
194 "\377\0", 2, "abc", 3, false, false);
196 char buffer_2[30] = {'\0', 'd', 'e'};
198 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
199 0, "de", 2, true, false);
205 TEST_F(SerialIoHandlerPosixTest, BreakReadTwiceBytesReadOneAndTwo) {
206 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
207 Initialize(true, "", 0);
209 char buffer_1[30] = {'\377'};
211 TestHelper(buffer_1, buffer_len, bytes_read,
212 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
214 char buffer_2[30] = {'\0', '\0'};
216 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
217 0, "", 0, true, false);
223 TEST_F(SerialIoHandlerPosixTest,
224 BreakReadTwiceBytesReadOneAndTwoHasBytesBeforeAndAfterBreak) {
225 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
226 Initialize(true, "", 0);
228 char buffer_1[30] = {'a', 'b', '\377'};
230 TestHelper(buffer_1, buffer_len, bytes_read,
231 ErrorDetectState::MARK_377_SEEN, "\377", 1, "ab", 2, false,
234 char buffer_2[30] = {'\0', '\0', 'c'};
236 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
237 0, "c", 1, true, false);
244 TEST_F(SerialIoHandlerPosixTest, BreakReadThreeTimes) {
245 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) {
246 Initialize(true, "", 0);
248 char buffer_1[30] = {'\377'};
250 TestHelper(buffer_1, buffer_len, bytes_read,
251 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
253 char buffer_2[30] = {'\0'};
255 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
256 "\377\0", 2, "", 0, false, false);
258 char buffer_3[30] = {'\0'};
260 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
261 0, "", 0, true, false);
268 TEST_F(SerialIoHandlerPosixTest,
269 BreakReadThreeTimesHasBytesBeforeAndAfterBreak) {
270 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
271 Initialize(true, "", 0);
273 char buffer_1[30] = {'a', '\377'};
275 TestHelper(buffer_1, buffer_len, bytes_read,
276 ErrorDetectState::MARK_377_SEEN, "\377", 1, "a", 1, false,
279 char buffer_2[30] = {'\0'};
281 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
282 "\377\0", 2, "", 0, false, false);
284 char buffer_3[30] = {'\0', 'b'};
286 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
287 0, "b", 1, true, false);
292 TEST_F(SerialIoHandlerPosixTest, ParityErrorReadOnce) {
293 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
294 Initialize(true, "", 0);
296 char buffer[30] = {'\377', '\0', 'a'};
298 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
299 0, "", 0, false, true);
303 // 'b' 'c' '\377' '\0' 'a' 'd'
304 TEST_F(SerialIoHandlerPosixTest,
305 ParityErrorReadOnceHasBytesBeforeAndAfterParityError) {
306 for (int buffer_len = 6; buffer_len <= 20; ++buffer_len) {
307 Initialize(true, "", 0);
309 char buffer[30] = {'b', 'c', '\377', '\0', 'a', 'd'};
311 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
312 0, "bcd", 3, false, true);
318 TEST_F(SerialIoHandlerPosixTest, ParityErrorReadTwiceBytesReadTwoAndOne) {
319 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
320 Initialize(true, "", 0);
322 char buffer_1[30] = {'\377', '\0'};
324 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
325 "\377\0", 2, "", 0, false, false);
327 char buffer_2[30] = {'a'};
329 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
330 0, "", 0, false, true);
337 SerialIoHandlerPosixTest,
338 ParityErrorReadTwiceBytesReadTwoAndOneHasBytesBeforeAndAfterParityError) {
339 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
340 Initialize(true, "", 0);
342 char buffer_1[30] = {'b', '\377', '\0'};
344 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
345 "\377\0", 2, "b", 1, false, false);
347 char buffer_2[30] = {'a', 'c', 'd'};
349 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
350 0, "cd", 2, false, true);
356 TEST_F(SerialIoHandlerPosixTest, ParityErrorReadTwiceBytesReadOneAndTwo) {
357 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
358 Initialize(true, "", 0);
360 char buffer_1[30] = {'\377'};
362 TestHelper(buffer_1, buffer_len, bytes_read,
363 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
365 char buffer_2[30] = {'\0', 'a'};
367 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
368 0, "", 0, false, true);
375 SerialIoHandlerPosixTest,
376 ParityErrorReadTwiceBytesReadOneAndTwoHasBytesBeforeAndAfterParityError) {
377 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
378 Initialize(true, "", 0);
380 char buffer_1[30] = {'b', 'c', '\377'};
382 TestHelper(buffer_1, buffer_len, bytes_read,
383 ErrorDetectState::MARK_377_SEEN, "\377", 1, "bc", 2, false,
386 char buffer_2[30] = {'\0', 'a', 'd'};
388 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
389 0, "d", 1, false, true);
396 TEST_F(SerialIoHandlerPosixTest, ParityErrorReadThreeTimes) {
397 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) {
398 Initialize(true, "", 0);
400 char buffer_1[30] = {'\377'};
402 TestHelper(buffer_1, buffer_len, bytes_read,
403 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
405 char buffer_2[30] = {'\0'};
407 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
408 "\377\0", 2, "", 0, false, false);
410 char buffer_3[30] = {'a'};
412 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
413 0, "", 0, false, true);
420 TEST_F(SerialIoHandlerPosixTest,
421 ParityErrorReadThreeTimesHasBytesBeforeAndAfterParityError) {
422 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
423 Initialize(true, "", 0);
425 char buffer_1[30] = {'b', '\377'};
427 TestHelper(buffer_1, buffer_len, bytes_read,
428 ErrorDetectState::MARK_377_SEEN, "\377", 1, "b", 1, false,
431 char buffer_2[30] = {'\0'};
433 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
434 "\377\0", 2, "", 0, false, false);
436 char buffer_3[30] = {'a', 'c'};
438 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
439 0, "c", 1, false, true);
444 TEST_F(SerialIoHandlerPosixTest, TwoEOFsReadOnce) {
445 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
446 Initialize(true, "", 0);
448 char buffer[30] = {'\377', '\377'};
450 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
451 0, "\377", 1, false, false);
455 // 'a' '\377' '\377' 'b' 'c'
456 TEST_F(SerialIoHandlerPosixTest, TwoEOFsReadOnceHasBytesBeforeAndAfterEOF) {
457 for (int buffer_len = 5; buffer_len <= 20; ++buffer_len) {
458 Initialize(true, "", 0);
460 char buffer[30] = {'a', '\377', '\377', 'b', 'c'};
462 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
463 0, "a\377bc", 4, false, false);
469 TEST_F(SerialIoHandlerPosixTest, TwoEOFsReadTwice) {
470 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) {
471 Initialize(true, "", 0);
473 char buffer_1[30] = {'\377'};
475 TestHelper(buffer_1, buffer_len, bytes_read,
476 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
478 char buffer_2[30] = {'\377'};
480 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
481 0, "\377", 1, false, false);
487 TEST_F(SerialIoHandlerPosixTest, TwoEOFsReadTwiceHasBytesBeforeAndAfterEOF) {
488 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
489 Initialize(true, "", 0);
491 char buffer_1[30] = {'a', '\377'};
493 TestHelper(buffer_1, buffer_len, bytes_read,
494 ErrorDetectState::MARK_377_SEEN, "\377", 1, "a", 1, false,
497 char buffer_2[30] = {'\377', 'b'};
499 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
500 0, "\377b", 2, false, false);
505 TEST_F(SerialIoHandlerPosixTest, ParityCheckDisabledReadOnce) {
506 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
507 Initialize(false, "", 0);
509 char buffer[30] = {'\377', '\0', 'a'};
511 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
512 0, "\377\0a", 3, false, false);
516 // 'b' '\377' '\0' 'a' 'c'
517 TEST_F(SerialIoHandlerPosixTest,
518 ParityCheckDisabledReadOnceHasBytesBeforeAndAfter) {
519 for (int buffer_len = 5; buffer_len <= 20; ++buffer_len) {
520 Initialize(false, "", 0);
522 char buffer[30] = {'b', '\377', '\0', 'a', 'c'};
524 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
525 0, "b\377\0ac", 5, false, false);
531 TEST_F(SerialIoHandlerPosixTest,
532 ParityCheckDisabledReadTwiceBytesReadTwoAndOne) {
534 Initialize(false, "", 0);
536 char buffer_1[30] = {'\377', '\0'};
538 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
539 "\377\0", 2, "", 0, false, false);
541 char buffer_2[30] = {'a'};
543 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a",
544 1, "\377\0", 2, false, false);
549 TEST_F(SerialIoHandlerPosixTest,
550 ParityCheckDisabledReadTwiceBytesReadTwoAndOneHasBytesAfter) {
552 Initialize(false, "", 0);
554 char buffer_1[30] = {'\377', '\0'};
556 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
557 "\377\0", 2, "", 0, false, false);
559 char buffer_2[30] = {'a', 'b'};
561 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "ab",
562 2, "\377\0", 2, false, false);
567 TEST_F(SerialIoHandlerPosixTest,
568 ParityCheckDisabledReadTwiceBytesReadTwoAndOneLargerBufferLen) {
569 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
570 Initialize(false, "", 0);
572 char buffer_1[30] = {'\377', '\0'};
574 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
575 "\377\0", 2, "", 0, false, false);
577 char buffer_2[30] = {'a'};
579 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
580 0, "\377\0a", 3, false, false);
587 SerialIoHandlerPosixTest,
588 ParityCheckDisabledReadTwiceBytesReadTwoAndOneBufferLenThreeHasBytesBeforeAndAfter) {
590 Initialize(false, "", 0);
592 char buffer_1[30] = {'b', '\377', '\0'};
594 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
595 "\377\0", 2, "b", 1, false, false);
597 char buffer_2[30] = {'a', 'c'};
599 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "c",
600 1, "\377\0a", 3, false, false);
606 SerialIoHandlerPosixTest,
607 ParityCheckDisabledReadTwiceBytesReadTwoAndOneLargerBufferLenHasBytesBeforeAndAfter) {
608 for (int buffer_len = 4; buffer_len <= 20; ++buffer_len) {
609 Initialize(false, "", 0);
611 char buffer_1[30] = {'b', '\377', '\0'};
613 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
614 "\377\0", 2, "b", 1, false, false);
616 char buffer_2[30] = {'a', 'c'};
618 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
619 0, "\377\0ac", 4, false, false);
625 TEST_F(SerialIoHandlerPosixTest,
626 ParityCheckDisabledReadTwiceBytesReadOneAndTwo) {
628 Initialize(false, "", 0);
630 char buffer_1[30] = {'\377'};
632 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
633 "\377", 1, "", 0, false, false);
635 char buffer_2[30] = {'\0', 'a'};
637 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a",
638 1, "\377\0", 2, false, false);
642 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
643 0, "a", 1, false, false);
648 TEST_F(SerialIoHandlerPosixTest,
649 ParityCheckDisabledReadTwiceBytesReadOneAndTwoHasBytesBefore) {
651 Initialize(false, "", 0);
653 char buffer_1[30] = {'b', '\377'};
655 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
656 "\377", 1, "b", 1, false, false);
658 char buffer_2[30] = {'\0', 'a'};
660 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a",
661 1, "\377\0", 2, false, false);
665 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
666 0, "a", 1, false, false);
671 TEST_F(SerialIoHandlerPosixTest,
672 ParityCheckDisabledReadTwiceBytesReadOneAndTwoLargerBufferLen) {
673 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
674 Initialize(false, "", 0);
676 char buffer_1[30] = {'\377'};
678 TestHelper(buffer_1, buffer_len, bytes_read,
679 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
681 char buffer_2[30] = {'\0', 'a'};
683 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
684 0, "\377\0a", 3, false, false);
691 SerialIoHandlerPosixTest,
692 ParityCheckDisabledReadTwiceBytesReadOneAndTwoBufferLenThreeHasBytesBeforeAndAfter) {
694 Initialize(false, "", 0);
696 char buffer_1[30] = {'b', '\377'};
698 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
699 "\377", 1, "b", 1, false, false);
701 char buffer_2[30] = {'\0', 'a', 'c'};
703 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "c",
704 1, "\377\0a", 3, false, false);
710 SerialIoHandlerPosixTest,
711 ParityCheckDisabledReadTwiceBytesReadOneAndTwoLargerBufferLenHasBytesBeforeAndAfter) {
712 for (int buffer_len = 4; buffer_len <= 20; ++buffer_len) {
713 Initialize(false, "", 0);
715 char buffer_1[30] = {'b', '\377'};
717 TestHelper(buffer_1, buffer_len, bytes_read,
718 ErrorDetectState::MARK_377_SEEN, "\377", 1, "b", 1, false,
721 char buffer_2[30] = {'\0', 'a', 'c'};
723 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
724 0, "\377\0ac", 4, false, false);
731 TEST_F(SerialIoHandlerPosixTest,
732 ParityCheckDisabledReadThreeTimesBufferLenOne) {
734 Initialize(false, "", 0);
736 char buffer_1[30] = {'\377'};
738 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
739 "\377", 1, "", 0, false, false);
741 char buffer_2[30] = {'\0'};
743 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
744 "\377\0", 2, "", 0, false, false);
746 char buffer_3[30] = {'a'};
748 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR,
749 "\0a", 2, "\377", 1, false, false);
755 TEST_F(SerialIoHandlerPosixTest,
756 ParityCheckDisabledReadThreeTimesBufferLenTwo) {
758 Initialize(false, "", 0);
760 char buffer_1[30] = {'\377'};
762 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
763 "\377", 1, "", 0, false, false);
765 char buffer_2[30] = {'\0'};
767 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
768 "\377\0", 2, "", 0, false, false);
770 char buffer_3[30] = {'a'};
772 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a",
773 1, "\377\0", 2, false, false);
779 TEST_F(SerialIoHandlerPosixTest,
780 ParityCheckDisabledReadThreeTimesLargerBufferLen) {
781 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
782 Initialize(false, "", 0);
784 char buffer_1[30] = {'\377'};
786 TestHelper(buffer_1, buffer_len, bytes_read,
787 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
789 char buffer_2[30] = {'\0'};
791 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
792 "\377\0", 2, "", 0, false, false);
794 char buffer_3[30] = {'a'};
796 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
797 0, "\377\0a", 3, false, false);
804 TEST_F(SerialIoHandlerPosixTest,
805 ParityCheckDisabledReadThreeTimesBufferLenThreeByteBeforeAndAfter) {
807 Initialize(false, "", 0);
809 char buffer_1[30] = {'b', '\377'};
811 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
812 "\377", 1, "b", 1, false, false);
814 char buffer_2[30] = {'\0'};
816 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
817 "\377\0", 2, "", 0, false, false);
819 char buffer_3[30] = {'a', 'c'};
821 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "c",
822 1, "\377\0a", 3, false, false);
828 TEST_F(SerialIoHandlerPosixTest,
829 ParityCheckDisabledReadThreeTimesLargerBufferLenHasBytesBeforeAndAfter) {
830 for (int buffer_len = 4; buffer_len <= 20; ++buffer_len) {
831 Initialize(false, "", 0);
833 char buffer_1[30] = {'b', '\377'};
835 TestHelper(buffer_1, buffer_len, bytes_read,
836 ErrorDetectState::MARK_377_SEEN, "\377", 1, "b", 1, false,
839 char buffer_2[30] = {'\0'};
841 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
842 "\377\0", 2, "", 0, false, false);
844 char buffer_3[30] = {'a', 'c'};
846 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
847 0, "\377\0ac", 4, false, false);
851 TEST_F(SerialIoHandlerPosixTest, BytesReadZero) {
852 for (int buffer_len = 1; buffer_len <= 20; ++buffer_len) {
853 Initialize(true, "", 0);
857 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
858 0, "", 0, false, false);
863 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadOnce) {
864 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
865 Initialize(true, "", 0);
867 char buffer[30] = {'\377', 'a', 'b'};
869 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
870 0, "\377ab", 3, false, false);
876 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadTwiceBytesReadTwoAndOne) {
877 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
878 Initialize(true, "", 0);
880 char buffer_1[30] = {'\377', 'a'};
882 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
883 0, "\377a", 2, false, false);
885 char buffer_2[30] = {'b'};
887 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
888 0, "b", 1, false, false);
894 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadTwiceBytesReadOneAndTwo) {
896 Initialize(true, "", 0);
898 char buffer_1[30] = {'\377'};
900 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
901 "\377", 1, "", 0, false, false);
903 char buffer_2[30] = {'a', 'b'};
905 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "b",
906 1, "\377a", 2, false, false);
911 TEST_F(SerialIoHandlerPosixTest,
912 InvalidSequenceReadTwiceBytesReadOneAndTwoLargerBufferLen) {
913 for (int buffer_len = 3; buffer_len <= 20; ++buffer_len) {
914 Initialize(true, "", 0);
916 char buffer_1[30] = {'\377'};
918 TestHelper(buffer_1, buffer_len, bytes_read,
919 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
921 char buffer_2[30] = {'a', 'b'};
923 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
924 0, "\377ab", 3, false, false);
931 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadThreeTimes) {
933 Initialize(true, "", 0);
935 char buffer_1[30] = {'\377'};
937 TestHelper(buffer_1, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
938 "\377", 1, "", 0, false, false);
940 char buffer_2[30] = {'a'};
942 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "a",
943 1, "\377", 1, false, false);
945 char buffer_3[30] = {'b'};
947 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "b",
948 1, "a", 1, false, false);
954 TEST_F(SerialIoHandlerPosixTest, InvalidSequenceReadThreeTimesLargerBufferLen) {
955 for (int buffer_len = 2; buffer_len <= 20; ++buffer_len) {
956 Initialize(true, "", 0);
958 char buffer_1[30] = {'\377'};
960 TestHelper(buffer_1, buffer_len, bytes_read,
961 ErrorDetectState::MARK_377_SEEN, "\377", 1, "", 0, false, false);
963 char buffer_2[30] = {'a'};
965 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
966 0, "\377a", 2, false, false);
968 char buffer_3[30] = {'b'};
970 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
971 0, "b", 1, false, false);
975 // 'a' 'b' 'c' '\377'
976 TEST_F(SerialIoHandlerPosixTest, CharsStashedPreset) {
978 Initialize(true, "ab", 2);
980 char buffer[30] = {'c', '\377'};
982 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::MARK_377_SEEN,
983 "c\377", 2, "ab", 2, false, false);
986 // 'b' 'c' '\377' '\0' '\0' '\377' '\377' '\377' '\0' 'a' 'd' 'e'
987 TEST_F(SerialIoHandlerPosixTest, BreakAndEOFAndParityError) {
989 Initialize(true, "", 0);
991 char buffer[30] = {'b', 'c', '\377', '\0', '\0', '\377',
992 '\377', '\377', '\0', 'a', 'd', 'e'};
994 TestHelper(buffer, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "", 0,
995 "bc\377de", 5, true, true);
998 // 'b' 'c' '\377' '\0' '\0' '\377'
999 // '\377' '\377' '\0'
1001 TEST_F(SerialIoHandlerPosixTest, BreakAndEOFAndParityErrorReadThreeTimes) {
1002 for (int buffer_len = 6; buffer_len <= 20; ++buffer_len) {
1003 Initialize(true, "", 0);
1005 char buffer_1[30] = {'b', 'c', '\377', '\0', '\0', '\377'};
1007 TestHelper(buffer_1, buffer_len, bytes_read,
1008 ErrorDetectState::MARK_377_SEEN, "\377", 1, "bc", 2, true,
1011 char buffer_2[30] = {'\377', '\377', '\0'};
1013 TestHelper(buffer_2, buffer_len, bytes_read, ErrorDetectState::MARK_0_SEEN,
1014 "\377\0", 2, "\377", 1, false, false);
1016 char buffer_3[30] = {'a', 'd', 'e'};
1018 TestHelper(buffer_3, buffer_len, bytes_read, ErrorDetectState::NO_ERROR, "",
1019 0, "de", 2, false, true);
1023 } // namespace device