xref: /openbmc/libpldm/tests/msgbuf_generic.c (revision c8df31c1)
1691668feSPatrick Williams /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
2c63f63a2SAndrew Jeffery /* Test pldm_msgbuf_extract() separately because we can't do _Generic() in C++
3c63f63a2SAndrew Jeffery  * code, i.e. gtest */
4c63f63a2SAndrew Jeffery 
5c63f63a2SAndrew Jeffery #include <endian.h>
6c63f63a2SAndrew Jeffery #include <float.h>
7c63f63a2SAndrew Jeffery #include <stdio.h>
8c63f63a2SAndrew Jeffery #include <stdlib.h>
9c63f63a2SAndrew Jeffery 
10c63f63a2SAndrew Jeffery /* We're exercising the implementation so disable the asserts for now */
11c63f63a2SAndrew Jeffery #ifndef NDEBUG
12c63f63a2SAndrew Jeffery #define NDEBUG 1
13c63f63a2SAndrew Jeffery #endif
14c63f63a2SAndrew Jeffery #include "msgbuf.h"
15c63f63a2SAndrew Jeffery 
16c63f63a2SAndrew Jeffery /* Given we disabled asserts above, set up our own expectation framework */
17c63f63a2SAndrew Jeffery #define expect(cond) __expect(__func__, __LINE__, (cond))
18c63f63a2SAndrew Jeffery #define __expect(fn, line, cond)                                               \
19c63f63a2SAndrew Jeffery     do                                                                         \
20c63f63a2SAndrew Jeffery     {                                                                          \
21c63f63a2SAndrew Jeffery         if (!(cond))                                                           \
22c63f63a2SAndrew Jeffery         {                                                                      \
23c63f63a2SAndrew Jeffery             fprintf(stderr, "%s:%d: failed expectation: %s\n", fn, line,       \
24c63f63a2SAndrew Jeffery                     #cond);                                                    \
25c63f63a2SAndrew Jeffery             exit(EXIT_FAILURE);                                                \
26c63f63a2SAndrew Jeffery         }                                                                      \
27c63f63a2SAndrew Jeffery     } while (0)
28c63f63a2SAndrew Jeffery 
test_msgbuf_extract_generic_uint8(void)29c63f63a2SAndrew Jeffery static void test_msgbuf_extract_generic_uint8(void)
30c63f63a2SAndrew Jeffery {
31c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
32c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
33c63f63a2SAndrew Jeffery     uint8_t buf[1] = {0xa5};
34c63f63a2SAndrew Jeffery     uint8_t val;
35c63f63a2SAndrew Jeffery 
36*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)) ==
37c63f63a2SAndrew Jeffery            PLDM_SUCCESS);
3866c7723aSAndrew Jeffery     expect(pldm_msgbuf_extract(ctx, val) == PLDM_SUCCESS);
39c63f63a2SAndrew Jeffery     expect(val == 0xa5);
40c63f63a2SAndrew Jeffery     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
41c63f63a2SAndrew Jeffery }
42c63f63a2SAndrew Jeffery 
test_msgbuf_extract_generic_int8(void)43c63f63a2SAndrew Jeffery static void test_msgbuf_extract_generic_int8(void)
44c63f63a2SAndrew Jeffery {
45c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
46c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
47c63f63a2SAndrew Jeffery     int8_t buf[1] = {-1};
48c63f63a2SAndrew Jeffery     int8_t val;
49c63f63a2SAndrew Jeffery 
50*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)) ==
51c63f63a2SAndrew Jeffery            PLDM_SUCCESS);
5266c7723aSAndrew Jeffery     expect(pldm_msgbuf_extract(ctx, val) == PLDM_SUCCESS);
53c63f63a2SAndrew Jeffery     expect(val == -1);
54c63f63a2SAndrew Jeffery     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
55c63f63a2SAndrew Jeffery }
56c63f63a2SAndrew Jeffery 
test_msgbuf_extract_generic_uint16(void)57c63f63a2SAndrew Jeffery static void test_msgbuf_extract_generic_uint16(void)
58c63f63a2SAndrew Jeffery {
59c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
60c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
61c63f63a2SAndrew Jeffery     uint16_t buf[1] = {0x5aa5};
62c63f63a2SAndrew Jeffery     uint16_t val;
63c63f63a2SAndrew Jeffery 
64*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)) ==
65c63f63a2SAndrew Jeffery            PLDM_SUCCESS);
6666c7723aSAndrew Jeffery     expect(pldm_msgbuf_extract(ctx, val) == PLDM_SUCCESS);
67c63f63a2SAndrew Jeffery     expect(val == 0x5aa5);
68c63f63a2SAndrew Jeffery     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
69c63f63a2SAndrew Jeffery }
70c63f63a2SAndrew Jeffery 
test_msgbuf_extract_generic_int16(void)71c63f63a2SAndrew Jeffery static void test_msgbuf_extract_generic_int16(void)
72c63f63a2SAndrew Jeffery {
73c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
74c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
75c63f63a2SAndrew Jeffery     int16_t buf[1] = {(int16_t)(htole16((uint16_t)INT16_MIN))};
76c63f63a2SAndrew Jeffery     int16_t val;
77c63f63a2SAndrew Jeffery 
78*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)) ==
79c63f63a2SAndrew Jeffery            PLDM_SUCCESS);
8066c7723aSAndrew Jeffery     expect(pldm_msgbuf_extract(ctx, val) == PLDM_SUCCESS);
81c63f63a2SAndrew Jeffery     expect(val == INT16_MIN);
82c63f63a2SAndrew Jeffery     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
83c63f63a2SAndrew Jeffery }
84c63f63a2SAndrew Jeffery 
test_msgbuf_extract_generic_uint32(void)85c63f63a2SAndrew Jeffery static void test_msgbuf_extract_generic_uint32(void)
86c63f63a2SAndrew Jeffery {
87c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
88c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
89c63f63a2SAndrew Jeffery     uint32_t buf[1] = {0x5a00ffa5};
90c63f63a2SAndrew Jeffery     uint32_t val;
91c63f63a2SAndrew Jeffery 
92*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)) ==
93c63f63a2SAndrew Jeffery            PLDM_SUCCESS);
9466c7723aSAndrew Jeffery     expect(pldm_msgbuf_extract(ctx, val) == PLDM_SUCCESS);
95c63f63a2SAndrew Jeffery     expect(val == 0x5a00ffa5);
96c63f63a2SAndrew Jeffery     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
97c63f63a2SAndrew Jeffery }
98c63f63a2SAndrew Jeffery 
test_msgbuf_extract_generic_int32(void)99c63f63a2SAndrew Jeffery static void test_msgbuf_extract_generic_int32(void)
100c63f63a2SAndrew Jeffery {
101c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
102c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
103c63f63a2SAndrew Jeffery     int32_t buf[1] = {(int32_t)(htole32((uint32_t)INT32_MIN))};
104c63f63a2SAndrew Jeffery     int32_t val;
105c63f63a2SAndrew Jeffery 
106*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)) ==
107c63f63a2SAndrew Jeffery            PLDM_SUCCESS);
10866c7723aSAndrew Jeffery     expect(pldm_msgbuf_extract(ctx, val) == PLDM_SUCCESS);
109c63f63a2SAndrew Jeffery     expect(val == INT32_MIN);
110c63f63a2SAndrew Jeffery     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
111c63f63a2SAndrew Jeffery }
112c63f63a2SAndrew Jeffery 
test_msgbuf_extract_generic_real32(void)113c63f63a2SAndrew Jeffery static void test_msgbuf_extract_generic_real32(void)
114c63f63a2SAndrew Jeffery {
115c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
116c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
117c63f63a2SAndrew Jeffery     uint32_t buf[1];
118c63f63a2SAndrew Jeffery     uint32_t xform;
119c63f63a2SAndrew Jeffery     real32_t val;
120c63f63a2SAndrew Jeffery 
121c63f63a2SAndrew Jeffery     val = FLT_MAX;
122c63f63a2SAndrew Jeffery     memcpy(&xform, &val, sizeof(val));
123c63f63a2SAndrew Jeffery     buf[0] = htole32(xform);
124c63f63a2SAndrew Jeffery     val = 0;
125c63f63a2SAndrew Jeffery 
126*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)) ==
127c63f63a2SAndrew Jeffery            PLDM_SUCCESS);
12866c7723aSAndrew Jeffery     expect(pldm_msgbuf_extract(ctx, val) == PLDM_SUCCESS);
129c63f63a2SAndrew Jeffery     expect(val == FLT_MAX);
130c63f63a2SAndrew Jeffery     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
131c63f63a2SAndrew Jeffery }
132c63f63a2SAndrew Jeffery 
test_msgbuf_extract_array_generic_uint8(void)133369b121aSAndrew Jeffery static void test_msgbuf_extract_array_generic_uint8(void)
134369b121aSAndrew Jeffery {
135369b121aSAndrew Jeffery     struct pldm_msgbuf _ctx;
136369b121aSAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
137369b121aSAndrew Jeffery     uint32_t buf[1] = {0};
138369b121aSAndrew Jeffery     uint8_t arr[1];
139369b121aSAndrew Jeffery 
140*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, sizeof(buf), buf, sizeof(buf)) ==
141369b121aSAndrew Jeffery            PLDM_SUCCESS);
142369b121aSAndrew Jeffery     expect(pldm_msgbuf_extract_array(ctx, arr, 1) == PLDM_SUCCESS);
143369b121aSAndrew Jeffery     expect(arr[0] == 0);
144369b121aSAndrew Jeffery     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
145369b121aSAndrew Jeffery }
146369b121aSAndrew Jeffery 
test_msgbuf_insert_generic_int32(void)147062c8762SThu Nguyen static void test_msgbuf_insert_generic_int32(void)
148062c8762SThu Nguyen {
149062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
150062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
151062c8762SThu Nguyen     int32_t src = -12345;
152062c8762SThu Nguyen     int32_t checkVal = 0;
153062c8762SThu Nguyen     uint8_t buf[sizeof(int32_t)] = {0};
154062c8762SThu Nguyen 
155*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)) == PLDM_SUCCESS);
156062c8762SThu Nguyen     expect(pldm_msgbuf_insert(ctx, src) == PLDM_SUCCESS);
157062c8762SThu Nguyen 
158062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
159062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
160062c8762SThu Nguyen 
161*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)) ==
162*c8df31c1SAndrew Jeffery            PLDM_SUCCESS);
16366c7723aSAndrew Jeffery     expect(pldm_msgbuf_extract(ctxExtract, checkVal) == PLDM_SUCCESS);
164062c8762SThu Nguyen 
165062c8762SThu Nguyen     expect(src == checkVal);
166062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctxExtract) == PLDM_SUCCESS);
167062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
168062c8762SThu Nguyen }
169062c8762SThu Nguyen 
test_msgbuf_insert_generic_uint32(void)170062c8762SThu Nguyen static void test_msgbuf_insert_generic_uint32(void)
171062c8762SThu Nguyen {
172062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
173062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
174062c8762SThu Nguyen     uint32_t src = 0xf1223344;
175062c8762SThu Nguyen     uint32_t checkVal = 0;
176062c8762SThu Nguyen     uint8_t buf[sizeof(uint32_t)] = {0};
177062c8762SThu Nguyen 
178*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)) == PLDM_SUCCESS);
179062c8762SThu Nguyen     expect(pldm_msgbuf_insert(ctx, src) == PLDM_SUCCESS);
180062c8762SThu Nguyen 
181062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
182062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
183062c8762SThu Nguyen 
184*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)) ==
185*c8df31c1SAndrew Jeffery            PLDM_SUCCESS);
18666c7723aSAndrew Jeffery     expect(pldm_msgbuf_extract(ctxExtract, checkVal) == PLDM_SUCCESS);
187062c8762SThu Nguyen 
188062c8762SThu Nguyen     expect(src == checkVal);
189062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctxExtract) == PLDM_SUCCESS);
190062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
191062c8762SThu Nguyen }
192062c8762SThu Nguyen 
test_msgbuf_insert_generic_uint16(void)193062c8762SThu Nguyen static void test_msgbuf_insert_generic_uint16(void)
194062c8762SThu Nguyen {
195062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
196062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
197062c8762SThu Nguyen     uint16_t src = 0xf344;
198062c8762SThu Nguyen     uint16_t checkVal = 0;
199062c8762SThu Nguyen     uint8_t buf[sizeof(uint16_t)] = {0};
200062c8762SThu Nguyen 
201*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(uint16_t)) == PLDM_SUCCESS);
202062c8762SThu Nguyen     expect(pldm_msgbuf_insert(ctx, src) == PLDM_SUCCESS);
203062c8762SThu Nguyen 
204062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
205062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
206062c8762SThu Nguyen 
207*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)) ==
208*c8df31c1SAndrew Jeffery            PLDM_SUCCESS);
20966c7723aSAndrew Jeffery     expect(pldm_msgbuf_extract(ctxExtract, checkVal) == PLDM_SUCCESS);
210062c8762SThu Nguyen 
211062c8762SThu Nguyen     expect(src == checkVal);
212062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctxExtract) == PLDM_SUCCESS);
213062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
214062c8762SThu Nguyen }
215062c8762SThu Nguyen 
test_msgbuf_insert_generic_int16(void)216062c8762SThu Nguyen static void test_msgbuf_insert_generic_int16(void)
217062c8762SThu Nguyen {
218062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
219062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
220062c8762SThu Nguyen     int16_t src = -12;
221062c8762SThu Nguyen     int16_t checkVal = 0;
222062c8762SThu Nguyen     uint8_t buf[sizeof(int16_t)] = {0};
223062c8762SThu Nguyen 
224*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(uint16_t)) == PLDM_SUCCESS);
225062c8762SThu Nguyen     expect(pldm_msgbuf_insert(ctx, src) == PLDM_SUCCESS);
226062c8762SThu Nguyen 
227062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
228062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
229062c8762SThu Nguyen 
230*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)) ==
231*c8df31c1SAndrew Jeffery            PLDM_SUCCESS);
23266c7723aSAndrew Jeffery     expect(pldm_msgbuf_extract(ctxExtract, checkVal) == PLDM_SUCCESS);
233062c8762SThu Nguyen 
234062c8762SThu Nguyen     expect(src == checkVal);
235062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctxExtract) == PLDM_SUCCESS);
236062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
237062c8762SThu Nguyen }
238062c8762SThu Nguyen 
test_msgbuf_insert_generic_uint8(void)239062c8762SThu Nguyen static void test_msgbuf_insert_generic_uint8(void)
240062c8762SThu Nguyen {
241062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
242062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
243062c8762SThu Nguyen     uint8_t src = 0xf4;
244062c8762SThu Nguyen     uint8_t checkVal = 0;
245062c8762SThu Nguyen     uint8_t buf[sizeof(uint8_t)] = {0};
246062c8762SThu Nguyen 
247*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)) == PLDM_SUCCESS);
248062c8762SThu Nguyen     expect(pldm_msgbuf_insert(ctx, src) == PLDM_SUCCESS);
249062c8762SThu Nguyen 
250062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
251062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
252062c8762SThu Nguyen 
253*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)) ==
254*c8df31c1SAndrew Jeffery            PLDM_SUCCESS);
25566c7723aSAndrew Jeffery     expect(pldm_msgbuf_extract(ctxExtract, checkVal) == PLDM_SUCCESS);
256062c8762SThu Nguyen 
257062c8762SThu Nguyen     expect(src == checkVal);
258062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctxExtract) == PLDM_SUCCESS);
259062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
260062c8762SThu Nguyen }
261062c8762SThu Nguyen 
test_msgbuf_insert_generic_int8(void)262062c8762SThu Nguyen static void test_msgbuf_insert_generic_int8(void)
263062c8762SThu Nguyen {
264062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
265062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
266062c8762SThu Nguyen     int8_t src = -4;
267062c8762SThu Nguyen     int8_t checkVal = 0;
268062c8762SThu Nguyen     uint8_t buf[sizeof(int8_t)] = {0};
269062c8762SThu Nguyen 
270*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)) == PLDM_SUCCESS);
271062c8762SThu Nguyen     expect(pldm_msgbuf_insert(ctx, src) == PLDM_SUCCESS);
272062c8762SThu Nguyen 
273062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
274062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
275062c8762SThu Nguyen 
276*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)) ==
277*c8df31c1SAndrew Jeffery            PLDM_SUCCESS);
27866c7723aSAndrew Jeffery     expect(pldm_msgbuf_extract(ctxExtract, checkVal) == PLDM_SUCCESS);
279062c8762SThu Nguyen 
280062c8762SThu Nguyen     expect(src == checkVal);
281062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctxExtract) == PLDM_SUCCESS);
282062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
283062c8762SThu Nguyen }
284062c8762SThu Nguyen 
test_msgbuf_insert_array_generic_uint8(void)285062c8762SThu Nguyen static void test_msgbuf_insert_array_generic_uint8(void)
286062c8762SThu Nguyen {
287062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
288062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
289062c8762SThu Nguyen     uint8_t src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
290062c8762SThu Nguyen     uint8_t buf[6] = {0};
291062c8762SThu Nguyen     uint8_t retBuff[6] = {0};
292062c8762SThu Nguyen 
293*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctx, 0, buf, sizeof(buf)) == PLDM_SUCCESS);
294062c8762SThu Nguyen     expect(pldm_msgbuf_insert_array(ctx, src, sizeof(src)) == PLDM_SUCCESS);
295062c8762SThu Nguyen 
296062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
297062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
298062c8762SThu Nguyen 
299*c8df31c1SAndrew Jeffery     expect(pldm_msgbuf_init_cc(ctxExtract, 0, buf, sizeof(buf)) ==
300*c8df31c1SAndrew Jeffery            PLDM_SUCCESS);
301062c8762SThu Nguyen     expect(pldm_msgbuf_extract_array(ctxExtract, retBuff, sizeof(retBuff)) ==
302062c8762SThu Nguyen            PLDM_SUCCESS);
303062c8762SThu Nguyen 
304062c8762SThu Nguyen     expect(memcmp(src, retBuff, sizeof(retBuff)) == 0);
305062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctxExtract) == PLDM_SUCCESS);
306062c8762SThu Nguyen     expect(pldm_msgbuf_destroy(ctx) == PLDM_SUCCESS);
307062c8762SThu Nguyen }
308062c8762SThu Nguyen 
309c63f63a2SAndrew Jeffery typedef void (*testfn)(void);
310c63f63a2SAndrew Jeffery 
311369b121aSAndrew Jeffery static const testfn tests[] = {test_msgbuf_extract_generic_uint8,
312369b121aSAndrew Jeffery                                test_msgbuf_extract_generic_int8,
313369b121aSAndrew Jeffery                                test_msgbuf_extract_generic_uint16,
314369b121aSAndrew Jeffery                                test_msgbuf_extract_generic_int16,
315369b121aSAndrew Jeffery                                test_msgbuf_extract_generic_uint32,
316369b121aSAndrew Jeffery                                test_msgbuf_extract_generic_int32,
317369b121aSAndrew Jeffery                                test_msgbuf_extract_generic_real32,
318369b121aSAndrew Jeffery                                test_msgbuf_extract_array_generic_uint8,
319062c8762SThu Nguyen                                test_msgbuf_insert_generic_uint8,
320062c8762SThu Nguyen                                test_msgbuf_insert_generic_int8,
321062c8762SThu Nguyen                                test_msgbuf_insert_generic_uint16,
322062c8762SThu Nguyen                                test_msgbuf_insert_generic_int16,
323062c8762SThu Nguyen                                test_msgbuf_insert_generic_uint32,
324062c8762SThu Nguyen                                test_msgbuf_insert_generic_int32,
325062c8762SThu Nguyen                                test_msgbuf_insert_array_generic_uint8,
326369b121aSAndrew Jeffery                                NULL};
327c63f63a2SAndrew Jeffery 
main(void)328c63f63a2SAndrew Jeffery int main(void)
329c63f63a2SAndrew Jeffery {
330c63f63a2SAndrew Jeffery     testfn const* testp = &tests[0];
331c63f63a2SAndrew Jeffery 
332c63f63a2SAndrew Jeffery     while (*testp)
333c63f63a2SAndrew Jeffery     {
334c63f63a2SAndrew Jeffery         (*testp)();
335c63f63a2SAndrew Jeffery         testp++;
336c63f63a2SAndrew Jeffery     }
337c63f63a2SAndrew Jeffery 
338c63f63a2SAndrew Jeffery     return 0;
339c63f63a2SAndrew Jeffery }
340