blob: 52d47ae9598b85e07d7e2e55c3760802f27ac54f [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{
Andrew Jefferyc8df31c2024-05-21 16:47:43 +093016 EXPECT_NE(pldm_msgbuf_init_cc(NULL, 0, NULL, 0), PLDM_SUCCESS);
Andrew Jefferyc63f63a2023-02-24 22:29:33 +103017}
18
19TEST(msgbuf, init_bad_minsize)
20{
21 struct pldm_msgbuf _ctx;
22 struct pldm_msgbuf* ctx = &_ctx;
23 uint8_t buf[1] = {};
24
Andrew Jefferyc8df31c2024-05-21 16:47:43 +093025 EXPECT_NE(pldm_msgbuf_init_cc(ctx, sizeof(buf) + 1U, buf, sizeof(buf)),
Andrew Jefferyc63f63a2023-02-24 22:29:33 +103026 PLDM_SUCCESS);
27}
28
29TEST(msgbuf, init_bad_buf)
30{
31 struct pldm_msgbuf _ctx;
32 struct pldm_msgbuf* ctx = &_ctx;
33
Andrew Jefferyc8df31c2024-05-21 16:47:43 +093034 EXPECT_NE(pldm_msgbuf_init_cc(ctx, 0, NULL, 0), PLDM_SUCCESS);
Andrew Jefferyc63f63a2023-02-24 22:29:33 +103035}
36
37TEST(msgbuf, init_bad_len)
38{
39 struct pldm_msgbuf _ctx;
40 struct pldm_msgbuf* ctx = &_ctx;
41 uint8_t buf[1] = {};
42
Andrew Jefferyc8df31c2024-05-21 16:47:43 +093043 EXPECT_NE(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, SIZE_MAX),
44 PLDM_SUCCESS);
Andrew Jefferyc63f63a2023-02-24 22:29:33 +103045}
46
47TEST(msgbuf, init_overflow)
48{
49 struct pldm_msgbuf _ctx;
50 struct pldm_msgbuf* ctx = &_ctx;
Andrew Jefferyc63f63a2023-02-24 22:29:33 +103051 // NOLINTNEXTLINE(performance-no-int-to-ptr)
Andrew Jeffery07febdb2024-05-17 14:17:14 +093052 void* buf = (void*)UINTPTR_MAX;
Andrew Jefferyc63f63a2023-02-24 22:29:33 +103053
Andrew Jefferyc8df31c2024-05-21 16:47:43 +093054 EXPECT_NE(pldm_msgbuf_init_cc(ctx, 0, buf, 2), PLDM_SUCCESS);
Andrew Jefferyc63f63a2023-02-24 22:29:33 +103055}
56
57TEST(msgbuf, init_success)
58{
59 struct pldm_msgbuf _ctx;
60 struct pldm_msgbuf* ctx = &_ctx;
61 uint8_t buf[1] = {};
62
Andrew Jefferyc8df31c2024-05-21 16:47:43 +093063 EXPECT_EQ(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)),
Andrew Jefferyc63f63a2023-02-24 22:29:33 +103064 PLDM_SUCCESS);
65}
66
67TEST(msgbuf, destroy_none)
68{
69 struct pldm_msgbuf _ctx;
70 struct pldm_msgbuf* ctx = &_ctx;
71 uint8_t buf[1] = {};
72
Andrew Jefferyc8df31c2024-05-21 16:47:43 +093073 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)),
Andrew Jefferyc63f63a2023-02-24 22:29:33 +103074 PLDM_SUCCESS);
75 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
76}
77
78TEST(msgbuf, destroy_exact)
79{
80 struct pldm_msgbuf _ctx;
81 struct pldm_msgbuf* ctx = &_ctx;
82 uint8_t buf[1] = {0xa5};
83 uint8_t val;
84
Andrew Jefferyc8df31c2024-05-21 16:47:43 +093085 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)),
Andrew Jefferyc63f63a2023-02-24 22:29:33 +103086 PLDM_SUCCESS);
87 EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
88 EXPECT_EQ(val, 0xa5);
89 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
90}
91
92TEST(msgbuf, destroy_over)
93{
94 struct pldm_msgbuf _ctx;
95 struct pldm_msgbuf* ctx = &_ctx;
96 uint8_t buf[1] = {0xa5};
97 uint8_t val;
98
Andrew Jefferyc8df31c2024-05-21 16:47:43 +093099 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)),
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030100 PLDM_SUCCESS);
101 ASSERT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
102 ASSERT_EQ(val, 0xa5);
103 EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
104 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
105}
106
107TEST(msgbuf, destroy_under)
108{
109 struct pldm_msgbuf _ctx;
110 struct pldm_msgbuf* ctx = &_ctx;
111 uint8_t buf[2] = {0x5a, 0xa5};
112 uint8_t val;
113
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930114 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)),
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030115 PLDM_SUCCESS);
116 EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
117 EXPECT_EQ(val, 0x5a);
118 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
119}
120
121TEST(msgbuf, extract_one_uint8)
122{
123 struct pldm_msgbuf _ctx;
124 struct pldm_msgbuf* ctx = &_ctx;
125 uint8_t buf[1] = {0xa5};
126 uint8_t val;
127
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930128 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)),
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030129 PLDM_SUCCESS);
130 EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
131 EXPECT_EQ(val, 0xa5);
132 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
133}
134
135TEST(msgbuf, extract_over_uint8)
136{
137 struct pldm_msgbuf _ctx;
138 struct pldm_msgbuf* ctx = &_ctx;
139 uint8_t buf[1] = {};
140 uint8_t val;
141
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930142 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030143 EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
144 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
145}
146
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930147TEST(msgbuf, extract_under_uint8)
148{
149 struct pldm_msgbuf _ctx;
150 struct pldm_msgbuf* ctx = &_ctx;
151
152 uint8_t buf[1] = {};
153 uint8_t val;
154
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930155 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930156 ctx->remaining = INTMAX_MIN;
157 EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
158 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
159}
160
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030161TEST(msgbuf, extract_one_int8)
162{
163 struct pldm_msgbuf _ctx;
164 struct pldm_msgbuf* ctx = &_ctx;
165 int8_t buf[1] = {-1};
166 int8_t val;
167
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930168 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)),
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030169 PLDM_SUCCESS);
170 EXPECT_EQ(pldm_msgbuf_extract_int8(ctx, &val), PLDM_SUCCESS);
171 EXPECT_EQ(val, -1);
172 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
173}
174
175TEST(msgbuf, extract_over_int8)
176{
177 struct pldm_msgbuf _ctx;
178 struct pldm_msgbuf* ctx = &_ctx;
179 int8_t buf[1] = {};
180 int8_t val;
181
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930182 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030183 EXPECT_NE(pldm_msgbuf_extract_int8(ctx, &val), PLDM_SUCCESS);
184 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
185}
186
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930187TEST(msgbuf, extract_under_int8)
188{
189 struct pldm_msgbuf _ctx;
190 struct pldm_msgbuf* ctx = &_ctx;
191
192 uint8_t buf[1] = {};
193 int8_t val;
194
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930195 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930196 ctx->remaining = INTMAX_MIN;
197 EXPECT_NE(pldm_msgbuf_extract_int8(ctx, &val), PLDM_SUCCESS);
198 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
199}
200
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030201TEST(msgbuf, extract_one_uint16)
202{
203 struct pldm_msgbuf _ctx;
204 struct pldm_msgbuf* ctx = &_ctx;
205 uint16_t buf[1] = {htole16(0x5aa5)};
206 uint16_t val = {};
207
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930208 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)),
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030209 PLDM_SUCCESS);
210 EXPECT_EQ(pldm_msgbuf_extract_uint16(ctx, &val), PLDM_SUCCESS);
211 EXPECT_EQ(val, 0x5aa5);
212 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
213}
214
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930215TEST(msgbuf, extract_under_uint16)
216{
217 struct pldm_msgbuf _ctx;
218 struct pldm_msgbuf* ctx = &_ctx;
219
220 uint16_t buf[1] = {};
221 uint16_t val;
222
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930223 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930224 ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
225 EXPECT_NE(pldm_msgbuf_extract_uint16(ctx, &val), PLDM_SUCCESS);
226 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
227}
228
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030229TEST(msgbuf, extract_over_uint16)
230{
231 struct pldm_msgbuf _ctx;
232 struct pldm_msgbuf* ctx = &_ctx;
233 uint16_t buf[1] = {};
234 uint16_t val;
235
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930236 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030237 EXPECT_NE(pldm_msgbuf_extract_uint16(ctx, &val), PLDM_SUCCESS);
238 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
239}
240
241TEST(msgbuf, extract_one_int16)
242{
243 struct pldm_msgbuf _ctx;
244 struct pldm_msgbuf* ctx = &_ctx;
245 int16_t buf[1] = {(int16_t)(htole16((uint16_t)INT16_MIN))};
246 int16_t val;
247
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930248 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)),
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030249 PLDM_SUCCESS);
250 EXPECT_EQ(pldm_msgbuf_extract_int16(ctx, &val), PLDM_SUCCESS);
251 EXPECT_EQ(val, INT16_MIN);
252 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
253}
254
255TEST(msgbuf, extract_over_int16)
256{
257 struct pldm_msgbuf _ctx;
258 struct pldm_msgbuf* ctx = &_ctx;
259 int16_t buf[1] = {};
260 int16_t val;
261
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930262 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030263 EXPECT_NE(pldm_msgbuf_extract_int16(ctx, &val), PLDM_SUCCESS);
264 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
265}
266
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930267TEST(msgbuf, extract_under_int16)
268{
269 struct pldm_msgbuf _ctx;
270 struct pldm_msgbuf* ctx = &_ctx;
271
272 int16_t buf[1] = {};
273 int16_t val;
274
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930275 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930276 ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
277 EXPECT_NE(pldm_msgbuf_extract_int16(ctx, &val), PLDM_SUCCESS);
278 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
279}
280
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030281TEST(msgbuf, extract_one_uint32)
282{
283 struct pldm_msgbuf _ctx;
284 struct pldm_msgbuf* ctx = &_ctx;
285 uint32_t buf[1] = {htole32(0x5a00ffa5)};
286 uint32_t val;
287
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930288 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)),
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030289 PLDM_SUCCESS);
290 EXPECT_EQ(pldm_msgbuf_extract_uint32(ctx, &val), PLDM_SUCCESS);
291 EXPECT_EQ(val, 0x5a00ffa5);
292 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
293}
294
295TEST(msgbuf, extract_over_uint32)
296{
297 struct pldm_msgbuf _ctx;
298 struct pldm_msgbuf* ctx = &_ctx;
299 uint32_t buf[1] = {};
300 uint32_t val;
301
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930302 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030303 EXPECT_NE(pldm_msgbuf_extract_uint32(ctx, &val), PLDM_SUCCESS);
304 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
305}
306
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930307TEST(msgbuf, extract_under_uint32)
308{
309 struct pldm_msgbuf _ctx;
310 struct pldm_msgbuf* ctx = &_ctx;
311
312 uint32_t buf[1] = {};
313 uint32_t val;
314
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930315 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930316 ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
317 EXPECT_NE(pldm_msgbuf_extract_uint32(ctx, &val), PLDM_SUCCESS);
318 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
319}
320
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030321TEST(msgbuf, extract_one_int32)
322{
323 struct pldm_msgbuf _ctx;
324 struct pldm_msgbuf* ctx = &_ctx;
325 int32_t buf[1] = {(int32_t)(htole32((uint32_t)(INT32_MIN)))};
326 int32_t val;
327
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930328 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)),
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030329 PLDM_SUCCESS);
330 EXPECT_EQ(pldm_msgbuf_extract_int32(ctx, &val), PLDM_SUCCESS);
331 EXPECT_EQ(val, INT32_MIN);
332 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
333}
334
335TEST(msgbuf, extract_over_int32)
336{
337 struct pldm_msgbuf _ctx;
338 struct pldm_msgbuf* ctx = &_ctx;
339 int32_t buf[1] = {};
340 int32_t val;
341
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930342 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030343 EXPECT_NE(pldm_msgbuf_extract_int32(ctx, &val), PLDM_SUCCESS);
344 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
345}
346
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930347TEST(msgbuf, extract_under_int32)
348{
349 struct pldm_msgbuf _ctx;
350 struct pldm_msgbuf* ctx = &_ctx;
351
352 int32_t buf[1] = {};
353 int32_t val;
354
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930355 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930356 ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
357 EXPECT_NE(pldm_msgbuf_extract_int32(ctx, &val), PLDM_SUCCESS);
358 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
359}
360
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030361TEST(msgbuf, extract_one_real32)
362{
363 struct pldm_msgbuf _ctx;
364 struct pldm_msgbuf* ctx = &_ctx;
365 uint32_t buf[1] = {};
366 uint32_t xform;
367 real32_t val;
368
369 val = FLT_MAX;
370 memcpy(&xform, &val, sizeof(val));
371 buf[0] = htole32(xform);
372 val = 0;
373
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930374 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)),
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030375 PLDM_SUCCESS);
376 EXPECT_EQ(pldm_msgbuf_extract_real32(ctx, &val), PLDM_SUCCESS);
377 EXPECT_EQ(val, FLT_MAX);
378 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
379}
380
381TEST(msgbuf, extract_over_real32)
382{
383 struct pldm_msgbuf _ctx;
384 struct pldm_msgbuf* ctx = &_ctx;
385 real32_t buf[1] = {};
386 real32_t val;
387
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930388 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jefferyc63f63a2023-02-24 22:29:33 +1030389 EXPECT_NE(pldm_msgbuf_extract_real32(ctx, &val), PLDM_SUCCESS);
390 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
391}
Andrew Jeffery369b1212023-04-20 15:44:48 +0930392
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930393TEST(msgbuf, extract_under_real32)
394{
395 struct pldm_msgbuf _ctx;
396 struct pldm_msgbuf* ctx = &_ctx;
397
398 real32_t buf[1] = {};
399 real32_t val;
400
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930401 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930402 ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
403 EXPECT_NE(pldm_msgbuf_extract_real32(ctx, &val), PLDM_SUCCESS);
404 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
405}
406
Andrew Jeffery369b1212023-04-20 15:44:48 +0930407TEST(msgbuf, extract_array_uint8_buf0_req0)
408{
409 struct pldm_msgbuf _ctx;
410 struct pldm_msgbuf* ctx = &_ctx;
411 uint8_t buf[1] = {};
412 uint8_t arr[1];
413
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930414 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery369b1212023-04-20 15:44:48 +0930415 EXPECT_EQ(pldm_msgbuf_extract_array_uint8(ctx, arr, 0), PLDM_SUCCESS);
416 ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
417}
418
419TEST(msgbuf, extract_array_uint8_buf1_req1)
420{
421 struct pldm_msgbuf _ctx;
422 struct pldm_msgbuf* ctx = &_ctx;
423 uint8_t buf[1] = {};
424 uint8_t arr[1];
425
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930426 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Andrew Jeffery369b1212023-04-20 15:44:48 +0930427 EXPECT_EQ(pldm_msgbuf_extract_array_uint8(ctx, arr, sizeof(arr)),
428 PLDM_SUCCESS);
429 EXPECT_EQ(arr[0], 0);
430 ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
431}
432
433TEST(msgbuf, extract_array_uint8_buf1_req2)
434{
435 struct pldm_msgbuf _ctx;
436 struct pldm_msgbuf* ctx = &_ctx;
437 uint8_t buf[1] = {};
438 uint8_t arr[2];
439
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930440 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Andrew Jeffery369b1212023-04-20 15:44:48 +0930441 EXPECT_NE(pldm_msgbuf_extract_array_uint8(ctx, arr, sizeof(arr)),
442 PLDM_SUCCESS);
443 ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
444}
Andrew Jefferydb7b8322023-04-12 23:05:21 +0930445
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930446TEST(msgbuf, extract_under_array_uint8)
447{
448 struct pldm_msgbuf _ctx;
449 struct pldm_msgbuf* ctx = &_ctx;
450 uint8_t buf[1] = {};
451 uint8_t arr[1];
452
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930453 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930454 ctx->remaining = INTMAX_MIN;
455 EXPECT_NE(pldm_msgbuf_extract_array_uint8(ctx, arr, 1), PLDM_SUCCESS);
456 ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
457}
458
Andrew Jeffery1c571442024-07-08 10:25:48 +0930459TEST(msgbuf, extract_array_char_buf0_req0)
460{
461 struct pldm_msgbuf _ctx;
462 struct pldm_msgbuf* ctx = &_ctx;
463 char buf[1] = {'\0'};
464 char arr[1] = {'1'};
465
466 ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
467 EXPECT_EQ(pldm_msgbuf_extract_array_char(ctx, arr, 0), 0);
468 ASSERT_EQ(pldm_msgbuf_destroy(ctx), 0);
469}
470
471TEST(msgbuf, extract_array_char_buf1_req1)
472{
473 struct pldm_msgbuf _ctx;
474 struct pldm_msgbuf* ctx = &_ctx;
475 char buf[1] = {'\0'};
476 char arr[1] = {'1'};
477
478 ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, sizeof(buf)), 0);
479 EXPECT_EQ(pldm_msgbuf_extract_array_char(ctx, arr, sizeof(arr)), 0);
480 EXPECT_EQ(arr[0], '\0');
481 ASSERT_EQ(pldm_msgbuf_destroy(ctx), 0);
482}
483
484TEST(msgbuf, extract_array_char_buf1_req2)
485{
486 struct pldm_msgbuf _ctx;
487 struct pldm_msgbuf* ctx = &_ctx;
488 char buf[1] = {'\0'};
489 char arr[2] = {'1', '2'};
490
491 ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, sizeof(buf)), 0);
492 EXPECT_NE(pldm_msgbuf_extract_array_char(ctx, arr, sizeof(arr)), 0);
493 ASSERT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
494}
495
496TEST(msgbuf, extract_under_array_char)
497{
498 struct pldm_msgbuf _ctx;
499 struct pldm_msgbuf* ctx = &_ctx;
500 char buf[1] = {'\0'};
501 char arr[1] = {'1'};
502
503 ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
504 ctx->remaining = INTMAX_MIN;
505 EXPECT_NE(pldm_msgbuf_extract_array_char(ctx, arr, 1), 0);
506 ASSERT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
507}
508
Andrew Jefferydb7b8322023-04-12 23:05:21 +0930509TEST(msgbuf, consumed_under)
510{
511 struct pldm_msgbuf _ctx;
512 struct pldm_msgbuf* ctx = &_ctx;
513 uint8_t buf[1] = {};
514
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930515 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Andrew Jefferydb7b8322023-04-12 23:05:21 +0930516 EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), PLDM_ERROR_INVALID_LENGTH);
517}
518
519TEST(msgbuf, consumed_exact)
520{
521 struct pldm_msgbuf _ctx;
522 struct pldm_msgbuf* ctx = &_ctx;
523 uint8_t buf[1] = {};
524 uint8_t val;
525
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930526 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Andrew Jefferydb7b8322023-04-12 23:05:21 +0930527 EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
528 EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), PLDM_SUCCESS);
529}
530
531TEST(msgbuf, consumed_over)
532{
533 struct pldm_msgbuf _ctx;
534 struct pldm_msgbuf* ctx = &_ctx;
535 uint8_t buf[1] = {};
536 uint8_t val[2];
537
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930538 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Andrew Jefferydb7b8322023-04-12 23:05:21 +0930539 EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val[0]), PLDM_SUCCESS);
540 EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val[1]), PLDM_SUCCESS);
541 EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), PLDM_ERROR_INVALID_LENGTH);
542}
Thu Nguyen062c8762023-04-22 20:45:04 +0700543
544TEST(msgbuf, pldm_msgbuf_insert_int32_good)
545{
546 struct pldm_msgbuf _ctx;
547 struct pldm_msgbuf* ctx = &_ctx;
548 int32_t src = -12345;
549 int32_t checkVal = 0;
550 uint8_t buf[sizeof(int32_t)] = {};
551
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930552 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700553 EXPECT_EQ(pldm_msgbuf_insert_int32(ctx, src), PLDM_SUCCESS);
554
555 struct pldm_msgbuf _ctxExtract;
556 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
557
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930558 ASSERT_EQ(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)),
559 PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700560 EXPECT_EQ(pldm_msgbuf_extract_int32(ctxExtract, &checkVal), PLDM_SUCCESS);
561
562 EXPECT_EQ(src, checkVal);
563 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
564 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
565}
566
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930567TEST(msgbuf, insert_under_int32)
568{
569 struct pldm_msgbuf _ctx;
570 struct pldm_msgbuf* ctx = &_ctx;
571
572 int32_t buf[1] = {};
573 int32_t val = 0;
574
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930575 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930576 ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
577 EXPECT_NE(pldm_msgbuf_insert_int32(ctx, val), PLDM_SUCCESS);
578 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
579}
580
Thu Nguyen062c8762023-04-22 20:45:04 +0700581TEST(msgbuf, pldm_msgbuf_insert_uint32_good)
582{
583 struct pldm_msgbuf _ctx;
584 struct pldm_msgbuf* ctx = &_ctx;
585 uint32_t src = 0xf1223344;
586 uint32_t checkVal = 0;
587 uint8_t buf[sizeof(uint32_t)] = {};
588
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930589 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700590 EXPECT_EQ(pldm_msgbuf_insert_uint32(ctx, src), PLDM_SUCCESS);
591
592 struct pldm_msgbuf _ctxExtract;
593 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
594
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930595 ASSERT_EQ(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)),
596 PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700597 EXPECT_EQ(pldm_msgbuf_extract_uint32(ctxExtract, &checkVal), PLDM_SUCCESS);
598
599 EXPECT_EQ(src, checkVal);
600 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
601 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
602}
603
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930604TEST(msgbuf, insert_under_uint32)
605{
606 struct pldm_msgbuf _ctx;
607 struct pldm_msgbuf* ctx = &_ctx;
608
609 uint32_t buf[1] = {};
610 uint32_t val = 0;
611
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930612 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930613 ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
614 EXPECT_NE(pldm_msgbuf_insert_uint32(ctx, val), PLDM_SUCCESS);
615 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
616}
617
Thu Nguyen062c8762023-04-22 20:45:04 +0700618TEST(msgbuf, pldm_msgbuf_insert_uint16_good)
619{
620 struct pldm_msgbuf _ctx;
621 struct pldm_msgbuf* ctx = &_ctx;
622 uint16_t src = 0xf344;
623 uint16_t checkVal = 0;
624 uint8_t buf[sizeof(uint16_t)] = {};
625
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930626 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(uint16_t)), PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700627 EXPECT_EQ(pldm_msgbuf_insert_uint16(ctx, src), PLDM_SUCCESS);
628
629 struct pldm_msgbuf _ctxExtract;
630 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
631
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930632 ASSERT_EQ(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)),
633 PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700634 EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &checkVal), PLDM_SUCCESS);
635
636 EXPECT_EQ(src, checkVal);
637 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
638 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
639}
640
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930641TEST(msgbuf, insert_under_uint16)
642{
643 struct pldm_msgbuf _ctx;
644 struct pldm_msgbuf* ctx = &_ctx;
645
646 uint16_t buf[1] = {};
647 uint16_t val = 0;
648
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930649 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930650 ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
651 EXPECT_NE(pldm_msgbuf_insert_uint16(ctx, val), PLDM_SUCCESS);
652 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
653}
654
Thu Nguyen062c8762023-04-22 20:45:04 +0700655TEST(msgbuf, pldm_msgbuf_insert_int16_good)
656{
657 struct pldm_msgbuf _ctx;
658 struct pldm_msgbuf* ctx = &_ctx;
659 int16_t src = -12;
660 int16_t checkVal = 0;
661 uint8_t buf[sizeof(int16_t)] = {};
662
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930663 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(uint16_t)), PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700664 EXPECT_EQ(pldm_msgbuf_insert_int16(ctx, src), PLDM_SUCCESS);
665
666 struct pldm_msgbuf _ctxExtract;
667 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
668
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930669 ASSERT_EQ(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)),
670 PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700671 EXPECT_EQ(pldm_msgbuf_extract_int16(ctxExtract, &checkVal), PLDM_SUCCESS);
672
673 EXPECT_EQ(src, checkVal);
674 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
675 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
676}
677
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930678TEST(msgbuf, insert_under_int16)
679{
680 struct pldm_msgbuf _ctx;
681 struct pldm_msgbuf* ctx = &_ctx;
682
683 int16_t buf[1] = {};
684 int16_t val = 0;
685
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930686 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930687 ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
688 EXPECT_NE(pldm_msgbuf_insert_int16(ctx, val), PLDM_SUCCESS);
689 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
690}
691
Thu Nguyen062c8762023-04-22 20:45:04 +0700692TEST(msgbuf, pldm_msgbuf_insert_uint8_good)
693{
694 struct pldm_msgbuf _ctx;
695 struct pldm_msgbuf* ctx = &_ctx;
696 uint8_t src = 0xf4;
697 uint8_t checkVal = 0;
698 uint8_t buf[sizeof(uint8_t)] = {};
699
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930700 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700701 EXPECT_EQ(pldm_msgbuf_insert_uint8(ctx, src), PLDM_SUCCESS);
702
703 struct pldm_msgbuf _ctxExtract;
704 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
705
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930706 ASSERT_EQ(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)),
707 PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700708 EXPECT_EQ(pldm_msgbuf_extract_uint8(ctxExtract, &checkVal), PLDM_SUCCESS);
709
710 EXPECT_EQ(src, checkVal);
711 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
712 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
713}
714
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930715TEST(msgbuf, insert_under_uint8)
716{
717 struct pldm_msgbuf _ctx;
718 struct pldm_msgbuf* ctx = &_ctx;
719
720 uint8_t buf[1] = {};
721 uint8_t val = 0;
722
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930723 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930724 ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
725 EXPECT_NE(pldm_msgbuf_insert_uint8(ctx, val), PLDM_SUCCESS);
726 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
727}
728
Thu Nguyen062c8762023-04-22 20:45:04 +0700729TEST(msgbuf, pldm_msgbuf_insert_int8_good)
730{
731 struct pldm_msgbuf _ctx;
732 struct pldm_msgbuf* ctx = &_ctx;
733 int8_t src = -4;
734 int8_t checkVal = 0;
735 uint8_t buf[sizeof(int8_t)] = {};
736
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930737 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700738 EXPECT_EQ(pldm_msgbuf_insert_int8(ctx, src), PLDM_SUCCESS);
739
740 struct pldm_msgbuf _ctxExtract;
741 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
742
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930743 ASSERT_EQ(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)),
744 PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700745 EXPECT_EQ(pldm_msgbuf_extract_int8(ctxExtract, &checkVal), PLDM_SUCCESS);
746
747 EXPECT_EQ(src, checkVal);
748 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
749 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
750}
751
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930752TEST(msgbuf, insert_under_int8)
753{
754 struct pldm_msgbuf _ctx;
755 struct pldm_msgbuf* ctx = &_ctx;
756
757 int8_t buf[1] = {};
758 int8_t val = 0;
759
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930760 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930761 ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
762 EXPECT_NE(pldm_msgbuf_insert_int8(ctx, val), PLDM_SUCCESS);
763 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
764}
765
Thu Nguyen062c8762023-04-22 20:45:04 +0700766TEST(msgbuf, pldm_msgbuf_insert_array_uint8_good)
767{
768 struct pldm_msgbuf _ctx;
769 struct pldm_msgbuf* ctx = &_ctx;
770 uint8_t src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
771 uint8_t buf[6] = {};
772 uint8_t retBuff[6] = {};
773
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930774 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700775 EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
776 PLDM_SUCCESS);
777
778 struct pldm_msgbuf _ctxExtract;
779 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
780
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930781 ASSERT_EQ(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)),
782 PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700783 EXPECT_EQ(
784 pldm_msgbuf_extract_array_uint8(ctxExtract, retBuff, sizeof(retBuff)),
785 PLDM_SUCCESS);
786
787 EXPECT_EQ(memcmp(src, retBuff, sizeof(retBuff)), 0);
788 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
789 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
790}
791
792TEST(msgbuf, pldm_msgbuf_insert_array_uint8_bad)
793{
794 struct pldm_msgbuf _ctx;
795 struct pldm_msgbuf* ctx = &_ctx;
796 uint8_t src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
797 uint8_t buf[6] = {};
798
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930799 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700800 EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, NULL, sizeof(src)),
801 PLDM_ERROR_INVALID_DATA);
802 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
803}
804
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930805TEST(msgbuf, insert_under_array_uint8)
806{
807 struct pldm_msgbuf _ctx;
808 struct pldm_msgbuf* ctx = &_ctx;
809
810 uint8_t buf[1] = {};
811 uint8_t val[1] = {0};
812
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930813 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930814 ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
815 EXPECT_NE(pldm_msgbuf_insert_array_uint8(ctx, val, sizeof(val)),
816 PLDM_SUCCESS);
817 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
818}
819
Andrew Jeffery1c571442024-07-08 10:25:48 +0930820TEST(msgbuf, pldm_msgbuf_insert_array_char_good)
821{
822 struct pldm_msgbuf _ctx;
823 struct pldm_msgbuf* ctx = &_ctx;
824 char src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
825 char buf[6] = {};
826 char retBuff[6] = {};
827
828 ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, sizeof(buf)), 0);
829 EXPECT_EQ(pldm_msgbuf_insert_array_char(ctx, src, sizeof(src)), 0);
830
831 struct pldm_msgbuf _ctxExtract;
832 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
833
834 ASSERT_EQ(pldm_msgbuf_init_errno(ctxExtract, 0, buf, sizeof(buf)), 0);
835 EXPECT_EQ(
836 pldm_msgbuf_extract_array_char(ctxExtract, retBuff, sizeof(retBuff)),
837 0);
838
839 EXPECT_EQ(memcmp(src, retBuff, sizeof(retBuff)), 0);
840 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), 0);
841 EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
842}
843
844TEST(msgbuf, pldm_msgbuf_insert_array_char_bad)
845{
846 struct pldm_msgbuf _ctx;
847 struct pldm_msgbuf* ctx = &_ctx;
848 char src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
849 char buf[6] = {};
850
851 ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, sizeof(buf)), 0);
852 EXPECT_EQ(pldm_msgbuf_insert_array_char(ctx, NULL, sizeof(src)), -EINVAL);
853 EXPECT_EQ(pldm_msgbuf_destroy(ctx), 0);
854}
855
856TEST(msgbuf, insert_under_array_char)
857{
858 struct pldm_msgbuf _ctx;
859 struct pldm_msgbuf* ctx = &_ctx;
860 char buf[1] = {};
861 char val[1] = {0};
862
863 ASSERT_EQ(pldm_msgbuf_init_errno(ctx, 0, buf, 0), 0);
864 ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
865 EXPECT_NE(pldm_msgbuf_insert_array_char(ctx, val, sizeof(val)), 0);
866 EXPECT_EQ(pldm_msgbuf_destroy(ctx), -EOVERFLOW);
867}
868
Thu Nguyen062c8762023-04-22 20:45:04 +0700869TEST(msgbuf, pldm_msgbuf_span_required_good)
870{
871 struct pldm_msgbuf _ctx;
872 struct pldm_msgbuf* ctx = &_ctx;
873 uint8_t src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
874 uint8_t buf[6] = {0};
875 const size_t required = 4;
876 uint8_t expectData[required] = {0x44, 0x55, 0x66, 0x77};
877 uint16_t testVal;
878 uint8_t* retBuff = NULL;
879
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930880 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700881 EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
882 PLDM_SUCCESS);
883
884 struct pldm_msgbuf _ctxExtract;
885 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
886
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930887 ASSERT_EQ(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)),
888 PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700889 EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &testVal), PLDM_SUCCESS);
890 EXPECT_EQ(pldm_msgbuf_span_required(ctxExtract, required, (void**)&retBuff),
891 PLDM_SUCCESS);
892
893 EXPECT_EQ(memcmp(expectData, retBuff, required), 0);
894 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
895 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
896}
897
898TEST(msgbuf, pldm_msgbuf_span_required_bad)
899{
900 struct pldm_msgbuf _ctx;
901 struct pldm_msgbuf* ctx = &_ctx;
902 uint8_t src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
903 uint8_t buf[6] = {0};
904 const size_t required = 4;
905 uint16_t testVal;
906 [[maybe_unused]] uint8_t* retBuff = NULL;
907
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930908 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700909 EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
910 PLDM_SUCCESS);
911
912 struct pldm_msgbuf _ctxExtract;
913 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
914
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930915 ASSERT_EQ(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)),
916 PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700917 EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &testVal), PLDM_SUCCESS);
918 EXPECT_EQ(pldm_msgbuf_span_required(ctxExtract, required, NULL),
919 PLDM_ERROR_INVALID_DATA);
Thu Nguyen062c8762023-04-22 20:45:04 +0700920
921 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
922 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
923}
924
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930925TEST(msgbuf, span_required_under)
926{
927 struct pldm_msgbuf _ctx;
928 struct pldm_msgbuf* ctx = &_ctx;
929
930 uint8_t buf[1] = {};
931 void* cursor = nullptr;
932
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930933 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, 0), PLDM_SUCCESS);
Andrew Jeffery2ff8cf82024-05-17 15:20:46 +0930934 ctx->remaining = INTMAX_MIN;
935 EXPECT_NE(pldm_msgbuf_span_required(ctx, 1, &cursor), PLDM_SUCCESS);
936 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
937}
938
Thu Nguyen062c8762023-04-22 20:45:04 +0700939TEST(msgbuf, pldm_msgbuf_span_remaining_good)
940{
941 struct pldm_msgbuf _ctx;
942 struct pldm_msgbuf* ctx = &_ctx;
943 uint8_t src[8] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99};
944 uint8_t buf[8] = {0};
945 uint16_t testVal;
946 uint8_t expectData[6] = {0x44, 0x55, 0x66, 0x77, 0x88, 0x99};
947 size_t remaining;
948 uint8_t* retBuff = NULL;
949
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930950 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700951 EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
952 PLDM_SUCCESS);
953
954 struct pldm_msgbuf _ctxExtract;
955 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
956
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930957 ASSERT_EQ(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)),
958 PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700959 EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &testVal), PLDM_SUCCESS);
960 EXPECT_EQ(
961 pldm_msgbuf_span_remaining(ctxExtract, (void**)&retBuff, &remaining),
962 PLDM_SUCCESS);
963
964 EXPECT_EQ(remaining, sizeof(expectData));
965 EXPECT_EQ(memcmp(expectData, retBuff, remaining), 0);
966 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
967 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
968}
969
970TEST(msgbuf, pldm_msgbuf_span_remaining_bad)
971{
972 struct pldm_msgbuf _ctx;
973 struct pldm_msgbuf* ctx = &_ctx;
974 uint8_t src[8] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99};
975 uint8_t buf[8] = {0};
976 uint16_t testVal;
977 size_t remaining;
978 uint8_t* retBuff = NULL;
979
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930980 ASSERT_EQ(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700981 EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
982 PLDM_SUCCESS);
983
984 struct pldm_msgbuf _ctxExtract;
985 struct pldm_msgbuf* ctxExtract = &_ctxExtract;
986
Andrew Jefferyc8df31c2024-05-21 16:47:43 +0930987 ASSERT_EQ(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)),
988 PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700989 EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &testVal), PLDM_SUCCESS);
Thu Nguyen062c8762023-04-22 20:45:04 +0700990 EXPECT_EQ(pldm_msgbuf_span_remaining(ctxExtract, NULL, &remaining),
991 PLDM_ERROR_INVALID_DATA);
992 EXPECT_EQ(pldm_msgbuf_span_remaining(ctxExtract, (void**)&retBuff, NULL),
993 PLDM_ERROR_INVALID_DATA);
994
995 EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
996 EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
Andrew Jeffery07febdb2024-05-17 14:17:14 +0930997}
Varsha Kaverappa909bf7c2024-05-03 06:18:42 -0500998
999TEST(msgbuf, pldm_msgbuf_copy_good)
1000{
1001 struct pldm_msgbuf _src;
1002 struct pldm_msgbuf* src = &_src;
1003 uint16_t buf[1] = {htole16(0x5aa5)};
1004
Andrew Jefferyc8df31c2024-05-21 16:47:43 +09301005 ASSERT_EQ(pldm_msgbuf_init_cc(src, sizeof(buf), buf, sizeof(buf)),
Varsha Kaverappa909bf7c2024-05-03 06:18:42 -05001006 PLDM_SUCCESS);
1007
1008 struct pldm_msgbuf _dst;
1009 struct pldm_msgbuf* dst = &_dst;
1010 uint16_t checkVal = 0;
1011 uint8_t buf1[sizeof(buf)] = {};
1012
Andrew Jefferyc8df31c2024-05-21 16:47:43 +09301013 ASSERT_EQ(pldm_msgbuf_init_cc(dst, sizeof(buf1), buf1, sizeof(buf1)),
Varsha Kaverappa909bf7c2024-05-03 06:18:42 -05001014 PLDM_SUCCESS);
1015 EXPECT_EQ(pldm_msgbuf_copy(dst, src, buf[0], name), PLDM_SUCCESS);
1016
Andrew Jefferyc8df31c2024-05-21 16:47:43 +09301017 ASSERT_EQ(pldm_msgbuf_init_cc(dst, sizeof(buf1), buf1, sizeof(buf1)),
Varsha Kaverappa909bf7c2024-05-03 06:18:42 -05001018 PLDM_SUCCESS);
1019 EXPECT_EQ(pldm_msgbuf_extract_uint16(dst, &checkVal), PLDM_SUCCESS);
1020
1021 EXPECT_EQ(buf[0], checkVal);
1022 EXPECT_EQ(pldm_msgbuf_destroy(src), PLDM_SUCCESS);
1023 EXPECT_EQ(pldm_msgbuf_destroy(dst), PLDM_SUCCESS);
1024}
1025
1026TEST(msgbuf, pldm_msgbuf_copy_bad)
1027{
1028 struct pldm_msgbuf _src;
1029 struct pldm_msgbuf* src = &_src;
1030 struct pldm_msgbuf _dst;
1031 struct pldm_msgbuf* dst = &_dst;
1032 uint8_t buf[1] = {sizeof(uint8_t)};
1033 uint8_t buf1[1] = {sizeof(uint16_t)};
1034 uint16_t value = 8;
1035
Andrew Jefferyc8df31c2024-05-21 16:47:43 +09301036 ASSERT_EQ(pldm_msgbuf_init_cc(src, 0, buf, sizeof(buf)), PLDM_SUCCESS);
1037 ASSERT_EQ(pldm_msgbuf_init_cc(dst, 0, buf1, sizeof(buf1)), PLDM_SUCCESS);
Varsha Kaverappa909bf7c2024-05-03 06:18:42 -05001038 EXPECT_EQ(pldm_msgbuf_copy(dst, src, value, name),
1039 PLDM_ERROR_INVALID_LENGTH);
1040
Andrew Jefferyc8df31c2024-05-21 16:47:43 +09301041 ASSERT_EQ(pldm_msgbuf_init_cc(src, 0, buf1, sizeof(buf1)), PLDM_SUCCESS);
1042 ASSERT_EQ(pldm_msgbuf_init_cc(dst, 0, buf, sizeof(buf)), PLDM_SUCCESS);
Varsha Kaverappa909bf7c2024-05-03 06:18:42 -05001043 EXPECT_EQ(pldm_msgbuf_copy(dst, src, value, name),
1044 PLDM_ERROR_INVALID_LENGTH);
1045}