blob: 15b0265745c4f757cd28062a59b118b78682f260 [file] [log] [blame]
Andrew Jefferyc63f63a2023-02-24 22:29:33 +10301#include <endian.h>
2
3#include <cfloat>
4
5#include <gtest/gtest.h>
6
7/* We're exercising the implementation so disable the asserts for now */
8#ifndef NDEBUG
9#define NDEBUG 1
10#endif
11
Andrew Jefferyc63f63a2023-02-24 22:29:33 +103012#include "msgbuf.h"
13
14TEST(msgbuf, init_bad_ctx)
15{
16 EXPECT_NE(pldm_msgbuf_init(NULL, 0, NULL, 0), PLDM_SUCCESS);
17}
18
19TEST(msgbuf, init_bad_minsize)
20{
21 struct pldm_msgbuf _ctx;
22 struct pldm_msgbuf* ctx = &_ctx;
23 uint8_t buf[1] = {};
24
25 EXPECT_NE(pldm_msgbuf_init(ctx, sizeof(buf) + 1U, buf, sizeof(buf)),
26 PLDM_SUCCESS);
27}
28
29TEST(msgbuf, init_bad_buf)
30{
31 struct pldm_msgbuf _ctx;
32 struct pldm_msgbuf* ctx = &_ctx;
33
34 EXPECT_NE(pldm_msgbuf_init(ctx, 0, NULL, 0), PLDM_SUCCESS);
35}
36
37TEST(msgbuf, init_bad_len)
38{
39 struct pldm_msgbuf _ctx;
40 struct pldm_msgbuf* ctx = &_ctx;
41 uint8_t buf[1] = {};
42
43 EXPECT_NE(pldm_msgbuf_init(ctx, sizeof(buf), buf, SIZE_MAX), PLDM_SUCCESS);
44}
45
46TEST(msgbuf, init_overflow)
47{
48 struct pldm_msgbuf _ctx;
49 struct pldm_msgbuf* ctx = &_ctx;
Andrew Jefferyc63f63a2023-02-24 22:29:33 +103050 // NOLINTNEXTLINE(performance-no-int-to-ptr)
Andrew Jeffery07febdb2024-05-17 14:17:14 +093051 void* buf = (void*)UINTPTR_MAX;
Andrew Jefferyc63f63a2023-02-24 22:29:33 +103052
53 EXPECT_NE(pldm_msgbuf_init(ctx, 0, buf, 2), PLDM_SUCCESS);
54}
55
56TEST(msgbuf, init_success)
57{
58 struct pldm_msgbuf _ctx;
59 struct pldm_msgbuf* ctx = &_ctx;
60 uint8_t buf[1] = {};
61
62 EXPECT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
63 PLDM_SUCCESS);
64}
65
66TEST(msgbuf, destroy_none)
67{
68 struct pldm_msgbuf _ctx;
69 struct pldm_msgbuf* ctx = &_ctx;
70 uint8_t buf[1] = {};
71
72 ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
73 PLDM_SUCCESS);
74 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
75}
76
77TEST(msgbuf, destroy_exact)
78{
79 struct pldm_msgbuf _ctx;
80 struct pldm_msgbuf* ctx = &_ctx;
81 uint8_t buf[1] = {0xa5};
82 uint8_t val;
83
84 ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
85 PLDM_SUCCESS);
86 EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
87 EXPECT_EQ(val, 0xa5);
88 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
89}
90
91TEST(msgbuf, destroy_over)
92{
93 struct pldm_msgbuf _ctx;
94 struct pldm_msgbuf* ctx = &_ctx;
95 uint8_t buf[1] = {0xa5};
96 uint8_t val;
97
98 ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
99 PLDM_SUCCESS);
100 ASSERT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
101 ASSERT_EQ(val, 0xa5);
102 EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
103 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
104}
105
106TEST(msgbuf, destroy_under)
107{
108 struct pldm_msgbuf _ctx;
109 struct pldm_msgbuf* ctx = &_ctx;
110 uint8_t buf[2] = {0x5a, 0xa5};
111 uint8_t val;
112
113 ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
114 PLDM_SUCCESS);
115 EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
116 EXPECT_EQ(val, 0x5a);
117 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
118}
119
120TEST(msgbuf, extract_one_uint8)
121{
122 struct pldm_msgbuf _ctx;
123 struct pldm_msgbuf* ctx = &_ctx;
124 uint8_t buf[1] = {0xa5};
125 uint8_t val;
126
127 ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
128 PLDM_SUCCESS);
129 EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
130 EXPECT_EQ(val, 0xa5);
131 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
132}
133
134TEST(msgbuf, extract_over_uint8)
135{
136 struct pldm_msgbuf _ctx;
137 struct pldm_msgbuf* ctx = &_ctx;
138 uint8_t buf[1] = {};
139 uint8_t val;
140
141 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
142 EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
143 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
144}
145
146TEST(msgbuf, extract_one_int8)
147{
148 struct pldm_msgbuf _ctx;
149 struct pldm_msgbuf* ctx = &_ctx;
150 int8_t buf[1] = {-1};
151 int8_t val;
152
153 ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
154 PLDM_SUCCESS);
155 EXPECT_EQ(pldm_msgbuf_extract_int8(ctx, &val), PLDM_SUCCESS);
156 EXPECT_EQ(val, -1);
157 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
158}
159
160TEST(msgbuf, extract_over_int8)
161{
162 struct pldm_msgbuf _ctx;
163 struct pldm_msgbuf* ctx = &_ctx;
164 int8_t buf[1] = {};
165 int8_t val;
166
167 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
168 EXPECT_NE(pldm_msgbuf_extract_int8(ctx, &val), PLDM_SUCCESS);
169 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
170}
171
172TEST(msgbuf, extract_one_uint16)
173{
174 struct pldm_msgbuf _ctx;
175 struct pldm_msgbuf* ctx = &_ctx;
176 uint16_t buf[1] = {htole16(0x5aa5)};
177 uint16_t val = {};
178
179 ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
180 PLDM_SUCCESS);
181 EXPECT_EQ(pldm_msgbuf_extract_uint16(ctx, &val), PLDM_SUCCESS);
182 EXPECT_EQ(val, 0x5aa5);
183 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
184}
185
186TEST(msgbuf, extract_over_uint16)
187{
188 struct pldm_msgbuf _ctx;
189 struct pldm_msgbuf* ctx = &_ctx;
190 uint16_t buf[1] = {};
191 uint16_t val;
192
193 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
194 EXPECT_NE(pldm_msgbuf_extract_uint16(ctx, &val), PLDM_SUCCESS);
195 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
196}
197
198TEST(msgbuf, extract_one_int16)
199{
200 struct pldm_msgbuf _ctx;
201 struct pldm_msgbuf* ctx = &_ctx;
202 int16_t buf[1] = {(int16_t)(htole16((uint16_t)INT16_MIN))};
203 int16_t val;
204
205 ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
206 PLDM_SUCCESS);
207 EXPECT_EQ(pldm_msgbuf_extract_int16(ctx, &val), PLDM_SUCCESS);
208 EXPECT_EQ(val, INT16_MIN);
209 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
210}
211
212TEST(msgbuf, extract_over_int16)
213{
214 struct pldm_msgbuf _ctx;
215 struct pldm_msgbuf* ctx = &_ctx;
216 int16_t buf[1] = {};
217 int16_t val;
218
219 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
220 EXPECT_NE(pldm_msgbuf_extract_int16(ctx, &val), PLDM_SUCCESS);
221 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
222}
223
224TEST(msgbuf, extract_one_uint32)
225{
226 struct pldm_msgbuf _ctx;
227 struct pldm_msgbuf* ctx = &_ctx;
228 uint32_t buf[1] = {htole32(0x5a00ffa5)};
229 uint32_t val;
230
231 ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
232 PLDM_SUCCESS);
233 EXPECT_EQ(pldm_msgbuf_extract_uint32(ctx, &val), PLDM_SUCCESS);
234 EXPECT_EQ(val, 0x5a00ffa5);
235 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
236}
237
238TEST(msgbuf, extract_over_uint32)
239{
240 struct pldm_msgbuf _ctx;
241 struct pldm_msgbuf* ctx = &_ctx;
242 uint32_t buf[1] = {};
243 uint32_t val;
244
245 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
246 EXPECT_NE(pldm_msgbuf_extract_uint32(ctx, &val), PLDM_SUCCESS);
247 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
248}
249
250TEST(msgbuf, extract_one_int32)
251{
252 struct pldm_msgbuf _ctx;
253 struct pldm_msgbuf* ctx = &_ctx;
254 int32_t buf[1] = {(int32_t)(htole32((uint32_t)(INT32_MIN)))};
255 int32_t val;
256
257 ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
258 PLDM_SUCCESS);
259 EXPECT_EQ(pldm_msgbuf_extract_int32(ctx, &val), PLDM_SUCCESS);
260 EXPECT_EQ(val, INT32_MIN);
261 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
262}
263
264TEST(msgbuf, extract_over_int32)
265{
266 struct pldm_msgbuf _ctx;
267 struct pldm_msgbuf* ctx = &_ctx;
268 int32_t buf[1] = {};
269 int32_t val;
270
271 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
272 EXPECT_NE(pldm_msgbuf_extract_int32(ctx, &val), PLDM_SUCCESS);
273 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
274}
275
276TEST(msgbuf, extract_one_real32)
277{
278 struct pldm_msgbuf _ctx;
279 struct pldm_msgbuf* ctx = &_ctx;
280 uint32_t buf[1] = {};
281 uint32_t xform;
282 real32_t val;
283
284 val = FLT_MAX;
285 memcpy(&xform, &val, sizeof(val));
286 buf[0] = htole32(xform);
287 val = 0;
288
289 ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
290 PLDM_SUCCESS);
291 EXPECT_EQ(pldm_msgbuf_extract_real32(ctx, &val), PLDM_SUCCESS);
292 EXPECT_EQ(val, FLT_MAX);
293 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
294}
295
296TEST(msgbuf, extract_over_real32)
297{
298 struct pldm_msgbuf _ctx;
299 struct pldm_msgbuf* ctx = &_ctx;
300 real32_t buf[1] = {};
301 real32_t val;
302
303 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
304 EXPECT_NE(pldm_msgbuf_extract_real32(ctx, &val), PLDM_SUCCESS);
305 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
306}
Andrew Jeffery369b1212023-04-20 15:44:48 +0930307
308TEST(msgbuf, extract_array_uint8_buf0_req0)
309{
310 struct pldm_msgbuf _ctx;
311 struct pldm_msgbuf* ctx = &_ctx;
312 uint8_t buf[1] = {};
313 uint8_t arr[1];
314
315 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
316 EXPECT_EQ(pldm_msgbuf_extract_array_uint8(ctx, arr, 0), PLDM_SUCCESS);
317 ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
318}
319
320TEST(msgbuf, extract_array_uint8_buf1_req1)
321{
322 struct pldm_msgbuf _ctx;
323 struct pldm_msgbuf* ctx = &_ctx;
324 uint8_t buf[1] = {};
325 uint8_t arr[1];
326
327 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
328 EXPECT_EQ(pldm_msgbuf_extract_array_uint8(ctx, arr, sizeof(arr)),
329 PLDM_SUCCESS);
330 EXPECT_EQ(arr[0], 0);
331 ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
332}
333
334TEST(msgbuf, extract_array_uint8_buf1_req2)
335{
336 struct pldm_msgbuf _ctx;
337 struct pldm_msgbuf* ctx = &_ctx;
338 uint8_t buf[1] = {};
339 uint8_t arr[2];
340
341 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
342 EXPECT_NE(pldm_msgbuf_extract_array_uint8(ctx, arr, sizeof(arr)),
343 PLDM_SUCCESS);
344 ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
345}
Andrew Jefferydb7b8322023-04-12 23:05:21 +0930346
347TEST(msgbuf, consumed_under)
348{
349 struct pldm_msgbuf _ctx;
350 struct pldm_msgbuf* ctx = &_ctx;
351 uint8_t buf[1] = {};
352
353 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
354 EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), PLDM_ERROR_INVALID_LENGTH);
355}
356
357TEST(msgbuf, consumed_exact)
358{
359 struct pldm_msgbuf _ctx;
360 struct pldm_msgbuf* ctx = &_ctx;
361 uint8_t buf[1] = {};
362 uint8_t val;
363
364 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
365 EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
366 EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), PLDM_SUCCESS);
367}
368
369TEST(msgbuf, consumed_over)
370{
371 struct pldm_msgbuf _ctx;
372 struct pldm_msgbuf* ctx = &_ctx;
373 uint8_t buf[1] = {};
374 uint8_t val[2];
375
376 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
377 EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val[0]), PLDM_SUCCESS);
378 EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val[1]), PLDM_SUCCESS);
379 EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), PLDM_ERROR_INVALID_LENGTH);
380}
Thu Nguyen062c8762023-04-22 20:45:04 +0700381
382TEST(msgbuf, pldm_msgbuf_insert_int32_good)
383{
384 struct pldm_msgbuf _ctx;
385 struct pldm_msgbuf* ctx = &_ctx;
386 int32_t src = -12345;
387 int32_t checkVal = 0;
388 uint8_t buf[sizeof(int32_t)] = {};
389
390 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
391 EXPECT_EQ(pldm_msgbuf_insert_int32(ctx, src), PLDM_SUCCESS);
392
393 struct pldm_msgbuf _ctxExtract;
394 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
395
396 ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
397 EXPECT_EQ(pldm_msgbuf_extract_int32(ctxExtract, &checkVal), PLDM_SUCCESS);
398
399 EXPECT_EQ(src, checkVal);
400 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
401 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
402}
403
404TEST(msgbuf, pldm_msgbuf_insert_int32_bad)
405{
406 int32_t src = -12345;
407
408 auto rc = pldm_msgbuf_insert_int32(NULL, src);
409
410 EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
411}
412
413TEST(msgbuf, pldm_msgbuf_insert_uint32_good)
414{
415 struct pldm_msgbuf _ctx;
416 struct pldm_msgbuf* ctx = &_ctx;
417 uint32_t src = 0xf1223344;
418 uint32_t checkVal = 0;
419 uint8_t buf[sizeof(uint32_t)] = {};
420
421 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
422 EXPECT_EQ(pldm_msgbuf_insert_uint32(ctx, src), PLDM_SUCCESS);
423
424 struct pldm_msgbuf _ctxExtract;
425 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
426
427 ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
428 EXPECT_EQ(pldm_msgbuf_extract_uint32(ctxExtract, &checkVal), PLDM_SUCCESS);
429
430 EXPECT_EQ(src, checkVal);
431 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
432 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
433}
434
435TEST(msgbuf, pldm_msgbuf_insert_uint32_bad)
436{
437 uint32_t src = 0xf1223344;
438
439 auto rc = pldm_msgbuf_insert_uint32(NULL, src);
440
441 EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
442}
443
444TEST(msgbuf, pldm_msgbuf_insert_uint16_good)
445{
446 struct pldm_msgbuf _ctx;
447 struct pldm_msgbuf* ctx = &_ctx;
448 uint16_t src = 0xf344;
449 uint16_t checkVal = 0;
450 uint8_t buf[sizeof(uint16_t)] = {};
451
452 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(uint16_t)), PLDM_SUCCESS);
453 EXPECT_EQ(pldm_msgbuf_insert_uint16(ctx, src), PLDM_SUCCESS);
454
455 struct pldm_msgbuf _ctxExtract;
456 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
457
458 ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
459 EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &checkVal), PLDM_SUCCESS);
460
461 EXPECT_EQ(src, checkVal);
462 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
463 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
464}
465
466TEST(msgbuf, pldm_msgbuf_insert_uint16_bad)
467{
468 uint16_t src = 0xf344;
469
470 auto rc = pldm_msgbuf_insert_uint16(NULL, src);
471
472 EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
473}
474
475TEST(msgbuf, pldm_msgbuf_insert_int16_good)
476{
477 struct pldm_msgbuf _ctx;
478 struct pldm_msgbuf* ctx = &_ctx;
479 int16_t src = -12;
480 int16_t checkVal = 0;
481 uint8_t buf[sizeof(int16_t)] = {};
482
483 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(uint16_t)), PLDM_SUCCESS);
484 EXPECT_EQ(pldm_msgbuf_insert_int16(ctx, src), PLDM_SUCCESS);
485
486 struct pldm_msgbuf _ctxExtract;
487 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
488
489 ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
490 EXPECT_EQ(pldm_msgbuf_extract_int16(ctxExtract, &checkVal), PLDM_SUCCESS);
491
492 EXPECT_EQ(src, checkVal);
493 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
494 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
495}
496
497TEST(msgbuf, pldm_msgbuf_insert_int16_bad)
498{
499 int16_t src = -12;
500
501 auto rc = pldm_msgbuf_insert_int16(NULL, src);
502
503 EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
504}
505
506TEST(msgbuf, pldm_msgbuf_insert_uint8_good)
507{
508 struct pldm_msgbuf _ctx;
509 struct pldm_msgbuf* ctx = &_ctx;
510 uint8_t src = 0xf4;
511 uint8_t checkVal = 0;
512 uint8_t buf[sizeof(uint8_t)] = {};
513
514 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
515 EXPECT_EQ(pldm_msgbuf_insert_uint8(ctx, src), PLDM_SUCCESS);
516
517 struct pldm_msgbuf _ctxExtract;
518 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
519
520 ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
521 EXPECT_EQ(pldm_msgbuf_extract_uint8(ctxExtract, &checkVal), PLDM_SUCCESS);
522
523 EXPECT_EQ(src, checkVal);
524 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
525 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
526}
527
528TEST(msgbuf, pldm_msgbuf_insert_uint8_bad)
529{
530 uint8_t src = 0xf4;
531
532 auto rc = pldm_msgbuf_insert_uint8(NULL, src);
533
534 EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
535}
536
537TEST(msgbuf, pldm_msgbuf_insert_int8_good)
538{
539 struct pldm_msgbuf _ctx;
540 struct pldm_msgbuf* ctx = &_ctx;
541 int8_t src = -4;
542 int8_t checkVal = 0;
543 uint8_t buf[sizeof(int8_t)] = {};
544
545 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
546 EXPECT_EQ(pldm_msgbuf_insert_int8(ctx, src), PLDM_SUCCESS);
547
548 struct pldm_msgbuf _ctxExtract;
549 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
550
551 ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
552 EXPECT_EQ(pldm_msgbuf_extract_int8(ctxExtract, &checkVal), PLDM_SUCCESS);
553
554 EXPECT_EQ(src, checkVal);
555 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
556 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
557}
558
559TEST(msgbuf, pldm_msgbuf_insert_int8_bad)
560{
561 int8_t src = -4;
562
563 auto rc = pldm_msgbuf_insert_int8(NULL, src);
564
565 EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
566}
567
568TEST(msgbuf, pldm_msgbuf_insert_array_uint8_good)
569{
570 struct pldm_msgbuf _ctx;
571 struct pldm_msgbuf* ctx = &_ctx;
572 uint8_t src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
573 uint8_t buf[6] = {};
574 uint8_t retBuff[6] = {};
575
576 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
577 EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
578 PLDM_SUCCESS);
579
580 struct pldm_msgbuf _ctxExtract;
581 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
582
583 ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
584 EXPECT_EQ(
585 pldm_msgbuf_extract_array_uint8(ctxExtract, retBuff, sizeof(retBuff)),
586 PLDM_SUCCESS);
587
588 EXPECT_EQ(memcmp(src, retBuff, sizeof(retBuff)), 0);
589 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
590 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
591}
592
593TEST(msgbuf, pldm_msgbuf_insert_array_uint8_bad)
594{
595 struct pldm_msgbuf _ctx;
596 struct pldm_msgbuf* ctx = &_ctx;
597 uint8_t src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
598 uint8_t buf[6] = {};
599
600 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
601 EXPECT_EQ(pldm_msgbuf_insert_array_uint8(NULL, src, sizeof(src)),
602 PLDM_ERROR_INVALID_DATA);
603 EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, NULL, sizeof(src)),
604 PLDM_ERROR_INVALID_DATA);
605 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
606}
607
608TEST(msgbuf, pldm_msgbuf_span_required_good)
609{
610 struct pldm_msgbuf _ctx;
611 struct pldm_msgbuf* ctx = &_ctx;
612 uint8_t src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
613 uint8_t buf[6] = {0};
614 const size_t required = 4;
615 uint8_t expectData[required] = {0x44, 0x55, 0x66, 0x77};
616 uint16_t testVal;
617 uint8_t* retBuff = NULL;
618
619 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
620 EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
621 PLDM_SUCCESS);
622
623 struct pldm_msgbuf _ctxExtract;
624 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
625
626 ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
627 EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &testVal), PLDM_SUCCESS);
628 EXPECT_EQ(pldm_msgbuf_span_required(ctxExtract, required, (void**)&retBuff),
629 PLDM_SUCCESS);
630
631 EXPECT_EQ(memcmp(expectData, retBuff, required), 0);
632 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
633 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
634}
635
636TEST(msgbuf, pldm_msgbuf_span_required_bad)
637{
638 struct pldm_msgbuf _ctx;
639 struct pldm_msgbuf* ctx = &_ctx;
640 uint8_t src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
641 uint8_t buf[6] = {0};
642 const size_t required = 4;
643 uint16_t testVal;
644 [[maybe_unused]] uint8_t* retBuff = NULL;
645
646 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
647 EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
648 PLDM_SUCCESS);
649
650 struct pldm_msgbuf _ctxExtract;
651 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
652
653 ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
654 EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &testVal), PLDM_SUCCESS);
655 EXPECT_EQ(pldm_msgbuf_span_required(ctxExtract, required, NULL),
656 PLDM_ERROR_INVALID_DATA);
657 EXPECT_EQ(pldm_msgbuf_span_required(NULL, required, (void**)&retBuff),
658 PLDM_ERROR_INVALID_DATA);
659
660 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
661 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
662}
663
664TEST(msgbuf, pldm_msgbuf_span_remaining_good)
665{
666 struct pldm_msgbuf _ctx;
667 struct pldm_msgbuf* ctx = &_ctx;
668 uint8_t src[8] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99};
669 uint8_t buf[8] = {0};
670 uint16_t testVal;
671 uint8_t expectData[6] = {0x44, 0x55, 0x66, 0x77, 0x88, 0x99};
672 size_t remaining;
673 uint8_t* retBuff = NULL;
674
675 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
676 EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
677 PLDM_SUCCESS);
678
679 struct pldm_msgbuf _ctxExtract;
680 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
681
682 ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
683 EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &testVal), PLDM_SUCCESS);
684 EXPECT_EQ(
685 pldm_msgbuf_span_remaining(ctxExtract, (void**)&retBuff, &remaining),
686 PLDM_SUCCESS);
687
688 EXPECT_EQ(remaining, sizeof(expectData));
689 EXPECT_EQ(memcmp(expectData, retBuff, remaining), 0);
690 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
691 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
692}
693
694TEST(msgbuf, pldm_msgbuf_span_remaining_bad)
695{
696 struct pldm_msgbuf _ctx;
697 struct pldm_msgbuf* ctx = &_ctx;
698 uint8_t src[8] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99};
699 uint8_t buf[8] = {0};
700 uint16_t testVal;
701 size_t remaining;
702 uint8_t* retBuff = NULL;
703
704 ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
705 EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
706 PLDM_SUCCESS);
707
708 struct pldm_msgbuf _ctxExtract;
709 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
710
711 ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
712 EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &testVal), PLDM_SUCCESS);
713 EXPECT_EQ(pldm_msgbuf_span_remaining(NULL, (void**)&retBuff, &remaining),
714 PLDM_ERROR_INVALID_DATA);
715 EXPECT_EQ(pldm_msgbuf_span_remaining(ctxExtract, NULL, &remaining),
716 PLDM_ERROR_INVALID_DATA);
717 EXPECT_EQ(pldm_msgbuf_span_remaining(ctxExtract, (void**)&retBuff, NULL),
718 PLDM_ERROR_INVALID_DATA);
719
720 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
721 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
Andrew Jeffery07febdb2024-05-17 14:17:14 +0930722}