Commit | Line | Data |
---|---|---|
1f1bc183 FS |
1 | /* |
2 | The MIT License (MIT) | |
3 | ||
4 | Copyright (c) 2016 Fred Sundvik | |
5 | ||
6 | Permission is hereby granted, free of charge, to any person obtaining a copy | |
7 | of this software and associated documentation files (the "Software"), to deal | |
8 | in the Software without restriction, including without limitation the rights | |
9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | |
10 | copies of the Software, and to permit persons to whom the Software is | |
11 | furnished to do so, subject to the following conditions: | |
12 | ||
13 | The above copyright notice and this permission notice shall be included in all | |
14 | copies or substantial portions of the Software. | |
15 | ||
16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | |
19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | |
20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | |
21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | |
22 | SOFTWARE. | |
23 | */ | |
24 | ||
0a114601 FS |
25 | #include "gtest/gtest.h" |
26 | #include "gmock/gmock.h" | |
27 | #include <vector> | |
28 | #include <algorithm> | |
29 | extern "C" { | |
6873b171 | 30 | #include "serial_link/protocol/byte_stuffer.h" |
6873b171 FS |
31 | #include "serial_link/protocol/frame_validator.h" |
32 | #include "serial_link/protocol/physical.h" | |
0a114601 | 33 | } |
1f1bc183 | 34 | |
0a114601 | 35 | using testing::_; |
0a114601 | 36 | using testing::Args; |
b624f32f | 37 | using testing::ElementsAreArray; |
ce3a21cb | 38 | |
b624f32f | 39 | class ByteStuffer : public ::testing::Test { |
40 | public: | |
0a114601 FS |
41 | ByteStuffer() { |
42 | Instance = this; | |
43 | init_byte_stuffer(); | |
44 | } | |
1f1bc183 | 45 | |
b624f32f | 46 | ~ByteStuffer() { Instance = nullptr; } |
0a114601 | 47 | |
b624f32f | 48 | MOCK_METHOD3(validator_recv_frame, void(uint8_t link, uint8_t* data, uint16_t size)); |
0a114601 | 49 | |
b624f32f | 50 | void send_data(uint8_t link, const uint8_t* data, uint16_t size) { std::copy(data, data + size, std::back_inserter(sent_data)); } |
0a114601 | 51 | std::vector<uint8_t> sent_data; |
1f1bc183 | 52 | |
0a114601 FS |
53 | static ByteStuffer* Instance; |
54 | }; | |
55 | ||
56 | ByteStuffer* ByteStuffer::Instance = nullptr; | |
57 | ||
58 | extern "C" { | |
b624f32f | 59 | void validator_recv_frame(uint8_t link, uint8_t* data, uint16_t size) { ByteStuffer::Instance->validator_recv_frame(link, data, size); } |
0a114601 | 60 | |
b624f32f | 61 | void send_data(uint8_t link, const uint8_t* data, uint16_t size) { ByteStuffer::Instance->send_data(link, data, size); } |
a089eaa8 FS |
62 | } |
63 | ||
0a114601 | 64 | TEST_F(ByteStuffer, receives_no_frame_for_a_single_zero_byte) { |
b624f32f | 65 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).Times(0); |
4b9fccc7 | 66 | byte_stuffer_recv_byte(0, 0); |
1f1bc183 FS |
67 | } |
68 | ||
0a114601 | 69 | TEST_F(ByteStuffer, receives_no_frame_for_a_single_FF_byte) { |
b624f32f | 70 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).Times(0); |
4b9fccc7 | 71 | byte_stuffer_recv_byte(0, 0xFF); |
1f1bc183 FS |
72 | } |
73 | ||
0a114601 | 74 | TEST_F(ByteStuffer, receives_no_frame_for_a_single_random_byte) { |
b624f32f | 75 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).Times(0); |
4b9fccc7 | 76 | byte_stuffer_recv_byte(0, 0x4A); |
ce3a21cb FS |
77 | } |
78 | ||
0a114601 | 79 | TEST_F(ByteStuffer, receives_no_frame_for_a_zero_length_frame) { |
b624f32f | 80 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).Times(0); |
4b9fccc7 FS |
81 | byte_stuffer_recv_byte(0, 1); |
82 | byte_stuffer_recv_byte(0, 0); | |
26537474 FS |
83 | } |
84 | ||
0a114601 | 85 | TEST_F(ByteStuffer, receives_single_byte_valid_frame) { |
ce3a21cb | 86 | uint8_t expected[] = {0x37}; |
b624f32f | 87 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected))); |
4b9fccc7 FS |
88 | byte_stuffer_recv_byte(0, 2); |
89 | byte_stuffer_recv_byte(0, 0x37); | |
90 | byte_stuffer_recv_byte(0, 0); | |
ce3a21cb | 91 | } |
0a114601 | 92 | TEST_F(ByteStuffer, receives_three_bytes_valid_frame) { |
ce3a21cb | 93 | uint8_t expected[] = {0x37, 0x99, 0xFF}; |
b624f32f | 94 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected))); |
4b9fccc7 FS |
95 | byte_stuffer_recv_byte(0, 4); |
96 | byte_stuffer_recv_byte(0, 0x37); | |
97 | byte_stuffer_recv_byte(0, 0x99); | |
98 | byte_stuffer_recv_byte(0, 0xFF); | |
99 | byte_stuffer_recv_byte(0, 0); | |
ce3a21cb FS |
100 | } |
101 | ||
0a114601 | 102 | TEST_F(ByteStuffer, receives_single_zero_valid_frame) { |
ce3a21cb | 103 | uint8_t expected[] = {0}; |
b624f32f | 104 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected))); |
4b9fccc7 FS |
105 | byte_stuffer_recv_byte(0, 1); |
106 | byte_stuffer_recv_byte(0, 1); | |
107 | byte_stuffer_recv_byte(0, 0); | |
ce3a21cb FS |
108 | } |
109 | ||
0a114601 | 110 | TEST_F(ByteStuffer, receives_valid_frame_with_zeroes) { |
ce3a21cb | 111 | uint8_t expected[] = {5, 0, 3, 0}; |
b624f32f | 112 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected))); |
4b9fccc7 FS |
113 | byte_stuffer_recv_byte(0, 2); |
114 | byte_stuffer_recv_byte(0, 5); | |
115 | byte_stuffer_recv_byte(0, 2); | |
116 | byte_stuffer_recv_byte(0, 3); | |
117 | byte_stuffer_recv_byte(0, 1); | |
118 | byte_stuffer_recv_byte(0, 0); | |
1f1bc183 | 119 | } |
eefb5b56 | 120 | |
0a114601 | 121 | TEST_F(ByteStuffer, receives_two_valid_frames) { |
eefb5b56 FS |
122 | uint8_t expected1[] = {5, 0}; |
123 | uint8_t expected2[] = {3}; | |
b624f32f | 124 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected1))); |
125 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected2))); | |
4b9fccc7 FS |
126 | byte_stuffer_recv_byte(1, 2); |
127 | byte_stuffer_recv_byte(1, 5); | |
128 | byte_stuffer_recv_byte(1, 1); | |
129 | byte_stuffer_recv_byte(1, 0); | |
130 | byte_stuffer_recv_byte(1, 2); | |
131 | byte_stuffer_recv_byte(1, 3); | |
132 | byte_stuffer_recv_byte(1, 0); | |
eefb5b56 FS |
133 | } |
134 | ||
0a114601 | 135 | TEST_F(ByteStuffer, receives_valid_frame_after_unexpected_zero) { |
eefb5b56 | 136 | uint8_t expected[] = {5, 7}; |
b624f32f | 137 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected))); |
4b9fccc7 FS |
138 | byte_stuffer_recv_byte(1, 3); |
139 | byte_stuffer_recv_byte(1, 1); | |
140 | byte_stuffer_recv_byte(1, 0); | |
141 | byte_stuffer_recv_byte(1, 3); | |
142 | byte_stuffer_recv_byte(1, 5); | |
143 | byte_stuffer_recv_byte(1, 7); | |
144 | byte_stuffer_recv_byte(1, 0); | |
eefb5b56 FS |
145 | } |
146 | ||
0a114601 | 147 | TEST_F(ByteStuffer, receives_valid_frame_after_unexpected_non_zero) { |
eefb5b56 | 148 | uint8_t expected[] = {5, 7}; |
b624f32f | 149 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected))); |
4b9fccc7 FS |
150 | byte_stuffer_recv_byte(0, 2); |
151 | byte_stuffer_recv_byte(0, 9); | |
b624f32f | 152 | byte_stuffer_recv_byte(0, 4); // This should have been zero |
4b9fccc7 FS |
153 | byte_stuffer_recv_byte(0, 0); |
154 | byte_stuffer_recv_byte(0, 3); | |
155 | byte_stuffer_recv_byte(0, 5); | |
156 | byte_stuffer_recv_byte(0, 7); | |
157 | byte_stuffer_recv_byte(0, 0); | |
eefb5b56 | 158 | } |
e8cb6d80 | 159 | |
0a114601 | 160 | TEST_F(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_and_then_end_of_frame) { |
e8cb6d80 | 161 | uint8_t expected[254]; |
b624f32f | 162 | int i; |
163 | for (i = 0; i < 254; i++) { | |
e8cb6d80 FS |
164 | expected[i] = i + 1; |
165 | } | |
b624f32f | 166 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected))); |
4b9fccc7 | 167 | byte_stuffer_recv_byte(0, 0xFF); |
b624f32f | 168 | for (i = 0; i < 254; i++) { |
169 | byte_stuffer_recv_byte(0, i + 1); | |
e8cb6d80 | 170 | } |
4b9fccc7 | 171 | byte_stuffer_recv_byte(0, 0); |
e8cb6d80 FS |
172 | } |
173 | ||
0a114601 | 174 | TEST_F(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_non_zero) { |
e8cb6d80 | 175 | uint8_t expected[255]; |
b624f32f | 176 | int i; |
177 | for (i = 0; i < 254; i++) { | |
e8cb6d80 FS |
178 | expected[i] = i + 1; |
179 | } | |
180 | expected[254] = 7; | |
b624f32f | 181 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected))); |
4b9fccc7 | 182 | byte_stuffer_recv_byte(0, 0xFF); |
b624f32f | 183 | for (i = 0; i < 254; i++) { |
184 | byte_stuffer_recv_byte(0, i + 1); | |
e8cb6d80 | 185 | } |
4b9fccc7 FS |
186 | byte_stuffer_recv_byte(0, 2); |
187 | byte_stuffer_recv_byte(0, 7); | |
188 | byte_stuffer_recv_byte(0, 0); | |
e8cb6d80 FS |
189 | } |
190 | ||
0a114601 | 191 | TEST_F(ByteStuffer, receives_a_valid_frame_with_over254_non_zeroes_next_byte_is_zero) { |
e8cb6d80 | 192 | uint8_t expected[255]; |
b624f32f | 193 | int i; |
194 | for (i = 0; i < 254; i++) { | |
e8cb6d80 FS |
195 | expected[i] = i + 1; |
196 | } | |
197 | expected[254] = 0; | |
b624f32f | 198 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected))); |
4b9fccc7 | 199 | byte_stuffer_recv_byte(0, 0xFF); |
b624f32f | 200 | for (i = 0; i < 254; i++) { |
201 | byte_stuffer_recv_byte(0, i + 1); | |
e8cb6d80 | 202 | } |
4b9fccc7 FS |
203 | byte_stuffer_recv_byte(0, 1); |
204 | byte_stuffer_recv_byte(0, 1); | |
205 | byte_stuffer_recv_byte(0, 0); | |
e8cb6d80 FS |
206 | } |
207 | ||
0a114601 | 208 | TEST_F(ByteStuffer, receives_two_long_frames_and_some_more) { |
e8cb6d80 | 209 | uint8_t expected[515]; |
b624f32f | 210 | int i; |
211 | int j; | |
212 | for (j = 0; j < 2; j++) { | |
213 | for (i = 0; i < 254; i++) { | |
214 | expected[i + 254 * j] = i + 1; | |
e8cb6d80 FS |
215 | } |
216 | } | |
b624f32f | 217 | for (i = 0; i < 7; i++) { |
218 | expected[254 * 2 + i] = i + 1; | |
e8cb6d80 | 219 | } |
b624f32f | 220 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected))); |
4b9fccc7 | 221 | byte_stuffer_recv_byte(0, 0xFF); |
b624f32f | 222 | for (i = 0; i < 254; i++) { |
223 | byte_stuffer_recv_byte(0, i + 1); | |
e8cb6d80 | 224 | } |
4b9fccc7 | 225 | byte_stuffer_recv_byte(0, 0xFF); |
b624f32f | 226 | for (i = 0; i < 254; i++) { |
227 | byte_stuffer_recv_byte(0, i + 1); | |
e8cb6d80 | 228 | } |
4b9fccc7 FS |
229 | byte_stuffer_recv_byte(0, 8); |
230 | byte_stuffer_recv_byte(0, 1); | |
231 | byte_stuffer_recv_byte(0, 2); | |
232 | byte_stuffer_recv_byte(0, 3); | |
233 | byte_stuffer_recv_byte(0, 4); | |
234 | byte_stuffer_recv_byte(0, 5); | |
235 | byte_stuffer_recv_byte(0, 6); | |
236 | byte_stuffer_recv_byte(0, 7); | |
237 | byte_stuffer_recv_byte(0, 0); | |
e8cb6d80 | 238 | } |
26537474 | 239 | |
0a114601 | 240 | TEST_F(ByteStuffer, receives_an_all_zeros_frame_that_is_maximum_size) { |
26537474 | 241 | uint8_t expected[MAX_FRAME_SIZE] = {}; |
b624f32f | 242 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected))); |
26537474 | 243 | int i; |
4b9fccc7 | 244 | byte_stuffer_recv_byte(0, 1); |
b624f32f | 245 | for (i = 0; i < MAX_FRAME_SIZE; i++) { |
246 | byte_stuffer_recv_byte(0, 1); | |
26537474 | 247 | } |
4b9fccc7 | 248 | byte_stuffer_recv_byte(0, 0); |
26537474 FS |
249 | } |
250 | ||
0a114601 | 251 | TEST_F(ByteStuffer, doesnt_recv_a_frame_thats_too_long_all_zeroes) { |
26537474 | 252 | uint8_t expected[1] = {0}; |
b624f32f | 253 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).Times(0); |
26537474 | 254 | int i; |
4b9fccc7 | 255 | byte_stuffer_recv_byte(0, 1); |
b624f32f | 256 | for (i = 0; i < MAX_FRAME_SIZE; i++) { |
257 | byte_stuffer_recv_byte(0, 1); | |
26537474 | 258 | } |
4b9fccc7 FS |
259 | byte_stuffer_recv_byte(0, 1); |
260 | byte_stuffer_recv_byte(0, 0); | |
26537474 FS |
261 | } |
262 | ||
0a114601 | 263 | TEST_F(ByteStuffer, received_frame_is_aborted_when_its_too_long) { |
26537474 | 264 | uint8_t expected[1] = {1}; |
b624f32f | 265 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(expected))); |
26537474 | 266 | int i; |
4b9fccc7 | 267 | byte_stuffer_recv_byte(0, 1); |
b624f32f | 268 | for (i = 0; i < MAX_FRAME_SIZE; i++) { |
269 | byte_stuffer_recv_byte(0, 1); | |
26537474 | 270 | } |
4b9fccc7 FS |
271 | byte_stuffer_recv_byte(0, 2); |
272 | byte_stuffer_recv_byte(0, 1); | |
273 | byte_stuffer_recv_byte(0, 0); | |
26537474 | 274 | } |
a089eaa8 | 275 | |
0a114601 FS |
276 | TEST_F(ByteStuffer, does_nothing_when_sending_zero_size_frame) { |
277 | EXPECT_EQ(sent_data.size(), 0); | |
4b9fccc7 | 278 | byte_stuffer_send_frame(0, NULL, 0); |
a089eaa8 FS |
279 | } |
280 | ||
0a114601 | 281 | TEST_F(ByteStuffer, send_one_byte_frame) { |
a089eaa8 | 282 | uint8_t data[] = {5}; |
4b9fccc7 | 283 | byte_stuffer_send_frame(1, data, 1); |
a089eaa8 | 284 | uint8_t expected[] = {2, 5, 0}; |
0a114601 | 285 | EXPECT_THAT(sent_data, ElementsAreArray(expected)); |
a089eaa8 FS |
286 | } |
287 | ||
0a114601 | 288 | TEST_F(ByteStuffer, sends_two_byte_frame) { |
a089eaa8 | 289 | uint8_t data[] = {5, 0x77}; |
4b9fccc7 | 290 | byte_stuffer_send_frame(0, data, 2); |
a089eaa8 | 291 | uint8_t expected[] = {3, 5, 0x77, 0}; |
0a114601 | 292 | EXPECT_THAT(sent_data, ElementsAreArray(expected)); |
f3beeb02 FS |
293 | } |
294 | ||
0a114601 | 295 | TEST_F(ByteStuffer, sends_one_byte_frame_with_zero) { |
f3beeb02 | 296 | uint8_t data[] = {0}; |
4b9fccc7 | 297 | byte_stuffer_send_frame(0, data, 1); |
f3beeb02 | 298 | uint8_t expected[] = {1, 1, 0}; |
0a114601 | 299 | EXPECT_THAT(sent_data, ElementsAreArray(expected)); |
f3beeb02 FS |
300 | } |
301 | ||
0a114601 | 302 | TEST_F(ByteStuffer, sends_two_byte_frame_starting_with_zero) { |
f3beeb02 | 303 | uint8_t data[] = {0, 9}; |
4b9fccc7 | 304 | byte_stuffer_send_frame(1, data, 2); |
f3beeb02 | 305 | uint8_t expected[] = {1, 2, 9, 0}; |
0a114601 | 306 | EXPECT_THAT(sent_data, ElementsAreArray(expected)); |
f3beeb02 FS |
307 | } |
308 | ||
0a114601 | 309 | TEST_F(ByteStuffer, sends_two_byte_frame_starting_with_non_zero) { |
f3beeb02 | 310 | uint8_t data[] = {9, 0}; |
4b9fccc7 | 311 | byte_stuffer_send_frame(1, data, 2); |
f3beeb02 | 312 | uint8_t expected[] = {2, 9, 1, 0}; |
0a114601 | 313 | EXPECT_THAT(sent_data, ElementsAreArray(expected)); |
f3beeb02 FS |
314 | } |
315 | ||
0a114601 | 316 | TEST_F(ByteStuffer, sends_three_byte_frame_zero_in_the_middle) { |
f3beeb02 | 317 | uint8_t data[] = {9, 0, 0x68}; |
4b9fccc7 | 318 | byte_stuffer_send_frame(0, data, 3); |
f3beeb02 | 319 | uint8_t expected[] = {2, 9, 2, 0x68, 0}; |
0a114601 | 320 | EXPECT_THAT(sent_data, ElementsAreArray(expected)); |
f3beeb02 FS |
321 | } |
322 | ||
0a114601 | 323 | TEST_F(ByteStuffer, sends_three_byte_frame_data_in_the_middle) { |
f3beeb02 | 324 | uint8_t data[] = {0, 0x55, 0}; |
4b9fccc7 | 325 | byte_stuffer_send_frame(0, data, 3); |
f3beeb02 | 326 | uint8_t expected[] = {1, 2, 0x55, 1, 0}; |
0a114601 | 327 | EXPECT_THAT(sent_data, ElementsAreArray(expected)); |
f3beeb02 FS |
328 | } |
329 | ||
0a114601 | 330 | TEST_F(ByteStuffer, sends_three_byte_frame_with_all_zeroes) { |
f3beeb02 | 331 | uint8_t data[] = {0, 0, 0}; |
4b9fccc7 | 332 | byte_stuffer_send_frame(0, data, 3); |
f3beeb02 | 333 | uint8_t expected[] = {1, 1, 1, 1, 0}; |
0a114601 | 334 | EXPECT_THAT(sent_data, ElementsAreArray(expected)); |
a089eaa8 | 335 | } |
6956c177 | 336 | |
0a114601 | 337 | TEST_F(ByteStuffer, sends_frame_with_254_non_zeroes) { |
6956c177 | 338 | uint8_t data[254]; |
b624f32f | 339 | int i; |
340 | for (i = 0; i < 254; i++) { | |
6956c177 FS |
341 | data[i] = i + 1; |
342 | } | |
4b9fccc7 | 343 | byte_stuffer_send_frame(0, data, 254); |
6956c177 FS |
344 | uint8_t expected[256]; |
345 | expected[0] = 0xFF; | |
b624f32f | 346 | for (i = 1; i < 255; i++) { |
6956c177 FS |
347 | expected[i] = i; |
348 | } | |
349 | expected[255] = 0; | |
0a114601 | 350 | EXPECT_THAT(sent_data, ElementsAreArray(expected)); |
6956c177 FS |
351 | } |
352 | ||
0a114601 | 353 | TEST_F(ByteStuffer, sends_frame_with_255_non_zeroes) { |
6956c177 | 354 | uint8_t data[255]; |
b624f32f | 355 | int i; |
356 | for (i = 0; i < 255; i++) { | |
6956c177 FS |
357 | data[i] = i + 1; |
358 | } | |
4b9fccc7 | 359 | byte_stuffer_send_frame(0, data, 255); |
6956c177 FS |
360 | uint8_t expected[258]; |
361 | expected[0] = 0xFF; | |
b624f32f | 362 | for (i = 1; i < 255; i++) { |
6956c177 FS |
363 | expected[i] = i; |
364 | } | |
365 | expected[255] = 2; | |
366 | expected[256] = 255; | |
367 | expected[257] = 0; | |
0a114601 | 368 | EXPECT_THAT(sent_data, ElementsAreArray(expected)); |
6956c177 FS |
369 | } |
370 | ||
0a114601 | 371 | TEST_F(ByteStuffer, sends_frame_with_254_non_zeroes_followed_by_zero) { |
6956c177 | 372 | uint8_t data[255]; |
b624f32f | 373 | int i; |
374 | for (i = 0; i < 254; i++) { | |
6956c177 FS |
375 | data[i] = i + 1; |
376 | } | |
0a114601 | 377 | data[254] = 0; |
4b9fccc7 | 378 | byte_stuffer_send_frame(0, data, 255); |
6956c177 FS |
379 | uint8_t expected[258]; |
380 | expected[0] = 0xFF; | |
b624f32f | 381 | for (i = 1; i < 255; i++) { |
6956c177 FS |
382 | expected[i] = i; |
383 | } | |
384 | expected[255] = 1; | |
385 | expected[256] = 1; | |
386 | expected[257] = 0; | |
0a114601 | 387 | EXPECT_THAT(sent_data, ElementsAreArray(expected)); |
6956c177 | 388 | } |
713465fb | 389 | |
0a114601 | 390 | TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_small_packet) { |
b624f32f | 391 | uint8_t original_data[] = {1, 2, 3}; |
4b9fccc7 | 392 | byte_stuffer_send_frame(0, original_data, sizeof(original_data)); |
b624f32f | 393 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(original_data))); |
713465fb | 394 | int i; |
b624f32f | 395 | for (auto& d : sent_data) { |
396 | byte_stuffer_recv_byte(1, d); | |
713465fb FS |
397 | } |
398 | } | |
399 | ||
0a114601 | 400 | TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_small_packet_with_zeros) { |
b624f32f | 401 | uint8_t original_data[] = {1, 0, 3, 0, 0, 9}; |
4b9fccc7 | 402 | byte_stuffer_send_frame(1, original_data, sizeof(original_data)); |
b624f32f | 403 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(original_data))); |
713465fb | 404 | int i; |
b624f32f | 405 | for (auto& d : sent_data) { |
406 | byte_stuffer_recv_byte(1, d); | |
713465fb FS |
407 | } |
408 | } | |
409 | ||
0a114601 | 410 | TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes) { |
713465fb | 411 | uint8_t original_data[254]; |
b624f32f | 412 | int i; |
413 | for (i = 0; i < 254; i++) { | |
713465fb FS |
414 | original_data[i] = i + 1; |
415 | } | |
4b9fccc7 | 416 | byte_stuffer_send_frame(0, original_data, sizeof(original_data)); |
b624f32f | 417 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(original_data))); |
418 | for (auto& d : sent_data) { | |
419 | byte_stuffer_recv_byte(1, d); | |
713465fb FS |
420 | } |
421 | } | |
422 | ||
0a114601 | 423 | TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_256_bytes) { |
713465fb | 424 | uint8_t original_data[256]; |
b624f32f | 425 | int i; |
426 | for (i = 0; i < 254; i++) { | |
713465fb FS |
427 | original_data[i] = i + 1; |
428 | } | |
429 | original_data[254] = 22; | |
430 | original_data[255] = 23; | |
4b9fccc7 | 431 | byte_stuffer_send_frame(0, original_data, sizeof(original_data)); |
b624f32f | 432 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(original_data))); |
433 | for (auto& d : sent_data) { | |
434 | byte_stuffer_recv_byte(1, d); | |
713465fb FS |
435 | } |
436 | } | |
437 | ||
0a114601 | 438 | TEST_F(ByteStuffer, sends_and_receives_full_roundtrip_254_bytes_and_then_zero) { |
713465fb | 439 | uint8_t original_data[255]; |
b624f32f | 440 | int i; |
441 | for (i = 0; i < 254; i++) { | |
713465fb FS |
442 | original_data[i] = i + 1; |
443 | } | |
444 | original_data[254] = 0; | |
4b9fccc7 | 445 | byte_stuffer_send_frame(0, original_data, sizeof(original_data)); |
b624f32f | 446 | EXPECT_CALL(*this, validator_recv_frame(_, _, _)).With(Args<1, 2>(ElementsAreArray(original_data))); |
447 | for (auto& d : sent_data) { | |
448 | byte_stuffer_recv_byte(1, d); | |
713465fb FS |
449 | } |
450 | } |