xref: /openbmc/libpldm/tests/msgbuf.cpp (revision 909bf7c2)
1c63f63a2SAndrew Jeffery #include <endian.h>
2c63f63a2SAndrew Jeffery 
3c63f63a2SAndrew Jeffery #include <cfloat>
4c63f63a2SAndrew Jeffery 
5c63f63a2SAndrew Jeffery #include <gtest/gtest.h>
6c63f63a2SAndrew Jeffery 
7c63f63a2SAndrew Jeffery /* We're exercising the implementation so disable the asserts for now */
8c63f63a2SAndrew Jeffery #ifndef NDEBUG
9c63f63a2SAndrew Jeffery #define NDEBUG 1
10c63f63a2SAndrew Jeffery #endif
11c63f63a2SAndrew Jeffery 
12c63f63a2SAndrew Jeffery #include "msgbuf.h"
13c63f63a2SAndrew Jeffery 
14c63f63a2SAndrew Jeffery TEST(msgbuf, init_bad_ctx)
15c63f63a2SAndrew Jeffery {
16c63f63a2SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_init(NULL, 0, NULL, 0), PLDM_SUCCESS);
17c63f63a2SAndrew Jeffery }
18c63f63a2SAndrew Jeffery 
19c63f63a2SAndrew Jeffery TEST(msgbuf, init_bad_minsize)
20c63f63a2SAndrew Jeffery {
21c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
22c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
23c63f63a2SAndrew Jeffery     uint8_t buf[1] = {};
24c63f63a2SAndrew Jeffery 
25c63f63a2SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_init(ctx, sizeof(buf) + 1U, buf, sizeof(buf)),
26c63f63a2SAndrew Jeffery               PLDM_SUCCESS);
27c63f63a2SAndrew Jeffery }
28c63f63a2SAndrew Jeffery 
29c63f63a2SAndrew Jeffery TEST(msgbuf, init_bad_buf)
30c63f63a2SAndrew Jeffery {
31c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
32c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
33c63f63a2SAndrew Jeffery 
34c63f63a2SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_init(ctx, 0, NULL, 0), PLDM_SUCCESS);
35c63f63a2SAndrew Jeffery }
36c63f63a2SAndrew Jeffery 
37c63f63a2SAndrew Jeffery TEST(msgbuf, init_bad_len)
38c63f63a2SAndrew Jeffery {
39c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
40c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
41c63f63a2SAndrew Jeffery     uint8_t buf[1] = {};
42c63f63a2SAndrew Jeffery 
43c63f63a2SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_init(ctx, sizeof(buf), buf, SIZE_MAX), PLDM_SUCCESS);
44c63f63a2SAndrew Jeffery }
45c63f63a2SAndrew Jeffery 
46c63f63a2SAndrew Jeffery TEST(msgbuf, init_overflow)
47c63f63a2SAndrew Jeffery {
48c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
49c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
50c63f63a2SAndrew Jeffery     // NOLINTNEXTLINE(performance-no-int-to-ptr)
5107febdbbSAndrew Jeffery     void* buf = (void*)UINTPTR_MAX;
52c63f63a2SAndrew Jeffery 
53c63f63a2SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_init(ctx, 0, buf, 2), PLDM_SUCCESS);
54c63f63a2SAndrew Jeffery }
55c63f63a2SAndrew Jeffery 
56c63f63a2SAndrew Jeffery TEST(msgbuf, init_success)
57c63f63a2SAndrew Jeffery {
58c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
59c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
60c63f63a2SAndrew Jeffery     uint8_t buf[1] = {};
61c63f63a2SAndrew Jeffery 
62c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
63c63f63a2SAndrew Jeffery               PLDM_SUCCESS);
64c63f63a2SAndrew Jeffery }
65c63f63a2SAndrew Jeffery 
66c63f63a2SAndrew Jeffery TEST(msgbuf, destroy_none)
67c63f63a2SAndrew Jeffery {
68c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
69c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
70c63f63a2SAndrew Jeffery     uint8_t buf[1] = {};
71c63f63a2SAndrew Jeffery 
72c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
73c63f63a2SAndrew Jeffery               PLDM_SUCCESS);
74c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
75c63f63a2SAndrew Jeffery }
76c63f63a2SAndrew Jeffery 
77c63f63a2SAndrew Jeffery TEST(msgbuf, destroy_exact)
78c63f63a2SAndrew Jeffery {
79c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
80c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
81c63f63a2SAndrew Jeffery     uint8_t buf[1] = {0xa5};
82c63f63a2SAndrew Jeffery     uint8_t val;
83c63f63a2SAndrew Jeffery 
84c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
85c63f63a2SAndrew Jeffery               PLDM_SUCCESS);
86c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
87c63f63a2SAndrew Jeffery     EXPECT_EQ(val, 0xa5);
88c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
89c63f63a2SAndrew Jeffery }
90c63f63a2SAndrew Jeffery 
91c63f63a2SAndrew Jeffery TEST(msgbuf, destroy_over)
92c63f63a2SAndrew Jeffery {
93c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
94c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
95c63f63a2SAndrew Jeffery     uint8_t buf[1] = {0xa5};
96c63f63a2SAndrew Jeffery     uint8_t val;
97c63f63a2SAndrew Jeffery 
98c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
99c63f63a2SAndrew Jeffery               PLDM_SUCCESS);
100c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
101c63f63a2SAndrew Jeffery     ASSERT_EQ(val, 0xa5);
102c63f63a2SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
103c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
104c63f63a2SAndrew Jeffery }
105c63f63a2SAndrew Jeffery 
106c63f63a2SAndrew Jeffery TEST(msgbuf, destroy_under)
107c63f63a2SAndrew Jeffery {
108c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
109c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
110c63f63a2SAndrew Jeffery     uint8_t buf[2] = {0x5a, 0xa5};
111c63f63a2SAndrew Jeffery     uint8_t val;
112c63f63a2SAndrew Jeffery 
113c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
114c63f63a2SAndrew Jeffery               PLDM_SUCCESS);
115c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
116c63f63a2SAndrew Jeffery     EXPECT_EQ(val, 0x5a);
117c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
118c63f63a2SAndrew Jeffery }
119c63f63a2SAndrew Jeffery 
120c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_uint8)
121c63f63a2SAndrew Jeffery {
122c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
123c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
124c63f63a2SAndrew Jeffery     uint8_t buf[1] = {0xa5};
125c63f63a2SAndrew Jeffery     uint8_t val;
126c63f63a2SAndrew Jeffery 
127c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
128c63f63a2SAndrew Jeffery               PLDM_SUCCESS);
129c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
130c63f63a2SAndrew Jeffery     EXPECT_EQ(val, 0xa5);
131c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
132c63f63a2SAndrew Jeffery }
133c63f63a2SAndrew Jeffery 
134c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_uint8)
135c63f63a2SAndrew Jeffery {
136c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
137c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
138c63f63a2SAndrew Jeffery     uint8_t buf[1] = {};
139c63f63a2SAndrew Jeffery     uint8_t val;
140c63f63a2SAndrew Jeffery 
141c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
142c63f63a2SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
143c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
144c63f63a2SAndrew Jeffery }
145c63f63a2SAndrew Jeffery 
1462ff8cf89SAndrew Jeffery TEST(msgbuf, extract_under_uint8)
1472ff8cf89SAndrew Jeffery {
1482ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
1492ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
1502ff8cf89SAndrew Jeffery 
1512ff8cf89SAndrew Jeffery     uint8_t buf[1] = {};
1522ff8cf89SAndrew Jeffery     uint8_t val;
1532ff8cf89SAndrew Jeffery 
1542ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
1552ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN;
1562ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
1572ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
1582ff8cf89SAndrew Jeffery }
1592ff8cf89SAndrew Jeffery 
160c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_int8)
161c63f63a2SAndrew Jeffery {
162c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
163c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
164c63f63a2SAndrew Jeffery     int8_t buf[1] = {-1};
165c63f63a2SAndrew Jeffery     int8_t val;
166c63f63a2SAndrew Jeffery 
167c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
168c63f63a2SAndrew Jeffery               PLDM_SUCCESS);
169c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_extract_int8(ctx, &val), PLDM_SUCCESS);
170c63f63a2SAndrew Jeffery     EXPECT_EQ(val, -1);
171c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
172c63f63a2SAndrew Jeffery }
173c63f63a2SAndrew Jeffery 
174c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_int8)
175c63f63a2SAndrew Jeffery {
176c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
177c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
178c63f63a2SAndrew Jeffery     int8_t buf[1] = {};
179c63f63a2SAndrew Jeffery     int8_t val;
180c63f63a2SAndrew Jeffery 
181c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
182c63f63a2SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_int8(ctx, &val), PLDM_SUCCESS);
183c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
184c63f63a2SAndrew Jeffery }
185c63f63a2SAndrew Jeffery 
1862ff8cf89SAndrew Jeffery TEST(msgbuf, extract_under_int8)
1872ff8cf89SAndrew Jeffery {
1882ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
1892ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
1902ff8cf89SAndrew Jeffery 
1912ff8cf89SAndrew Jeffery     uint8_t buf[1] = {};
1922ff8cf89SAndrew Jeffery     int8_t val;
1932ff8cf89SAndrew Jeffery 
1942ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
1952ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN;
1962ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_int8(ctx, &val), PLDM_SUCCESS);
1972ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
1982ff8cf89SAndrew Jeffery }
1992ff8cf89SAndrew Jeffery 
200c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_uint16)
201c63f63a2SAndrew Jeffery {
202c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
203c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
204c63f63a2SAndrew Jeffery     uint16_t buf[1] = {htole16(0x5aa5)};
205c63f63a2SAndrew Jeffery     uint16_t val = {};
206c63f63a2SAndrew Jeffery 
207c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
208c63f63a2SAndrew Jeffery               PLDM_SUCCESS);
209c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctx, &val), PLDM_SUCCESS);
210c63f63a2SAndrew Jeffery     EXPECT_EQ(val, 0x5aa5);
211c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
212c63f63a2SAndrew Jeffery }
213c63f63a2SAndrew Jeffery 
2142ff8cf89SAndrew Jeffery TEST(msgbuf, extract_under_uint16)
2152ff8cf89SAndrew Jeffery {
2162ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
2172ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
2182ff8cf89SAndrew Jeffery 
2192ff8cf89SAndrew Jeffery     uint16_t buf[1] = {};
2202ff8cf89SAndrew Jeffery     uint16_t val;
2212ff8cf89SAndrew Jeffery 
2222ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
2232ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
2242ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_uint16(ctx, &val), PLDM_SUCCESS);
2252ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
2262ff8cf89SAndrew Jeffery }
2272ff8cf89SAndrew Jeffery 
228c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_uint16)
229c63f63a2SAndrew Jeffery {
230c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
231c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
232c63f63a2SAndrew Jeffery     uint16_t buf[1] = {};
233c63f63a2SAndrew Jeffery     uint16_t val;
234c63f63a2SAndrew Jeffery 
235c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
236c63f63a2SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_uint16(ctx, &val), PLDM_SUCCESS);
237c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
238c63f63a2SAndrew Jeffery }
239c63f63a2SAndrew Jeffery 
240c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_int16)
241c63f63a2SAndrew Jeffery {
242c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
243c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
244c63f63a2SAndrew Jeffery     int16_t buf[1] = {(int16_t)(htole16((uint16_t)INT16_MIN))};
245c63f63a2SAndrew Jeffery     int16_t val;
246c63f63a2SAndrew Jeffery 
247c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
248c63f63a2SAndrew Jeffery               PLDM_SUCCESS);
249c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_extract_int16(ctx, &val), PLDM_SUCCESS);
250c63f63a2SAndrew Jeffery     EXPECT_EQ(val, INT16_MIN);
251c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
252c63f63a2SAndrew Jeffery }
253c63f63a2SAndrew Jeffery 
254c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_int16)
255c63f63a2SAndrew Jeffery {
256c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
257c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
258c63f63a2SAndrew Jeffery     int16_t buf[1] = {};
259c63f63a2SAndrew Jeffery     int16_t val;
260c63f63a2SAndrew Jeffery 
261c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
262c63f63a2SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_int16(ctx, &val), PLDM_SUCCESS);
263c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
264c63f63a2SAndrew Jeffery }
265c63f63a2SAndrew Jeffery 
2662ff8cf89SAndrew Jeffery TEST(msgbuf, extract_under_int16)
2672ff8cf89SAndrew Jeffery {
2682ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
2692ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
2702ff8cf89SAndrew Jeffery 
2712ff8cf89SAndrew Jeffery     int16_t buf[1] = {};
2722ff8cf89SAndrew Jeffery     int16_t val;
2732ff8cf89SAndrew Jeffery 
2742ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
2752ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
2762ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_int16(ctx, &val), PLDM_SUCCESS);
2772ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
2782ff8cf89SAndrew Jeffery }
2792ff8cf89SAndrew Jeffery 
280c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_uint32)
281c63f63a2SAndrew Jeffery {
282c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
283c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
284c63f63a2SAndrew Jeffery     uint32_t buf[1] = {htole32(0x5a00ffa5)};
285c63f63a2SAndrew Jeffery     uint32_t val;
286c63f63a2SAndrew Jeffery 
287c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
288c63f63a2SAndrew Jeffery               PLDM_SUCCESS);
289c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_extract_uint32(ctx, &val), PLDM_SUCCESS);
290c63f63a2SAndrew Jeffery     EXPECT_EQ(val, 0x5a00ffa5);
291c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
292c63f63a2SAndrew Jeffery }
293c63f63a2SAndrew Jeffery 
294c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_uint32)
295c63f63a2SAndrew Jeffery {
296c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
297c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
298c63f63a2SAndrew Jeffery     uint32_t buf[1] = {};
299c63f63a2SAndrew Jeffery     uint32_t val;
300c63f63a2SAndrew Jeffery 
301c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
302c63f63a2SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_uint32(ctx, &val), PLDM_SUCCESS);
303c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
304c63f63a2SAndrew Jeffery }
305c63f63a2SAndrew Jeffery 
3062ff8cf89SAndrew Jeffery TEST(msgbuf, extract_under_uint32)
3072ff8cf89SAndrew Jeffery {
3082ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
3092ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
3102ff8cf89SAndrew Jeffery 
3112ff8cf89SAndrew Jeffery     uint32_t buf[1] = {};
3122ff8cf89SAndrew Jeffery     uint32_t val;
3132ff8cf89SAndrew Jeffery 
3142ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
3152ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
3162ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_uint32(ctx, &val), PLDM_SUCCESS);
3172ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
3182ff8cf89SAndrew Jeffery }
3192ff8cf89SAndrew Jeffery 
320c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_int32)
321c63f63a2SAndrew Jeffery {
322c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
323c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
324c63f63a2SAndrew Jeffery     int32_t buf[1] = {(int32_t)(htole32((uint32_t)(INT32_MIN)))};
325c63f63a2SAndrew Jeffery     int32_t val;
326c63f63a2SAndrew Jeffery 
327c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
328c63f63a2SAndrew Jeffery               PLDM_SUCCESS);
329c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_extract_int32(ctx, &val), PLDM_SUCCESS);
330c63f63a2SAndrew Jeffery     EXPECT_EQ(val, INT32_MIN);
331c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
332c63f63a2SAndrew Jeffery }
333c63f63a2SAndrew Jeffery 
334c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_int32)
335c63f63a2SAndrew Jeffery {
336c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
337c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
338c63f63a2SAndrew Jeffery     int32_t buf[1] = {};
339c63f63a2SAndrew Jeffery     int32_t val;
340c63f63a2SAndrew Jeffery 
341c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
342c63f63a2SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_int32(ctx, &val), PLDM_SUCCESS);
343c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
344c63f63a2SAndrew Jeffery }
345c63f63a2SAndrew Jeffery 
3462ff8cf89SAndrew Jeffery TEST(msgbuf, extract_under_int32)
3472ff8cf89SAndrew Jeffery {
3482ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
3492ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
3502ff8cf89SAndrew Jeffery 
3512ff8cf89SAndrew Jeffery     int32_t buf[1] = {};
3522ff8cf89SAndrew Jeffery     int32_t val;
3532ff8cf89SAndrew Jeffery 
3542ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
3552ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
3562ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_int32(ctx, &val), PLDM_SUCCESS);
3572ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
3582ff8cf89SAndrew Jeffery }
3592ff8cf89SAndrew Jeffery 
360c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_real32)
361c63f63a2SAndrew Jeffery {
362c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
363c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
364c63f63a2SAndrew Jeffery     uint32_t buf[1] = {};
365c63f63a2SAndrew Jeffery     uint32_t xform;
366c63f63a2SAndrew Jeffery     real32_t val;
367c63f63a2SAndrew Jeffery 
368c63f63a2SAndrew Jeffery     val = FLT_MAX;
369c63f63a2SAndrew Jeffery     memcpy(&xform, &val, sizeof(val));
370c63f63a2SAndrew Jeffery     buf[0] = htole32(xform);
371c63f63a2SAndrew Jeffery     val = 0;
372c63f63a2SAndrew Jeffery 
373c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)),
374c63f63a2SAndrew Jeffery               PLDM_SUCCESS);
375c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_extract_real32(ctx, &val), PLDM_SUCCESS);
376c63f63a2SAndrew Jeffery     EXPECT_EQ(val, FLT_MAX);
377c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
378c63f63a2SAndrew Jeffery }
379c63f63a2SAndrew Jeffery 
380c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_real32)
381c63f63a2SAndrew Jeffery {
382c63f63a2SAndrew Jeffery     struct pldm_msgbuf _ctx;
383c63f63a2SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
384c63f63a2SAndrew Jeffery     real32_t buf[1] = {};
385c63f63a2SAndrew Jeffery     real32_t val;
386c63f63a2SAndrew Jeffery 
387c63f63a2SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
388c63f63a2SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_real32(ctx, &val), PLDM_SUCCESS);
389c63f63a2SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
390c63f63a2SAndrew Jeffery }
391369b121aSAndrew Jeffery 
3922ff8cf89SAndrew Jeffery TEST(msgbuf, extract_under_real32)
3932ff8cf89SAndrew Jeffery {
3942ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
3952ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
3962ff8cf89SAndrew Jeffery 
3972ff8cf89SAndrew Jeffery     real32_t buf[1] = {};
3982ff8cf89SAndrew Jeffery     real32_t val;
3992ff8cf89SAndrew Jeffery 
4002ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
4012ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
4022ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_real32(ctx, &val), PLDM_SUCCESS);
4032ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
4042ff8cf89SAndrew Jeffery }
4052ff8cf89SAndrew Jeffery 
406369b121aSAndrew Jeffery TEST(msgbuf, extract_array_uint8_buf0_req0)
407369b121aSAndrew Jeffery {
408369b121aSAndrew Jeffery     struct pldm_msgbuf _ctx;
409369b121aSAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
410369b121aSAndrew Jeffery     uint8_t buf[1] = {};
411369b121aSAndrew Jeffery     uint8_t arr[1];
412369b121aSAndrew Jeffery 
413369b121aSAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
414369b121aSAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_extract_array_uint8(ctx, arr, 0), PLDM_SUCCESS);
415369b121aSAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
416369b121aSAndrew Jeffery }
417369b121aSAndrew Jeffery 
418369b121aSAndrew Jeffery TEST(msgbuf, extract_array_uint8_buf1_req1)
419369b121aSAndrew Jeffery {
420369b121aSAndrew Jeffery     struct pldm_msgbuf _ctx;
421369b121aSAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
422369b121aSAndrew Jeffery     uint8_t buf[1] = {};
423369b121aSAndrew Jeffery     uint8_t arr[1];
424369b121aSAndrew Jeffery 
425369b121aSAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
426369b121aSAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_extract_array_uint8(ctx, arr, sizeof(arr)),
427369b121aSAndrew Jeffery               PLDM_SUCCESS);
428369b121aSAndrew Jeffery     EXPECT_EQ(arr[0], 0);
429369b121aSAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
430369b121aSAndrew Jeffery }
431369b121aSAndrew Jeffery 
432369b121aSAndrew Jeffery TEST(msgbuf, extract_array_uint8_buf1_req2)
433369b121aSAndrew Jeffery {
434369b121aSAndrew Jeffery     struct pldm_msgbuf _ctx;
435369b121aSAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
436369b121aSAndrew Jeffery     uint8_t buf[1] = {};
437369b121aSAndrew Jeffery     uint8_t arr[2];
438369b121aSAndrew Jeffery 
439369b121aSAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
440369b121aSAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_array_uint8(ctx, arr, sizeof(arr)),
441369b121aSAndrew Jeffery               PLDM_SUCCESS);
442369b121aSAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
443369b121aSAndrew Jeffery }
444db7b8324SAndrew Jeffery 
4452ff8cf89SAndrew Jeffery TEST(msgbuf, extract_under_array_uint8)
4462ff8cf89SAndrew Jeffery {
4472ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
4482ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
4492ff8cf89SAndrew Jeffery     uint8_t buf[1] = {};
4502ff8cf89SAndrew Jeffery     uint8_t arr[1];
4512ff8cf89SAndrew Jeffery 
4522ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
4532ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN;
4542ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_array_uint8(ctx, arr, 1), PLDM_SUCCESS);
4552ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
4562ff8cf89SAndrew Jeffery }
4572ff8cf89SAndrew Jeffery 
458db7b8324SAndrew Jeffery TEST(msgbuf, consumed_under)
459db7b8324SAndrew Jeffery {
460db7b8324SAndrew Jeffery     struct pldm_msgbuf _ctx;
461db7b8324SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
462db7b8324SAndrew Jeffery     uint8_t buf[1] = {};
463db7b8324SAndrew Jeffery 
464db7b8324SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
465db7b8324SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), PLDM_ERROR_INVALID_LENGTH);
466db7b8324SAndrew Jeffery }
467db7b8324SAndrew Jeffery 
468db7b8324SAndrew Jeffery TEST(msgbuf, consumed_exact)
469db7b8324SAndrew Jeffery {
470db7b8324SAndrew Jeffery     struct pldm_msgbuf _ctx;
471db7b8324SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
472db7b8324SAndrew Jeffery     uint8_t buf[1] = {};
473db7b8324SAndrew Jeffery     uint8_t val;
474db7b8324SAndrew Jeffery 
475db7b8324SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
476db7b8324SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS);
477db7b8324SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), PLDM_SUCCESS);
478db7b8324SAndrew Jeffery }
479db7b8324SAndrew Jeffery 
480db7b8324SAndrew Jeffery TEST(msgbuf, consumed_over)
481db7b8324SAndrew Jeffery {
482db7b8324SAndrew Jeffery     struct pldm_msgbuf _ctx;
483db7b8324SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
484db7b8324SAndrew Jeffery     uint8_t buf[1] = {};
485db7b8324SAndrew Jeffery     uint8_t val[2];
486db7b8324SAndrew Jeffery 
487db7b8324SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
488db7b8324SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val[0]), PLDM_SUCCESS);
489db7b8324SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val[1]), PLDM_SUCCESS);
490db7b8324SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), PLDM_ERROR_INVALID_LENGTH);
491db7b8324SAndrew Jeffery }
492062c8762SThu Nguyen 
493062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_int32_good)
494062c8762SThu Nguyen {
495062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
496062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
497062c8762SThu Nguyen     int32_t src = -12345;
498062c8762SThu Nguyen     int32_t checkVal = 0;
499062c8762SThu Nguyen     uint8_t buf[sizeof(int32_t)] = {};
500062c8762SThu Nguyen 
501062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
502062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_insert_int32(ctx, src), PLDM_SUCCESS);
503062c8762SThu Nguyen 
504062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
505062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
506062c8762SThu Nguyen 
507062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
508062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_extract_int32(ctxExtract, &checkVal), PLDM_SUCCESS);
509062c8762SThu Nguyen 
510062c8762SThu Nguyen     EXPECT_EQ(src, checkVal);
511062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
512062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
513062c8762SThu Nguyen }
514062c8762SThu Nguyen 
515062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_int32_bad)
516062c8762SThu Nguyen {
517062c8762SThu Nguyen     int32_t src = -12345;
518062c8762SThu Nguyen 
519062c8762SThu Nguyen     auto rc = pldm_msgbuf_insert_int32(NULL, src);
520062c8762SThu Nguyen 
521062c8762SThu Nguyen     EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
522062c8762SThu Nguyen }
523062c8762SThu Nguyen 
5242ff8cf89SAndrew Jeffery TEST(msgbuf, insert_under_int32)
5252ff8cf89SAndrew Jeffery {
5262ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
5272ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
5282ff8cf89SAndrew Jeffery 
5292ff8cf89SAndrew Jeffery     int32_t buf[1] = {};
5302ff8cf89SAndrew Jeffery     int32_t val = 0;
5312ff8cf89SAndrew Jeffery 
5322ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
5332ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
5342ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_insert_int32(ctx, val), PLDM_SUCCESS);
5352ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
5362ff8cf89SAndrew Jeffery }
5372ff8cf89SAndrew Jeffery 
538062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_uint32_good)
539062c8762SThu Nguyen {
540062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
541062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
542062c8762SThu Nguyen     uint32_t src = 0xf1223344;
543062c8762SThu Nguyen     uint32_t checkVal = 0;
544062c8762SThu Nguyen     uint8_t buf[sizeof(uint32_t)] = {};
545062c8762SThu Nguyen 
546062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
547062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_insert_uint32(ctx, src), PLDM_SUCCESS);
548062c8762SThu Nguyen 
549062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
550062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
551062c8762SThu Nguyen 
552062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
553062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_extract_uint32(ctxExtract, &checkVal), PLDM_SUCCESS);
554062c8762SThu Nguyen 
555062c8762SThu Nguyen     EXPECT_EQ(src, checkVal);
556062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
557062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
558062c8762SThu Nguyen }
559062c8762SThu Nguyen 
560062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_uint32_bad)
561062c8762SThu Nguyen {
562062c8762SThu Nguyen     uint32_t src = 0xf1223344;
563062c8762SThu Nguyen 
564062c8762SThu Nguyen     auto rc = pldm_msgbuf_insert_uint32(NULL, src);
565062c8762SThu Nguyen 
566062c8762SThu Nguyen     EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
567062c8762SThu Nguyen }
568062c8762SThu Nguyen 
5692ff8cf89SAndrew Jeffery TEST(msgbuf, insert_under_uint32)
5702ff8cf89SAndrew Jeffery {
5712ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
5722ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
5732ff8cf89SAndrew Jeffery 
5742ff8cf89SAndrew Jeffery     uint32_t buf[1] = {};
5752ff8cf89SAndrew Jeffery     uint32_t val = 0;
5762ff8cf89SAndrew Jeffery 
5772ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
5782ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
5792ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_insert_uint32(ctx, val), PLDM_SUCCESS);
5802ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
5812ff8cf89SAndrew Jeffery }
5822ff8cf89SAndrew Jeffery 
583062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_uint16_good)
584062c8762SThu Nguyen {
585062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
586062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
587062c8762SThu Nguyen     uint16_t src = 0xf344;
588062c8762SThu Nguyen     uint16_t checkVal = 0;
589062c8762SThu Nguyen     uint8_t buf[sizeof(uint16_t)] = {};
590062c8762SThu Nguyen 
591062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(uint16_t)), PLDM_SUCCESS);
592062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_insert_uint16(ctx, src), PLDM_SUCCESS);
593062c8762SThu Nguyen 
594062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
595062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
596062c8762SThu Nguyen 
597062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
598062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &checkVal), PLDM_SUCCESS);
599062c8762SThu Nguyen 
600062c8762SThu Nguyen     EXPECT_EQ(src, checkVal);
601062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
602062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
603062c8762SThu Nguyen }
604062c8762SThu Nguyen 
605062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_uint16_bad)
606062c8762SThu Nguyen {
607062c8762SThu Nguyen     uint16_t src = 0xf344;
608062c8762SThu Nguyen 
609062c8762SThu Nguyen     auto rc = pldm_msgbuf_insert_uint16(NULL, src);
610062c8762SThu Nguyen 
611062c8762SThu Nguyen     EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
612062c8762SThu Nguyen }
613062c8762SThu Nguyen 
6142ff8cf89SAndrew Jeffery TEST(msgbuf, insert_under_uint16)
6152ff8cf89SAndrew Jeffery {
6162ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
6172ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
6182ff8cf89SAndrew Jeffery 
6192ff8cf89SAndrew Jeffery     uint16_t buf[1] = {};
6202ff8cf89SAndrew Jeffery     uint16_t val = 0;
6212ff8cf89SAndrew Jeffery 
6222ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
6232ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
6242ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_insert_uint16(ctx, val), PLDM_SUCCESS);
6252ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
6262ff8cf89SAndrew Jeffery }
6272ff8cf89SAndrew Jeffery 
628062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_int16_good)
629062c8762SThu Nguyen {
630062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
631062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
632062c8762SThu Nguyen     int16_t src = -12;
633062c8762SThu Nguyen     int16_t checkVal = 0;
634062c8762SThu Nguyen     uint8_t buf[sizeof(int16_t)] = {};
635062c8762SThu Nguyen 
636062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(uint16_t)), PLDM_SUCCESS);
637062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_insert_int16(ctx, src), PLDM_SUCCESS);
638062c8762SThu Nguyen 
639062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
640062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
641062c8762SThu Nguyen 
642062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
643062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_extract_int16(ctxExtract, &checkVal), PLDM_SUCCESS);
644062c8762SThu Nguyen 
645062c8762SThu Nguyen     EXPECT_EQ(src, checkVal);
646062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
647062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
648062c8762SThu Nguyen }
649062c8762SThu Nguyen 
650062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_int16_bad)
651062c8762SThu Nguyen {
652062c8762SThu Nguyen     int16_t src = -12;
653062c8762SThu Nguyen 
654062c8762SThu Nguyen     auto rc = pldm_msgbuf_insert_int16(NULL, src);
655062c8762SThu Nguyen 
656062c8762SThu Nguyen     EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
657062c8762SThu Nguyen }
658062c8762SThu Nguyen 
6592ff8cf89SAndrew Jeffery TEST(msgbuf, insert_under_int16)
6602ff8cf89SAndrew Jeffery {
6612ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
6622ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
6632ff8cf89SAndrew Jeffery 
6642ff8cf89SAndrew Jeffery     int16_t buf[1] = {};
6652ff8cf89SAndrew Jeffery     int16_t val = 0;
6662ff8cf89SAndrew Jeffery 
6672ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
6682ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
6692ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_insert_int16(ctx, val), PLDM_SUCCESS);
6702ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
6712ff8cf89SAndrew Jeffery }
6722ff8cf89SAndrew Jeffery 
673062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_uint8_good)
674062c8762SThu Nguyen {
675062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
676062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
677062c8762SThu Nguyen     uint8_t src = 0xf4;
678062c8762SThu Nguyen     uint8_t checkVal = 0;
679062c8762SThu Nguyen     uint8_t buf[sizeof(uint8_t)] = {};
680062c8762SThu Nguyen 
681062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
682062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_insert_uint8(ctx, src), PLDM_SUCCESS);
683062c8762SThu Nguyen 
684062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
685062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
686062c8762SThu Nguyen 
687062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
688062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_extract_uint8(ctxExtract, &checkVal), PLDM_SUCCESS);
689062c8762SThu Nguyen 
690062c8762SThu Nguyen     EXPECT_EQ(src, checkVal);
691062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
692062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
693062c8762SThu Nguyen }
694062c8762SThu Nguyen 
695062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_uint8_bad)
696062c8762SThu Nguyen {
697062c8762SThu Nguyen     uint8_t src = 0xf4;
698062c8762SThu Nguyen 
699062c8762SThu Nguyen     auto rc = pldm_msgbuf_insert_uint8(NULL, src);
700062c8762SThu Nguyen 
701062c8762SThu Nguyen     EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
702062c8762SThu Nguyen }
703062c8762SThu Nguyen 
7042ff8cf89SAndrew Jeffery TEST(msgbuf, insert_under_uint8)
7052ff8cf89SAndrew Jeffery {
7062ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
7072ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
7082ff8cf89SAndrew Jeffery 
7092ff8cf89SAndrew Jeffery     uint8_t buf[1] = {};
7102ff8cf89SAndrew Jeffery     uint8_t val = 0;
7112ff8cf89SAndrew Jeffery 
7122ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
7132ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
7142ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_insert_uint8(ctx, val), PLDM_SUCCESS);
7152ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
7162ff8cf89SAndrew Jeffery }
7172ff8cf89SAndrew Jeffery 
718062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_int8_good)
719062c8762SThu Nguyen {
720062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
721062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
722062c8762SThu Nguyen     int8_t src = -4;
723062c8762SThu Nguyen     int8_t checkVal = 0;
724062c8762SThu Nguyen     uint8_t buf[sizeof(int8_t)] = {};
725062c8762SThu Nguyen 
726062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
727062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_insert_int8(ctx, src), PLDM_SUCCESS);
728062c8762SThu Nguyen 
729062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
730062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
731062c8762SThu Nguyen 
732062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
733062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_extract_int8(ctxExtract, &checkVal), PLDM_SUCCESS);
734062c8762SThu Nguyen 
735062c8762SThu Nguyen     EXPECT_EQ(src, checkVal);
736062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
737062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
738062c8762SThu Nguyen }
739062c8762SThu Nguyen 
740062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_int8_bad)
741062c8762SThu Nguyen {
742062c8762SThu Nguyen     int8_t src = -4;
743062c8762SThu Nguyen 
744062c8762SThu Nguyen     auto rc = pldm_msgbuf_insert_int8(NULL, src);
745062c8762SThu Nguyen 
746062c8762SThu Nguyen     EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
747062c8762SThu Nguyen }
748062c8762SThu Nguyen 
7492ff8cf89SAndrew Jeffery TEST(msgbuf, insert_under_int8)
7502ff8cf89SAndrew Jeffery {
7512ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
7522ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
7532ff8cf89SAndrew Jeffery 
7542ff8cf89SAndrew Jeffery     int8_t buf[1] = {};
7552ff8cf89SAndrew Jeffery     int8_t val = 0;
7562ff8cf89SAndrew Jeffery 
7572ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
7582ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
7592ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_insert_int8(ctx, val), PLDM_SUCCESS);
7602ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
7612ff8cf89SAndrew Jeffery }
7622ff8cf89SAndrew Jeffery 
763062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_array_uint8_good)
764062c8762SThu Nguyen {
765062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
766062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
767062c8762SThu Nguyen     uint8_t src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
768062c8762SThu Nguyen     uint8_t buf[6] = {};
769062c8762SThu Nguyen     uint8_t retBuff[6] = {};
770062c8762SThu Nguyen 
771062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
772062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
773062c8762SThu Nguyen               PLDM_SUCCESS);
774062c8762SThu Nguyen 
775062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
776062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
777062c8762SThu Nguyen 
778062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
779062c8762SThu Nguyen     EXPECT_EQ(
780062c8762SThu Nguyen         pldm_msgbuf_extract_array_uint8(ctxExtract, retBuff, sizeof(retBuff)),
781062c8762SThu Nguyen         PLDM_SUCCESS);
782062c8762SThu Nguyen 
783062c8762SThu Nguyen     EXPECT_EQ(memcmp(src, retBuff, sizeof(retBuff)), 0);
784062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
785062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
786062c8762SThu Nguyen }
787062c8762SThu Nguyen 
788062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_insert_array_uint8_bad)
789062c8762SThu Nguyen {
790062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
791062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
792062c8762SThu Nguyen     uint8_t src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
793062c8762SThu Nguyen     uint8_t buf[6] = {};
794062c8762SThu Nguyen 
795062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
796062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_insert_array_uint8(NULL, src, sizeof(src)),
797062c8762SThu Nguyen               PLDM_ERROR_INVALID_DATA);
798062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, NULL, sizeof(src)),
799062c8762SThu Nguyen               PLDM_ERROR_INVALID_DATA);
800062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
801062c8762SThu Nguyen }
802062c8762SThu Nguyen 
8032ff8cf89SAndrew Jeffery TEST(msgbuf, insert_under_array_uint8)
8042ff8cf89SAndrew Jeffery {
8052ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
8062ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
8072ff8cf89SAndrew Jeffery 
8082ff8cf89SAndrew Jeffery     uint8_t buf[1] = {};
8092ff8cf89SAndrew Jeffery     uint8_t val[1] = {0};
8102ff8cf89SAndrew Jeffery 
8112ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
8122ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN + sizeof(val) - 1;
8132ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_insert_array_uint8(ctx, val, sizeof(val)),
8142ff8cf89SAndrew Jeffery               PLDM_SUCCESS);
8152ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
8162ff8cf89SAndrew Jeffery }
8172ff8cf89SAndrew Jeffery 
818062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_span_required_good)
819062c8762SThu Nguyen {
820062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
821062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
822062c8762SThu Nguyen     uint8_t src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
823062c8762SThu Nguyen     uint8_t buf[6] = {0};
824062c8762SThu Nguyen     const size_t required = 4;
825062c8762SThu Nguyen     uint8_t expectData[required] = {0x44, 0x55, 0x66, 0x77};
826062c8762SThu Nguyen     uint16_t testVal;
827062c8762SThu Nguyen     uint8_t* retBuff = NULL;
828062c8762SThu Nguyen 
829062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
830062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
831062c8762SThu Nguyen               PLDM_SUCCESS);
832062c8762SThu Nguyen 
833062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
834062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
835062c8762SThu Nguyen 
836062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
837062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &testVal), PLDM_SUCCESS);
838062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_span_required(ctxExtract, required, (void**)&retBuff),
839062c8762SThu Nguyen               PLDM_SUCCESS);
840062c8762SThu Nguyen 
841062c8762SThu Nguyen     EXPECT_EQ(memcmp(expectData, retBuff, required), 0);
842062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
843062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
844062c8762SThu Nguyen }
845062c8762SThu Nguyen 
846062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_span_required_bad)
847062c8762SThu Nguyen {
848062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
849062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
850062c8762SThu Nguyen     uint8_t src[6] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77};
851062c8762SThu Nguyen     uint8_t buf[6] = {0};
852062c8762SThu Nguyen     const size_t required = 4;
853062c8762SThu Nguyen     uint16_t testVal;
854062c8762SThu Nguyen     [[maybe_unused]] uint8_t* retBuff = NULL;
855062c8762SThu Nguyen 
856062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
857062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
858062c8762SThu Nguyen               PLDM_SUCCESS);
859062c8762SThu Nguyen 
860062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
861062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
862062c8762SThu Nguyen 
863062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
864062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &testVal), PLDM_SUCCESS);
865062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_span_required(ctxExtract, required, NULL),
866062c8762SThu Nguyen               PLDM_ERROR_INVALID_DATA);
867062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_span_required(NULL, required, (void**)&retBuff),
868062c8762SThu Nguyen               PLDM_ERROR_INVALID_DATA);
869062c8762SThu Nguyen 
870062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
871062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
872062c8762SThu Nguyen }
873062c8762SThu Nguyen 
8742ff8cf89SAndrew Jeffery TEST(msgbuf, span_required_under)
8752ff8cf89SAndrew Jeffery {
8762ff8cf89SAndrew Jeffery     struct pldm_msgbuf _ctx;
8772ff8cf89SAndrew Jeffery     struct pldm_msgbuf* ctx = &_ctx;
8782ff8cf89SAndrew Jeffery 
8792ff8cf89SAndrew Jeffery     uint8_t buf[1] = {};
8802ff8cf89SAndrew Jeffery     void* cursor = nullptr;
8812ff8cf89SAndrew Jeffery 
8822ff8cf89SAndrew Jeffery     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS);
8832ff8cf89SAndrew Jeffery     ctx->remaining = INTMAX_MIN;
8842ff8cf89SAndrew Jeffery     EXPECT_NE(pldm_msgbuf_span_required(ctx, 1, &cursor), PLDM_SUCCESS);
8852ff8cf89SAndrew Jeffery     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH);
8862ff8cf89SAndrew Jeffery }
8872ff8cf89SAndrew Jeffery 
888062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_span_remaining_good)
889062c8762SThu Nguyen {
890062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
891062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
892062c8762SThu Nguyen     uint8_t src[8] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99};
893062c8762SThu Nguyen     uint8_t buf[8] = {0};
894062c8762SThu Nguyen     uint16_t testVal;
895062c8762SThu Nguyen     uint8_t expectData[6] = {0x44, 0x55, 0x66, 0x77, 0x88, 0x99};
896062c8762SThu Nguyen     size_t remaining;
897062c8762SThu Nguyen     uint8_t* retBuff = NULL;
898062c8762SThu Nguyen 
899062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
900062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
901062c8762SThu Nguyen               PLDM_SUCCESS);
902062c8762SThu Nguyen 
903062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
904062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
905062c8762SThu Nguyen 
906062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
907062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &testVal), PLDM_SUCCESS);
908062c8762SThu Nguyen     EXPECT_EQ(
909062c8762SThu Nguyen         pldm_msgbuf_span_remaining(ctxExtract, (void**)&retBuff, &remaining),
910062c8762SThu Nguyen         PLDM_SUCCESS);
911062c8762SThu Nguyen 
912062c8762SThu Nguyen     EXPECT_EQ(remaining, sizeof(expectData));
913062c8762SThu Nguyen     EXPECT_EQ(memcmp(expectData, retBuff, remaining), 0);
914062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
915062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
916062c8762SThu Nguyen }
917062c8762SThu Nguyen 
918062c8762SThu Nguyen TEST(msgbuf, pldm_msgbuf_span_remaining_bad)
919062c8762SThu Nguyen {
920062c8762SThu Nguyen     struct pldm_msgbuf _ctx;
921062c8762SThu Nguyen     struct pldm_msgbuf* ctx = &_ctx;
922062c8762SThu Nguyen     uint8_t src[8] = {0x11, 0x22, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99};
923062c8762SThu Nguyen     uint8_t buf[8] = {0};
924062c8762SThu Nguyen     uint16_t testVal;
925062c8762SThu Nguyen     size_t remaining;
926062c8762SThu Nguyen     uint8_t* retBuff = NULL;
927062c8762SThu Nguyen 
928062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS);
929062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_insert_array_uint8(ctx, src, sizeof(src)),
930062c8762SThu Nguyen               PLDM_SUCCESS);
931062c8762SThu Nguyen 
932062c8762SThu Nguyen     struct pldm_msgbuf _ctxExtract;
933062c8762SThu Nguyen     struct pldm_msgbuf* ctxExtract = &_ctxExtract;
934062c8762SThu Nguyen 
935062c8762SThu Nguyen     ASSERT_EQ(pldm_msgbuf_init(ctxExtract, 0, buf, sizeof(buf)), PLDM_SUCCESS);
936062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_extract_uint16(ctxExtract, &testVal), PLDM_SUCCESS);
937062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_span_remaining(NULL, (void**)&retBuff, &remaining),
938062c8762SThu Nguyen               PLDM_ERROR_INVALID_DATA);
939062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_span_remaining(ctxExtract, NULL, &remaining),
940062c8762SThu Nguyen               PLDM_ERROR_INVALID_DATA);
941062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_span_remaining(ctxExtract, (void**)&retBuff, NULL),
942062c8762SThu Nguyen               PLDM_ERROR_INVALID_DATA);
943062c8762SThu Nguyen 
944062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctxExtract), PLDM_SUCCESS);
945062c8762SThu Nguyen     EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS);
946062c8762SThu Nguyen }
947*909bf7c2SVarsha Kaverappa 
948*909bf7c2SVarsha Kaverappa TEST(msgbuf, pldm_msgbuf_copy_good)
949*909bf7c2SVarsha Kaverappa {
950*909bf7c2SVarsha Kaverappa     struct pldm_msgbuf _src;
951*909bf7c2SVarsha Kaverappa     struct pldm_msgbuf* src = &_src;
952*909bf7c2SVarsha Kaverappa     uint16_t buf[1] = {htole16(0x5aa5)};
953*909bf7c2SVarsha Kaverappa 
954*909bf7c2SVarsha Kaverappa     ASSERT_EQ(pldm_msgbuf_init(src, sizeof(buf), buf, sizeof(buf)),
955*909bf7c2SVarsha Kaverappa               PLDM_SUCCESS);
956*909bf7c2SVarsha Kaverappa 
957*909bf7c2SVarsha Kaverappa     struct pldm_msgbuf _dst;
958*909bf7c2SVarsha Kaverappa     struct pldm_msgbuf* dst = &_dst;
959*909bf7c2SVarsha Kaverappa     uint16_t checkVal = 0;
960*909bf7c2SVarsha Kaverappa     uint8_t buf1[sizeof(buf)] = {};
961*909bf7c2SVarsha Kaverappa 
962*909bf7c2SVarsha Kaverappa     ASSERT_EQ(pldm_msgbuf_init(dst, sizeof(buf1), buf1, sizeof(buf1)),
963*909bf7c2SVarsha Kaverappa               PLDM_SUCCESS);
964*909bf7c2SVarsha Kaverappa     EXPECT_EQ(pldm_msgbuf_copy(dst, src, buf[0], name), PLDM_SUCCESS);
965*909bf7c2SVarsha Kaverappa 
966*909bf7c2SVarsha Kaverappa     ASSERT_EQ(pldm_msgbuf_init(dst, sizeof(buf1), buf1, sizeof(buf1)),
967*909bf7c2SVarsha Kaverappa               PLDM_SUCCESS);
968*909bf7c2SVarsha Kaverappa     EXPECT_EQ(pldm_msgbuf_extract_uint16(dst, &checkVal), PLDM_SUCCESS);
969*909bf7c2SVarsha Kaverappa 
970*909bf7c2SVarsha Kaverappa     EXPECT_EQ(buf[0], checkVal);
971*909bf7c2SVarsha Kaverappa     EXPECT_EQ(pldm_msgbuf_destroy(src), PLDM_SUCCESS);
972*909bf7c2SVarsha Kaverappa     EXPECT_EQ(pldm_msgbuf_destroy(dst), PLDM_SUCCESS);
973*909bf7c2SVarsha Kaverappa }
974*909bf7c2SVarsha Kaverappa 
975*909bf7c2SVarsha Kaverappa TEST(msgbuf, pldm_msgbuf_copy_bad)
976*909bf7c2SVarsha Kaverappa {
977*909bf7c2SVarsha Kaverappa     struct pldm_msgbuf _src;
978*909bf7c2SVarsha Kaverappa     struct pldm_msgbuf* src = &_src;
979*909bf7c2SVarsha Kaverappa     struct pldm_msgbuf _dst;
980*909bf7c2SVarsha Kaverappa     struct pldm_msgbuf* dst = &_dst;
981*909bf7c2SVarsha Kaverappa     uint8_t buf[1] = {sizeof(uint8_t)};
982*909bf7c2SVarsha Kaverappa     uint8_t buf1[1] = {sizeof(uint16_t)};
983*909bf7c2SVarsha Kaverappa     uint16_t value = 8;
984*909bf7c2SVarsha Kaverappa 
985*909bf7c2SVarsha Kaverappa     EXPECT_EQ(pldm_msgbuf_copy(dst, NULL, buf[0], name),
986*909bf7c2SVarsha Kaverappa               PLDM_ERROR_INVALID_DATA);
987*909bf7c2SVarsha Kaverappa     EXPECT_EQ(pldm_msgbuf_copy(NULL, src, buf[0], name),
988*909bf7c2SVarsha Kaverappa               PLDM_ERROR_INVALID_DATA);
989*909bf7c2SVarsha Kaverappa 
990*909bf7c2SVarsha Kaverappa     ASSERT_EQ(pldm_msgbuf_init(src, 0, buf, sizeof(buf)), PLDM_SUCCESS);
991*909bf7c2SVarsha Kaverappa     ASSERT_EQ(pldm_msgbuf_init(dst, 0, buf1, sizeof(buf1)), PLDM_SUCCESS);
992*909bf7c2SVarsha Kaverappa     EXPECT_EQ(pldm_msgbuf_copy(dst, src, value, name),
993*909bf7c2SVarsha Kaverappa               PLDM_ERROR_INVALID_LENGTH);
994*909bf7c2SVarsha Kaverappa 
995*909bf7c2SVarsha Kaverappa     ASSERT_EQ(pldm_msgbuf_init(src, 0, buf1, sizeof(buf1)), PLDM_SUCCESS);
996*909bf7c2SVarsha Kaverappa     ASSERT_EQ(pldm_msgbuf_init(dst, 0, buf, sizeof(buf)), PLDM_SUCCESS);
997*909bf7c2SVarsha Kaverappa     EXPECT_EQ(pldm_msgbuf_copy(dst, src, value, name),
998*909bf7c2SVarsha Kaverappa               PLDM_ERROR_INVALID_LENGTH);
999*909bf7c2SVarsha Kaverappa }
1000