clang-format changes
[jackhill/qmk/firmware.git] / quantum / serial_link / tests / byte_stuffer_tests.cpp
CommitLineData
1f1bc183
FS
1/*
2The MIT License (MIT)
3
4Copyright (c) 2016 Fred Sundvik
5
6Permission is hereby granted, free of charge, to any person obtaining a copy
7of this software and associated documentation files (the "Software"), to deal
8in the Software without restriction, including without limitation the rights
9to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10copies of the Software, and to permit persons to whom the Software is
11furnished to do so, subject to the following conditions:
12
13The above copyright notice and this permission notice shall be included in all
14copies or substantial portions of the Software.
15
16THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22SOFTWARE.
23*/
24
0a114601
FS
25#include "gtest/gtest.h"
26#include "gmock/gmock.h"
27#include <vector>
28#include <algorithm>
29extern "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 35using testing::_;
0a114601 36using testing::Args;
b624f32f 37using testing::ElementsAreArray;
ce3a21cb 38
b624f32f 39class 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
56ByteStuffer* ByteStuffer::Instance = nullptr;
57
58extern "C" {
b624f32f 59void validator_recv_frame(uint8_t link, uint8_t* data, uint16_t size) { ByteStuffer::Instance->validator_recv_frame(link, data, size); }
0a114601 60
b624f32f 61void send_data(uint8_t link, const uint8_t* data, uint16_t size) { ByteStuffer::Instance->send_data(link, data, size); }
a089eaa8
FS
62}
63
0a114601 64TEST_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 69TEST_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 74TEST_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 79TEST_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 85TEST_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 92TEST_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 102TEST_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 110TEST_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 121TEST_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 135TEST_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 147TEST_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 160TEST_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 174TEST_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 191TEST_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 208TEST_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 240TEST_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 251TEST_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 263TEST_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
276TEST_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 281TEST_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 288TEST_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 295TEST_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 302TEST_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 309TEST_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 316TEST_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 323TEST_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 330TEST_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 337TEST_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 353TEST_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 371TEST_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 390TEST_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 400TEST_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 410TEST_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 423TEST_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 438TEST_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}