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