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 /* 13c63f63a2SAndrew Jeffery * Fix up C11's _Static_assert() vs C++'s static_assert(). 14c63f63a2SAndrew Jeffery * 15c63f63a2SAndrew Jeffery * Can we please have nice things for once. 16c63f63a2SAndrew Jeffery */ 17c63f63a2SAndrew Jeffery #ifdef __cplusplus 18c63f63a2SAndrew Jeffery // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp) 19c63f63a2SAndrew Jeffery #define _Static_assert(...) static_assert(__VA_ARGS__) 20c63f63a2SAndrew Jeffery #endif 21c63f63a2SAndrew Jeffery 22c63f63a2SAndrew Jeffery #include "msgbuf.h" 23c63f63a2SAndrew Jeffery 24c63f63a2SAndrew Jeffery TEST(msgbuf, init_bad_ctx) 25c63f63a2SAndrew Jeffery { 26c63f63a2SAndrew Jeffery EXPECT_NE(pldm_msgbuf_init(NULL, 0, NULL, 0), PLDM_SUCCESS); 27c63f63a2SAndrew Jeffery } 28c63f63a2SAndrew Jeffery 29c63f63a2SAndrew Jeffery TEST(msgbuf, init_bad_minsize) 30c63f63a2SAndrew Jeffery { 31c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 32c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 33c63f63a2SAndrew Jeffery uint8_t buf[1] = {}; 34c63f63a2SAndrew Jeffery 35c63f63a2SAndrew Jeffery EXPECT_NE(pldm_msgbuf_init(ctx, sizeof(buf) + 1U, buf, sizeof(buf)), 36c63f63a2SAndrew Jeffery PLDM_SUCCESS); 37c63f63a2SAndrew Jeffery } 38c63f63a2SAndrew Jeffery 39c63f63a2SAndrew Jeffery TEST(msgbuf, init_bad_buf) 40c63f63a2SAndrew Jeffery { 41c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 42c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 43c63f63a2SAndrew Jeffery 44c63f63a2SAndrew Jeffery EXPECT_NE(pldm_msgbuf_init(ctx, 0, NULL, 0), PLDM_SUCCESS); 45c63f63a2SAndrew Jeffery } 46c63f63a2SAndrew Jeffery 47c63f63a2SAndrew Jeffery TEST(msgbuf, init_bad_len) 48c63f63a2SAndrew Jeffery { 49c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 50c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 51c63f63a2SAndrew Jeffery uint8_t buf[1] = {}; 52c63f63a2SAndrew Jeffery 53c63f63a2SAndrew Jeffery EXPECT_NE(pldm_msgbuf_init(ctx, sizeof(buf), buf, SIZE_MAX), PLDM_SUCCESS); 54c63f63a2SAndrew Jeffery } 55c63f63a2SAndrew Jeffery 56c63f63a2SAndrew Jeffery TEST(msgbuf, init_overflow) 57c63f63a2SAndrew Jeffery { 58c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 59c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 60c63f63a2SAndrew Jeffery // This is an intrinsic part of the test. 61c63f63a2SAndrew Jeffery // NOLINTNEXTLINE(performance-no-int-to-ptr) 62c63f63a2SAndrew Jeffery uint8_t* buf = (uint8_t*)SIZE_MAX; 63c63f63a2SAndrew Jeffery 64c63f63a2SAndrew Jeffery EXPECT_NE(pldm_msgbuf_init(ctx, 0, buf, 2), PLDM_SUCCESS); 65c63f63a2SAndrew Jeffery } 66c63f63a2SAndrew Jeffery 67c63f63a2SAndrew Jeffery TEST(msgbuf, init_success) 68c63f63a2SAndrew Jeffery { 69c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 70c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 71c63f63a2SAndrew Jeffery uint8_t buf[1] = {}; 72c63f63a2SAndrew Jeffery 73c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)), 74c63f63a2SAndrew Jeffery PLDM_SUCCESS); 75c63f63a2SAndrew Jeffery } 76c63f63a2SAndrew Jeffery 77c63f63a2SAndrew Jeffery TEST(msgbuf, destroy_none) 78c63f63a2SAndrew Jeffery { 79c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 80c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 81c63f63a2SAndrew Jeffery uint8_t buf[1] = {}; 82c63f63a2SAndrew Jeffery 83c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)), 84c63f63a2SAndrew Jeffery PLDM_SUCCESS); 85c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS); 86c63f63a2SAndrew Jeffery } 87c63f63a2SAndrew Jeffery 88c63f63a2SAndrew Jeffery TEST(msgbuf, destroy_exact) 89c63f63a2SAndrew Jeffery { 90c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 91c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 92c63f63a2SAndrew Jeffery uint8_t buf[1] = {0xa5}; 93c63f63a2SAndrew Jeffery uint8_t val; 94c63f63a2SAndrew Jeffery 95c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)), 96c63f63a2SAndrew Jeffery PLDM_SUCCESS); 97c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS); 98c63f63a2SAndrew Jeffery EXPECT_EQ(val, 0xa5); 99c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS); 100c63f63a2SAndrew Jeffery } 101c63f63a2SAndrew Jeffery 102c63f63a2SAndrew Jeffery TEST(msgbuf, destroy_over) 103c63f63a2SAndrew Jeffery { 104c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 105c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 106c63f63a2SAndrew Jeffery uint8_t buf[1] = {0xa5}; 107c63f63a2SAndrew Jeffery uint8_t val; 108c63f63a2SAndrew Jeffery 109c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)), 110c63f63a2SAndrew Jeffery PLDM_SUCCESS); 111c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS); 112c63f63a2SAndrew Jeffery ASSERT_EQ(val, 0xa5); 113c63f63a2SAndrew Jeffery EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS); 114c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH); 115c63f63a2SAndrew Jeffery } 116c63f63a2SAndrew Jeffery 117c63f63a2SAndrew Jeffery TEST(msgbuf, destroy_under) 118c63f63a2SAndrew Jeffery { 119c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 120c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 121c63f63a2SAndrew Jeffery uint8_t buf[2] = {0x5a, 0xa5}; 122c63f63a2SAndrew Jeffery uint8_t val; 123c63f63a2SAndrew Jeffery 124c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)), 125c63f63a2SAndrew Jeffery PLDM_SUCCESS); 126c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS); 127c63f63a2SAndrew Jeffery EXPECT_EQ(val, 0x5a); 128c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS); 129c63f63a2SAndrew Jeffery } 130c63f63a2SAndrew Jeffery 131c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_uint8) 132c63f63a2SAndrew Jeffery { 133c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 134c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 135c63f63a2SAndrew Jeffery uint8_t buf[1] = {0xa5}; 136c63f63a2SAndrew Jeffery uint8_t val; 137c63f63a2SAndrew Jeffery 138c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)), 139c63f63a2SAndrew Jeffery PLDM_SUCCESS); 140c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS); 141c63f63a2SAndrew Jeffery EXPECT_EQ(val, 0xa5); 142c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS); 143c63f63a2SAndrew Jeffery } 144c63f63a2SAndrew Jeffery 145c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_uint8) 146c63f63a2SAndrew Jeffery { 147c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 148c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 149c63f63a2SAndrew Jeffery uint8_t buf[1] = {}; 150c63f63a2SAndrew Jeffery uint8_t val; 151c63f63a2SAndrew Jeffery 152c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS); 153c63f63a2SAndrew Jeffery EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS); 154c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH); 155c63f63a2SAndrew Jeffery } 156c63f63a2SAndrew Jeffery 157c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_int8) 158c63f63a2SAndrew Jeffery { 159c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 160c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 161c63f63a2SAndrew Jeffery int8_t buf[1] = {-1}; 162c63f63a2SAndrew Jeffery int8_t val; 163c63f63a2SAndrew Jeffery 164c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)), 165c63f63a2SAndrew Jeffery PLDM_SUCCESS); 166c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_extract_int8(ctx, &val), PLDM_SUCCESS); 167c63f63a2SAndrew Jeffery EXPECT_EQ(val, -1); 168c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS); 169c63f63a2SAndrew Jeffery } 170c63f63a2SAndrew Jeffery 171c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_int8) 172c63f63a2SAndrew Jeffery { 173c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 174c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 175c63f63a2SAndrew Jeffery int8_t buf[1] = {}; 176c63f63a2SAndrew Jeffery int8_t val; 177c63f63a2SAndrew Jeffery 178c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS); 179c63f63a2SAndrew Jeffery EXPECT_NE(pldm_msgbuf_extract_int8(ctx, &val), PLDM_SUCCESS); 180c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH); 181c63f63a2SAndrew Jeffery } 182c63f63a2SAndrew Jeffery 183c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_uint16) 184c63f63a2SAndrew Jeffery { 185c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 186c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 187c63f63a2SAndrew Jeffery uint16_t buf[1] = {htole16(0x5aa5)}; 188c63f63a2SAndrew Jeffery uint16_t val = {}; 189c63f63a2SAndrew Jeffery 190c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)), 191c63f63a2SAndrew Jeffery PLDM_SUCCESS); 192c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_extract_uint16(ctx, &val), PLDM_SUCCESS); 193c63f63a2SAndrew Jeffery EXPECT_EQ(val, 0x5aa5); 194c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS); 195c63f63a2SAndrew Jeffery } 196c63f63a2SAndrew Jeffery 197c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_uint16) 198c63f63a2SAndrew Jeffery { 199c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 200c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 201c63f63a2SAndrew Jeffery uint16_t buf[1] = {}; 202c63f63a2SAndrew Jeffery uint16_t val; 203c63f63a2SAndrew Jeffery 204c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS); 205c63f63a2SAndrew Jeffery EXPECT_NE(pldm_msgbuf_extract_uint16(ctx, &val), PLDM_SUCCESS); 206c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH); 207c63f63a2SAndrew Jeffery } 208c63f63a2SAndrew Jeffery 209c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_int16) 210c63f63a2SAndrew Jeffery { 211c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 212c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 213c63f63a2SAndrew Jeffery int16_t buf[1] = {(int16_t)(htole16((uint16_t)INT16_MIN))}; 214c63f63a2SAndrew Jeffery int16_t val; 215c63f63a2SAndrew Jeffery 216c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)), 217c63f63a2SAndrew Jeffery PLDM_SUCCESS); 218c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_extract_int16(ctx, &val), PLDM_SUCCESS); 219c63f63a2SAndrew Jeffery EXPECT_EQ(val, INT16_MIN); 220c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS); 221c63f63a2SAndrew Jeffery } 222c63f63a2SAndrew Jeffery 223c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_int16) 224c63f63a2SAndrew Jeffery { 225c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 226c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 227c63f63a2SAndrew Jeffery int16_t buf[1] = {}; 228c63f63a2SAndrew Jeffery int16_t val; 229c63f63a2SAndrew Jeffery 230c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS); 231c63f63a2SAndrew Jeffery EXPECT_NE(pldm_msgbuf_extract_int16(ctx, &val), PLDM_SUCCESS); 232c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH); 233c63f63a2SAndrew Jeffery } 234c63f63a2SAndrew Jeffery 235c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_uint32) 236c63f63a2SAndrew Jeffery { 237c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 238c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 239c63f63a2SAndrew Jeffery uint32_t buf[1] = {htole32(0x5a00ffa5)}; 240c63f63a2SAndrew Jeffery uint32_t val; 241c63f63a2SAndrew Jeffery 242c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)), 243c63f63a2SAndrew Jeffery PLDM_SUCCESS); 244c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_extract_uint32(ctx, &val), PLDM_SUCCESS); 245c63f63a2SAndrew Jeffery EXPECT_EQ(val, 0x5a00ffa5); 246c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS); 247c63f63a2SAndrew Jeffery } 248c63f63a2SAndrew Jeffery 249c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_uint32) 250c63f63a2SAndrew Jeffery { 251c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 252c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 253c63f63a2SAndrew Jeffery uint32_t buf[1] = {}; 254c63f63a2SAndrew Jeffery uint32_t val; 255c63f63a2SAndrew Jeffery 256c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS); 257c63f63a2SAndrew Jeffery EXPECT_NE(pldm_msgbuf_extract_uint32(ctx, &val), PLDM_SUCCESS); 258c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH); 259c63f63a2SAndrew Jeffery } 260c63f63a2SAndrew Jeffery 261c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_int32) 262c63f63a2SAndrew Jeffery { 263c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 264c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 265c63f63a2SAndrew Jeffery int32_t buf[1] = {(int32_t)(htole32((uint32_t)(INT32_MIN)))}; 266c63f63a2SAndrew Jeffery int32_t val; 267c63f63a2SAndrew Jeffery 268c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)), 269c63f63a2SAndrew Jeffery PLDM_SUCCESS); 270c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_extract_int32(ctx, &val), PLDM_SUCCESS); 271c63f63a2SAndrew Jeffery EXPECT_EQ(val, INT32_MIN); 272c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS); 273c63f63a2SAndrew Jeffery } 274c63f63a2SAndrew Jeffery 275c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_int32) 276c63f63a2SAndrew Jeffery { 277c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 278c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 279c63f63a2SAndrew Jeffery int32_t buf[1] = {}; 280c63f63a2SAndrew Jeffery int32_t val; 281c63f63a2SAndrew Jeffery 282c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS); 283c63f63a2SAndrew Jeffery EXPECT_NE(pldm_msgbuf_extract_int32(ctx, &val), PLDM_SUCCESS); 284c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH); 285c63f63a2SAndrew Jeffery } 286c63f63a2SAndrew Jeffery 287c63f63a2SAndrew Jeffery TEST(msgbuf, extract_one_real32) 288c63f63a2SAndrew Jeffery { 289c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 290c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 291c63f63a2SAndrew Jeffery uint32_t buf[1] = {}; 292c63f63a2SAndrew Jeffery uint32_t xform; 293c63f63a2SAndrew Jeffery real32_t val; 294c63f63a2SAndrew Jeffery 295c63f63a2SAndrew Jeffery val = FLT_MAX; 296c63f63a2SAndrew Jeffery memcpy(&xform, &val, sizeof(val)); 297c63f63a2SAndrew Jeffery buf[0] = htole32(xform); 298c63f63a2SAndrew Jeffery val = 0; 299c63f63a2SAndrew Jeffery 300c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, sizeof(buf), buf, sizeof(buf)), 301c63f63a2SAndrew Jeffery PLDM_SUCCESS); 302c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_extract_real32(ctx, &val), PLDM_SUCCESS); 303c63f63a2SAndrew Jeffery EXPECT_EQ(val, FLT_MAX); 304c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS); 305c63f63a2SAndrew Jeffery } 306c63f63a2SAndrew Jeffery 307c63f63a2SAndrew Jeffery TEST(msgbuf, extract_over_real32) 308c63f63a2SAndrew Jeffery { 309c63f63a2SAndrew Jeffery struct pldm_msgbuf _ctx; 310c63f63a2SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 311c63f63a2SAndrew Jeffery real32_t buf[1] = {}; 312c63f63a2SAndrew Jeffery real32_t val; 313c63f63a2SAndrew Jeffery 314c63f63a2SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS); 315c63f63a2SAndrew Jeffery EXPECT_NE(pldm_msgbuf_extract_real32(ctx, &val), PLDM_SUCCESS); 316c63f63a2SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH); 317c63f63a2SAndrew Jeffery } 318369b121aSAndrew Jeffery 319369b121aSAndrew Jeffery TEST(msgbuf, extract_array_uint8_buf0_req0) 320369b121aSAndrew Jeffery { 321369b121aSAndrew Jeffery struct pldm_msgbuf _ctx; 322369b121aSAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 323369b121aSAndrew Jeffery uint8_t buf[1] = {}; 324369b121aSAndrew Jeffery uint8_t arr[1]; 325369b121aSAndrew Jeffery 326369b121aSAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, 0), PLDM_SUCCESS); 327369b121aSAndrew Jeffery EXPECT_EQ(pldm_msgbuf_extract_array_uint8(ctx, arr, 0), PLDM_SUCCESS); 328369b121aSAndrew Jeffery ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS); 329369b121aSAndrew Jeffery } 330369b121aSAndrew Jeffery 331369b121aSAndrew Jeffery TEST(msgbuf, extract_array_uint8_buf1_req1) 332369b121aSAndrew Jeffery { 333369b121aSAndrew Jeffery struct pldm_msgbuf _ctx; 334369b121aSAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 335369b121aSAndrew Jeffery uint8_t buf[1] = {}; 336369b121aSAndrew Jeffery uint8_t arr[1]; 337369b121aSAndrew Jeffery 338369b121aSAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS); 339369b121aSAndrew Jeffery EXPECT_EQ(pldm_msgbuf_extract_array_uint8(ctx, arr, sizeof(arr)), 340369b121aSAndrew Jeffery PLDM_SUCCESS); 341369b121aSAndrew Jeffery EXPECT_EQ(arr[0], 0); 342369b121aSAndrew Jeffery ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_SUCCESS); 343369b121aSAndrew Jeffery } 344369b121aSAndrew Jeffery 345369b121aSAndrew Jeffery TEST(msgbuf, extract_array_uint8_buf1_req2) 346369b121aSAndrew Jeffery { 347369b121aSAndrew Jeffery struct pldm_msgbuf _ctx; 348369b121aSAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 349369b121aSAndrew Jeffery uint8_t buf[1] = {}; 350369b121aSAndrew Jeffery uint8_t arr[2]; 351369b121aSAndrew Jeffery 352369b121aSAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS); 353369b121aSAndrew Jeffery EXPECT_NE(pldm_msgbuf_extract_array_uint8(ctx, arr, sizeof(arr)), 354369b121aSAndrew Jeffery PLDM_SUCCESS); 355369b121aSAndrew Jeffery ASSERT_EQ(pldm_msgbuf_destroy(ctx), PLDM_ERROR_INVALID_LENGTH); 356369b121aSAndrew Jeffery } 357*db7b8324SAndrew Jeffery 358*db7b8324SAndrew Jeffery TEST(msgbuf, consumed_under) 359*db7b8324SAndrew Jeffery { 360*db7b8324SAndrew Jeffery struct pldm_msgbuf _ctx; 361*db7b8324SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 362*db7b8324SAndrew Jeffery uint8_t buf[1] = {}; 363*db7b8324SAndrew Jeffery 364*db7b8324SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS); 365*db7b8324SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), PLDM_ERROR_INVALID_LENGTH); 366*db7b8324SAndrew Jeffery } 367*db7b8324SAndrew Jeffery 368*db7b8324SAndrew Jeffery TEST(msgbuf, consumed_exact) 369*db7b8324SAndrew Jeffery { 370*db7b8324SAndrew Jeffery struct pldm_msgbuf _ctx; 371*db7b8324SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 372*db7b8324SAndrew Jeffery uint8_t buf[1] = {}; 373*db7b8324SAndrew Jeffery uint8_t val; 374*db7b8324SAndrew Jeffery 375*db7b8324SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS); 376*db7b8324SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val), PLDM_SUCCESS); 377*db7b8324SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), PLDM_SUCCESS); 378*db7b8324SAndrew Jeffery } 379*db7b8324SAndrew Jeffery 380*db7b8324SAndrew Jeffery TEST(msgbuf, consumed_over) 381*db7b8324SAndrew Jeffery { 382*db7b8324SAndrew Jeffery struct pldm_msgbuf _ctx; 383*db7b8324SAndrew Jeffery struct pldm_msgbuf* ctx = &_ctx; 384*db7b8324SAndrew Jeffery uint8_t buf[1] = {}; 385*db7b8324SAndrew Jeffery uint8_t val[2]; 386*db7b8324SAndrew Jeffery 387*db7b8324SAndrew Jeffery ASSERT_EQ(pldm_msgbuf_init(ctx, 0, buf, sizeof(buf)), PLDM_SUCCESS); 388*db7b8324SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_extract_uint8(ctx, &val[0]), PLDM_SUCCESS); 389*db7b8324SAndrew Jeffery EXPECT_NE(pldm_msgbuf_extract_uint8(ctx, &val[1]), PLDM_SUCCESS); 390*db7b8324SAndrew Jeffery EXPECT_EQ(pldm_msgbuf_destroy_consumed(ctx), PLDM_ERROR_INVALID_LENGTH); 391*db7b8324SAndrew Jeffery } 392