148761c62SAndrew Jeffery #include <libpldm/base.h>
248761c62SAndrew Jeffery #include <libpldm/pldm_types.h>
348761c62SAndrew Jeffery
448761c62SAndrew Jeffery #include <array>
548761c62SAndrew Jeffery #include <cstdint>
648761c62SAndrew Jeffery #include <cstring>
748761c62SAndrew Jeffery #include <vector>
848761c62SAndrew Jeffery
948761c62SAndrew Jeffery #include <gmock/gmock.h>
1048761c62SAndrew Jeffery #include <gtest/gtest.h>
1148761c62SAndrew Jeffery
1248761c62SAndrew Jeffery using testing::ElementsAreArray;
1348761c62SAndrew Jeffery
1448761c62SAndrew Jeffery constexpr auto hdrSize = sizeof(pldm_msg_hdr);
1548761c62SAndrew Jeffery
TEST(PackPLDMMessage,BadPathTest)1648761c62SAndrew Jeffery TEST(PackPLDMMessage, BadPathTest)
1748761c62SAndrew Jeffery {
1848761c62SAndrew Jeffery struct pldm_header_info hdr;
1948761c62SAndrew Jeffery struct pldm_header_info* hdr_ptr = NULL;
2048761c62SAndrew Jeffery pldm_msg_hdr msg{};
2148761c62SAndrew Jeffery
2248761c62SAndrew Jeffery // PLDM header information pointer is NULL
2348761c62SAndrew Jeffery auto rc = pack_pldm_header(hdr_ptr, &msg);
2448761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
2548761c62SAndrew Jeffery
2648761c62SAndrew Jeffery // PLDM message pointer is NULL
2748761c62SAndrew Jeffery rc = pack_pldm_header(&hdr, nullptr);
2848761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
2948761c62SAndrew Jeffery
3048761c62SAndrew Jeffery // PLDM header information pointer and PLDM message pointer is NULL
3148761c62SAndrew Jeffery rc = pack_pldm_header(hdr_ptr, nullptr);
3248761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
3348761c62SAndrew Jeffery
3448761c62SAndrew Jeffery // RESERVED message type
3548761c62SAndrew Jeffery hdr.msg_type = PLDM_RESERVED;
3648761c62SAndrew Jeffery rc = pack_pldm_header(&hdr, &msg);
3748761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
3848761c62SAndrew Jeffery
3948761c62SAndrew Jeffery // Instance ID out of range
4048761c62SAndrew Jeffery hdr.msg_type = PLDM_REQUEST;
4148761c62SAndrew Jeffery hdr.instance = 32;
4248761c62SAndrew Jeffery rc = pack_pldm_header(&hdr, &msg);
4348761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
4448761c62SAndrew Jeffery
4548761c62SAndrew Jeffery // PLDM type out of range
4648761c62SAndrew Jeffery hdr.msg_type = PLDM_REQUEST;
4748761c62SAndrew Jeffery hdr.instance = 31;
4848761c62SAndrew Jeffery hdr.pldm_type = 64;
4948761c62SAndrew Jeffery rc = pack_pldm_header(&hdr, &msg);
5048761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_PLDM_TYPE);
5148761c62SAndrew Jeffery }
5248761c62SAndrew Jeffery
TEST(PackPLDMMessage,RequestMessageGoodPath)5348761c62SAndrew Jeffery TEST(PackPLDMMessage, RequestMessageGoodPath)
5448761c62SAndrew Jeffery {
5548761c62SAndrew Jeffery struct pldm_header_info hdr;
5648761c62SAndrew Jeffery pldm_msg_hdr msg{};
5748761c62SAndrew Jeffery
5848761c62SAndrew Jeffery // Message type is REQUEST and lower range of the field values
5948761c62SAndrew Jeffery hdr.msg_type = PLDM_REQUEST;
6048761c62SAndrew Jeffery hdr.instance = 0;
6148761c62SAndrew Jeffery hdr.pldm_type = 0;
6248761c62SAndrew Jeffery hdr.command = 0;
6348761c62SAndrew Jeffery
6448761c62SAndrew Jeffery auto rc = pack_pldm_header(&hdr, &msg);
6548761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
6648761c62SAndrew Jeffery EXPECT_EQ(msg.request, 1);
6748761c62SAndrew Jeffery EXPECT_EQ(msg.datagram, 0);
6848761c62SAndrew Jeffery EXPECT_EQ(msg.instance_id, 0);
6948761c62SAndrew Jeffery EXPECT_EQ(msg.type, 0);
7048761c62SAndrew Jeffery EXPECT_EQ(msg.command, 0);
7148761c62SAndrew Jeffery
7248761c62SAndrew Jeffery // Message type is REQUEST and upper range of the field values
7348761c62SAndrew Jeffery hdr.instance = 31;
7448761c62SAndrew Jeffery hdr.pldm_type = 63;
7548761c62SAndrew Jeffery hdr.command = 255;
7648761c62SAndrew Jeffery
7748761c62SAndrew Jeffery rc = pack_pldm_header(&hdr, &msg);
7848761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
7948761c62SAndrew Jeffery EXPECT_EQ(msg.request, 1);
8048761c62SAndrew Jeffery EXPECT_EQ(msg.datagram, 0);
8148761c62SAndrew Jeffery EXPECT_EQ(msg.instance_id, 31);
8248761c62SAndrew Jeffery EXPECT_EQ(msg.type, 63);
8348761c62SAndrew Jeffery EXPECT_EQ(msg.command, 255);
8448761c62SAndrew Jeffery
8548761c62SAndrew Jeffery // Message type is PLDM_ASYNC_REQUEST_NOTIFY
8648761c62SAndrew Jeffery hdr.msg_type = PLDM_ASYNC_REQUEST_NOTIFY;
8748761c62SAndrew Jeffery
8848761c62SAndrew Jeffery rc = pack_pldm_header(&hdr, &msg);
8948761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
9048761c62SAndrew Jeffery EXPECT_EQ(msg.request, 1);
9148761c62SAndrew Jeffery EXPECT_EQ(msg.datagram, 1);
9248761c62SAndrew Jeffery EXPECT_EQ(msg.instance_id, 31);
9348761c62SAndrew Jeffery EXPECT_EQ(msg.type, 63);
9448761c62SAndrew Jeffery EXPECT_EQ(msg.command, 255);
9548761c62SAndrew Jeffery }
9648761c62SAndrew Jeffery
TEST(PackPLDMMessage,ResponseMessageGoodPath)9748761c62SAndrew Jeffery TEST(PackPLDMMessage, ResponseMessageGoodPath)
9848761c62SAndrew Jeffery {
9948761c62SAndrew Jeffery struct pldm_header_info hdr;
10048761c62SAndrew Jeffery pldm_msg_hdr msg{};
10148761c62SAndrew Jeffery
10248761c62SAndrew Jeffery // Message type is PLDM_RESPONSE and lower range of the field values
10348761c62SAndrew Jeffery hdr.msg_type = PLDM_RESPONSE;
10448761c62SAndrew Jeffery hdr.instance = 0;
10548761c62SAndrew Jeffery hdr.pldm_type = 0;
10648761c62SAndrew Jeffery hdr.command = 0;
10748761c62SAndrew Jeffery
10848761c62SAndrew Jeffery auto rc = pack_pldm_header(&hdr, &msg);
10948761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
11048761c62SAndrew Jeffery EXPECT_EQ(msg.request, 0);
11148761c62SAndrew Jeffery EXPECT_EQ(msg.datagram, 0);
11248761c62SAndrew Jeffery EXPECT_EQ(msg.instance_id, 0);
11348761c62SAndrew Jeffery EXPECT_EQ(msg.type, 0);
11448761c62SAndrew Jeffery EXPECT_EQ(msg.command, 0);
11548761c62SAndrew Jeffery
11648761c62SAndrew Jeffery // Message type is PLDM_RESPONSE and upper range of the field values
11748761c62SAndrew Jeffery hdr.instance = 31;
11848761c62SAndrew Jeffery hdr.pldm_type = 63;
11948761c62SAndrew Jeffery hdr.command = 255;
12048761c62SAndrew Jeffery
12148761c62SAndrew Jeffery rc = pack_pldm_header(&hdr, &msg);
12248761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
12348761c62SAndrew Jeffery EXPECT_EQ(msg.request, 0);
12448761c62SAndrew Jeffery EXPECT_EQ(msg.datagram, 0);
12548761c62SAndrew Jeffery EXPECT_EQ(msg.instance_id, 31);
12648761c62SAndrew Jeffery EXPECT_EQ(msg.type, 63);
12748761c62SAndrew Jeffery EXPECT_EQ(msg.command, 255);
12848761c62SAndrew Jeffery }
12948761c62SAndrew Jeffery
TEST(UnpackPLDMMessage,BadPathTest)13048761c62SAndrew Jeffery TEST(UnpackPLDMMessage, BadPathTest)
13148761c62SAndrew Jeffery {
13248761c62SAndrew Jeffery struct pldm_header_info hdr;
13348761c62SAndrew Jeffery
13448761c62SAndrew Jeffery // PLDM message pointer is NULL
13548761c62SAndrew Jeffery auto rc = unpack_pldm_header(nullptr, &hdr);
13648761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
13748761c62SAndrew Jeffery }
13848761c62SAndrew Jeffery
TEST(UnpackPLDMMessage,RequestMessageGoodPath)13948761c62SAndrew Jeffery TEST(UnpackPLDMMessage, RequestMessageGoodPath)
14048761c62SAndrew Jeffery {
14148761c62SAndrew Jeffery struct pldm_header_info hdr;
14248761c62SAndrew Jeffery pldm_msg_hdr msg{};
14348761c62SAndrew Jeffery
14448761c62SAndrew Jeffery // Unpack PLDM request message and lower range of field values
14548761c62SAndrew Jeffery msg.request = 1;
14648761c62SAndrew Jeffery auto rc = unpack_pldm_header(&msg, &hdr);
14748761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
14848761c62SAndrew Jeffery EXPECT_EQ(hdr.msg_type, PLDM_REQUEST);
14948761c62SAndrew Jeffery EXPECT_EQ(hdr.instance, 0);
15048761c62SAndrew Jeffery EXPECT_EQ(hdr.pldm_type, 0);
15148761c62SAndrew Jeffery EXPECT_EQ(hdr.command, 0);
15248761c62SAndrew Jeffery
15348761c62SAndrew Jeffery // Unpack PLDM async request message and lower range of field values
15448761c62SAndrew Jeffery msg.datagram = 1;
15548761c62SAndrew Jeffery rc = unpack_pldm_header(&msg, &hdr);
15648761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
15748761c62SAndrew Jeffery EXPECT_EQ(hdr.msg_type, PLDM_ASYNC_REQUEST_NOTIFY);
15848761c62SAndrew Jeffery
15948761c62SAndrew Jeffery // Unpack PLDM request message and upper range of field values
16048761c62SAndrew Jeffery msg.datagram = 0;
16148761c62SAndrew Jeffery msg.instance_id = 31;
16248761c62SAndrew Jeffery msg.type = 63;
16348761c62SAndrew Jeffery msg.command = 255;
16448761c62SAndrew Jeffery rc = unpack_pldm_header(&msg, &hdr);
16548761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
16648761c62SAndrew Jeffery EXPECT_EQ(hdr.msg_type, PLDM_REQUEST);
16748761c62SAndrew Jeffery EXPECT_EQ(hdr.instance, 31);
16848761c62SAndrew Jeffery EXPECT_EQ(hdr.pldm_type, 63);
16948761c62SAndrew Jeffery EXPECT_EQ(hdr.command, 255);
17048761c62SAndrew Jeffery }
17148761c62SAndrew Jeffery
TEST(UnpackPLDMMessage,ResponseMessageGoodPath)17248761c62SAndrew Jeffery TEST(UnpackPLDMMessage, ResponseMessageGoodPath)
17348761c62SAndrew Jeffery {
17448761c62SAndrew Jeffery struct pldm_header_info hdr;
17548761c62SAndrew Jeffery pldm_msg_hdr msg{};
17648761c62SAndrew Jeffery
17748761c62SAndrew Jeffery // Unpack PLDM response message and lower range of field values
17848761c62SAndrew Jeffery auto rc = unpack_pldm_header(&msg, &hdr);
17948761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
18048761c62SAndrew Jeffery EXPECT_EQ(hdr.msg_type, PLDM_RESPONSE);
18148761c62SAndrew Jeffery EXPECT_EQ(hdr.instance, 0);
18248761c62SAndrew Jeffery EXPECT_EQ(hdr.pldm_type, 0);
18348761c62SAndrew Jeffery EXPECT_EQ(hdr.command, 0);
18448761c62SAndrew Jeffery
18548761c62SAndrew Jeffery // Unpack PLDM response message and upper range of field values
18648761c62SAndrew Jeffery msg.instance_id = 31;
18748761c62SAndrew Jeffery msg.type = 63;
18848761c62SAndrew Jeffery msg.command = 255;
18948761c62SAndrew Jeffery rc = unpack_pldm_header(&msg, &hdr);
19048761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
19148761c62SAndrew Jeffery EXPECT_EQ(hdr.msg_type, PLDM_RESPONSE);
19248761c62SAndrew Jeffery EXPECT_EQ(hdr.instance, 31);
19348761c62SAndrew Jeffery EXPECT_EQ(hdr.pldm_type, 63);
19448761c62SAndrew Jeffery EXPECT_EQ(hdr.command, 255);
19548761c62SAndrew Jeffery }
19648761c62SAndrew Jeffery
TEST(GetPLDMCommands,testEncodeRequest)19748761c62SAndrew Jeffery TEST(GetPLDMCommands, testEncodeRequest)
19848761c62SAndrew Jeffery {
19948761c62SAndrew Jeffery uint8_t pldmType = 0x05;
20048761c62SAndrew Jeffery ver32_t version{0xff, 0xff, 0xff, 0xff};
20148761c62SAndrew Jeffery std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_COMMANDS_REQ_BYTES>
20248761c62SAndrew Jeffery requestMsg{};
203*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
20448761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
20548761c62SAndrew Jeffery
20648761c62SAndrew Jeffery auto rc = encode_get_commands_req(0, pldmType, version, request);
20748761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
20848761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(request->payload, &pldmType, sizeof(pldmType)));
20948761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(request->payload + sizeof(pldmType), &version,
21048761c62SAndrew Jeffery sizeof(version)));
21148761c62SAndrew Jeffery }
21248761c62SAndrew Jeffery
TEST(GetPLDMCommands,testDecodeRequest)21348761c62SAndrew Jeffery TEST(GetPLDMCommands, testDecodeRequest)
21448761c62SAndrew Jeffery {
21548761c62SAndrew Jeffery uint8_t pldmType = 0x05;
21648761c62SAndrew Jeffery ver32_t version{0xff, 0xff, 0xff, 0xff};
21748761c62SAndrew Jeffery uint8_t pldmTypeOut{};
21848761c62SAndrew Jeffery ver32_t versionOut{0xff, 0xff, 0xff, 0xff};
21948761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_GET_COMMANDS_REQ_BYTES> requestMsg{};
22048761c62SAndrew Jeffery
22148761c62SAndrew Jeffery memcpy(requestMsg.data() + hdrSize, &pldmType, sizeof(pldmType));
22248761c62SAndrew Jeffery memcpy(requestMsg.data() + sizeof(pldmType) + hdrSize, &version,
22348761c62SAndrew Jeffery sizeof(version));
22448761c62SAndrew Jeffery
225*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
22648761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
22748761c62SAndrew Jeffery auto rc = decode_get_commands_req(request, requestMsg.size() - hdrSize,
22848761c62SAndrew Jeffery &pldmTypeOut, &versionOut);
22948761c62SAndrew Jeffery
23048761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
23148761c62SAndrew Jeffery EXPECT_EQ(pldmTypeOut, pldmType);
23248761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(&versionOut, &version, sizeof(version)));
23348761c62SAndrew Jeffery }
23448761c62SAndrew Jeffery
TEST(GetPLDMCommands,testEncodeResponse)23548761c62SAndrew Jeffery TEST(GetPLDMCommands, testEncodeResponse)
23648761c62SAndrew Jeffery {
23748761c62SAndrew Jeffery uint8_t completionCode = 0;
23848761c62SAndrew Jeffery std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_COMMANDS_RESP_BYTES>
23948761c62SAndrew Jeffery responseMsg{};
240*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
24148761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
24248761c62SAndrew Jeffery std::array<bitfield8_t, PLDM_MAX_CMDS_PER_TYPE / 8> commands{};
24348761c62SAndrew Jeffery commands[0].byte = 1;
24448761c62SAndrew Jeffery commands[1].byte = 2;
24548761c62SAndrew Jeffery commands[2].byte = 3;
24648761c62SAndrew Jeffery
24748761c62SAndrew Jeffery auto rc =
24848761c62SAndrew Jeffery encode_get_commands_resp(0, PLDM_SUCCESS, commands.data(), response);
24948761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
25048761c62SAndrew Jeffery uint8_t* payload_ptr = response->payload;
25148761c62SAndrew Jeffery EXPECT_EQ(completionCode, payload_ptr[0]);
25248761c62SAndrew Jeffery EXPECT_EQ(1, payload_ptr[sizeof(completionCode)]);
25348761c62SAndrew Jeffery EXPECT_EQ(2,
25448761c62SAndrew Jeffery payload_ptr[sizeof(completionCode) + sizeof(commands[0].byte)]);
25548761c62SAndrew Jeffery EXPECT_EQ(3, payload_ptr[sizeof(completionCode) + sizeof(commands[0].byte) +
25648761c62SAndrew Jeffery sizeof(commands[1].byte)]);
25748761c62SAndrew Jeffery }
25848761c62SAndrew Jeffery
TEST(GetPLDMTypes,testEncodeResponse)25948761c62SAndrew Jeffery TEST(GetPLDMTypes, testEncodeResponse)
26048761c62SAndrew Jeffery {
26148761c62SAndrew Jeffery uint8_t completionCode = 0;
26248761c62SAndrew Jeffery std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_TYPES_RESP_BYTES>
26348761c62SAndrew Jeffery responseMsg{};
264*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
26548761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
26648761c62SAndrew Jeffery std::array<bitfield8_t, PLDM_MAX_TYPES / 8> types{};
26748761c62SAndrew Jeffery types[0].byte = 1;
26848761c62SAndrew Jeffery types[1].byte = 2;
26948761c62SAndrew Jeffery types[2].byte = 3;
27048761c62SAndrew Jeffery
27148761c62SAndrew Jeffery auto rc = encode_get_types_resp(0, PLDM_SUCCESS, types.data(), response);
27248761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
27348761c62SAndrew Jeffery uint8_t* payload_ptr = response->payload;
27448761c62SAndrew Jeffery EXPECT_EQ(completionCode, payload_ptr[0]);
27548761c62SAndrew Jeffery EXPECT_EQ(1, payload_ptr[sizeof(completionCode)]);
27648761c62SAndrew Jeffery EXPECT_EQ(2, payload_ptr[sizeof(completionCode) + sizeof(types[0].byte)]);
27748761c62SAndrew Jeffery EXPECT_EQ(3, payload_ptr[sizeof(completionCode) + sizeof(types[0].byte) +
27848761c62SAndrew Jeffery sizeof(types[1].byte)]);
27948761c62SAndrew Jeffery }
28048761c62SAndrew Jeffery
TEST(GetPLDMTypes,testGoodDecodeResponse)28148761c62SAndrew Jeffery TEST(GetPLDMTypes, testGoodDecodeResponse)
28248761c62SAndrew Jeffery {
28348761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_GET_TYPES_RESP_BYTES> responseMsg{};
28448761c62SAndrew Jeffery responseMsg[1 + hdrSize] = 1;
28548761c62SAndrew Jeffery responseMsg[2 + hdrSize] = 2;
28648761c62SAndrew Jeffery responseMsg[3 + hdrSize] = 3;
28748761c62SAndrew Jeffery std::array<bitfield8_t, PLDM_MAX_TYPES / 8> outTypes{};
28848761c62SAndrew Jeffery
28948761c62SAndrew Jeffery uint8_t completion_code;
29048761c62SAndrew Jeffery responseMsg[hdrSize] = PLDM_SUCCESS;
29148761c62SAndrew Jeffery
292*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
29348761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
29448761c62SAndrew Jeffery
29548761c62SAndrew Jeffery auto rc = decode_get_types_resp(response, responseMsg.size() - hdrSize,
29648761c62SAndrew Jeffery &completion_code, outTypes.data());
29748761c62SAndrew Jeffery
29848761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
29948761c62SAndrew Jeffery EXPECT_EQ(completion_code, PLDM_SUCCESS);
30048761c62SAndrew Jeffery EXPECT_EQ(responseMsg[1 + hdrSize], outTypes[0].byte);
30148761c62SAndrew Jeffery EXPECT_EQ(responseMsg[2 + hdrSize], outTypes[1].byte);
30248761c62SAndrew Jeffery EXPECT_EQ(responseMsg[3 + hdrSize], outTypes[2].byte);
30348761c62SAndrew Jeffery }
30448761c62SAndrew Jeffery
TEST(GetPLDMTypes,testBadDecodeResponse)30548761c62SAndrew Jeffery TEST(GetPLDMTypes, testBadDecodeResponse)
30648761c62SAndrew Jeffery {
30748761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_GET_TYPES_RESP_BYTES> responseMsg{};
30848761c62SAndrew Jeffery responseMsg[1 + hdrSize] = 1;
30948761c62SAndrew Jeffery responseMsg[2 + hdrSize] = 2;
31048761c62SAndrew Jeffery responseMsg[3 + hdrSize] = 3;
31148761c62SAndrew Jeffery std::array<bitfield8_t, PLDM_MAX_TYPES / 8> outTypes{};
31248761c62SAndrew Jeffery
31348761c62SAndrew Jeffery uint8_t retcompletion_code = 0;
31448761c62SAndrew Jeffery responseMsg[hdrSize] = PLDM_SUCCESS;
31548761c62SAndrew Jeffery
316*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
31748761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
31848761c62SAndrew Jeffery
31948761c62SAndrew Jeffery auto rc = decode_get_types_resp(response, responseMsg.size() - hdrSize - 1,
32048761c62SAndrew Jeffery &retcompletion_code, outTypes.data());
32148761c62SAndrew Jeffery
32248761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
32348761c62SAndrew Jeffery }
32448761c62SAndrew Jeffery
TEST(GetPLDMCommands,testGoodDecodeResponse)32548761c62SAndrew Jeffery TEST(GetPLDMCommands, testGoodDecodeResponse)
32648761c62SAndrew Jeffery {
32748761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_GET_COMMANDS_RESP_BYTES> responseMsg{};
32848761c62SAndrew Jeffery responseMsg[1 + hdrSize] = 1;
32948761c62SAndrew Jeffery responseMsg[2 + hdrSize] = 2;
33048761c62SAndrew Jeffery responseMsg[3 + hdrSize] = 3;
33148761c62SAndrew Jeffery std::array<bitfield8_t, PLDM_MAX_CMDS_PER_TYPE / 8> outTypes{};
33248761c62SAndrew Jeffery
33348761c62SAndrew Jeffery uint8_t completion_code;
33448761c62SAndrew Jeffery responseMsg[hdrSize] = PLDM_SUCCESS;
33548761c62SAndrew Jeffery
336*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
33748761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
33848761c62SAndrew Jeffery
33948761c62SAndrew Jeffery auto rc = decode_get_commands_resp(response, responseMsg.size() - hdrSize,
34048761c62SAndrew Jeffery &completion_code, outTypes.data());
34148761c62SAndrew Jeffery
34248761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
34348761c62SAndrew Jeffery EXPECT_EQ(completion_code, PLDM_SUCCESS);
34448761c62SAndrew Jeffery EXPECT_EQ(responseMsg[1 + hdrSize], outTypes[0].byte);
34548761c62SAndrew Jeffery EXPECT_EQ(responseMsg[2 + hdrSize], outTypes[1].byte);
34648761c62SAndrew Jeffery EXPECT_EQ(responseMsg[3 + hdrSize], outTypes[2].byte);
34748761c62SAndrew Jeffery }
34848761c62SAndrew Jeffery
TEST(GetPLDMCommands,testBadDecodeResponse)34948761c62SAndrew Jeffery TEST(GetPLDMCommands, testBadDecodeResponse)
35048761c62SAndrew Jeffery {
35148761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_GET_COMMANDS_RESP_BYTES> responseMsg{};
35248761c62SAndrew Jeffery responseMsg[1 + hdrSize] = 1;
35348761c62SAndrew Jeffery responseMsg[2 + hdrSize] = 2;
35448761c62SAndrew Jeffery responseMsg[3 + hdrSize] = 3;
35548761c62SAndrew Jeffery std::array<bitfield8_t, PLDM_MAX_CMDS_PER_TYPE / 8> outTypes{};
35648761c62SAndrew Jeffery
35748761c62SAndrew Jeffery uint8_t retcompletion_code = 0;
35848761c62SAndrew Jeffery responseMsg[hdrSize] = PLDM_SUCCESS;
35948761c62SAndrew Jeffery
360*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
36148761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
36248761c62SAndrew Jeffery
36348761c62SAndrew Jeffery auto rc =
36448761c62SAndrew Jeffery decode_get_commands_resp(response, responseMsg.size() - hdrSize - 1,
36548761c62SAndrew Jeffery &retcompletion_code, outTypes.data());
36648761c62SAndrew Jeffery
36748761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
36848761c62SAndrew Jeffery }
36948761c62SAndrew Jeffery
TEST(GetPLDMVersion,testGoodEncodeRequest)37048761c62SAndrew Jeffery TEST(GetPLDMVersion, testGoodEncodeRequest)
37148761c62SAndrew Jeffery {
37248761c62SAndrew Jeffery std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_VERSION_REQ_BYTES>
37348761c62SAndrew Jeffery requestMsg{};
374*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
37548761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
37648761c62SAndrew Jeffery uint8_t pldmType = 0x03;
37748761c62SAndrew Jeffery uint32_t transferHandle = 0x0;
37848761c62SAndrew Jeffery uint8_t opFlag = 0x01;
37948761c62SAndrew Jeffery
38048761c62SAndrew Jeffery auto rc =
38148761c62SAndrew Jeffery encode_get_version_req(0, transferHandle, opFlag, pldmType, request);
38248761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
38348761c62SAndrew Jeffery EXPECT_EQ(
38448761c62SAndrew Jeffery 0, memcmp(request->payload, &transferHandle, sizeof(transferHandle)));
38548761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(request->payload + sizeof(transferHandle), &opFlag,
38648761c62SAndrew Jeffery sizeof(opFlag)));
38748761c62SAndrew Jeffery EXPECT_EQ(0,
38848761c62SAndrew Jeffery memcmp(request->payload + sizeof(transferHandle) + sizeof(opFlag),
38948761c62SAndrew Jeffery &pldmType, sizeof(pldmType)));
39048761c62SAndrew Jeffery }
39148761c62SAndrew Jeffery
TEST(GetPLDMVersion,testBadEncodeRequest)39248761c62SAndrew Jeffery TEST(GetPLDMVersion, testBadEncodeRequest)
39348761c62SAndrew Jeffery {
39448761c62SAndrew Jeffery uint8_t pldmType = 0x03;
39548761c62SAndrew Jeffery uint32_t transferHandle = 0x0;
39648761c62SAndrew Jeffery uint8_t opFlag = 0x01;
39748761c62SAndrew Jeffery
39848761c62SAndrew Jeffery auto rc =
39948761c62SAndrew Jeffery encode_get_version_req(0, transferHandle, opFlag, pldmType, nullptr);
40048761c62SAndrew Jeffery
40148761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
40248761c62SAndrew Jeffery }
40348761c62SAndrew Jeffery
TEST(GetPLDMVersion,testEncodeResponse)40448761c62SAndrew Jeffery TEST(GetPLDMVersion, testEncodeResponse)
40548761c62SAndrew Jeffery {
40648761c62SAndrew Jeffery uint8_t completionCode = 0;
40748761c62SAndrew Jeffery uint32_t transferHandle = 0;
40848761c62SAndrew Jeffery uint8_t flag = PLDM_START_AND_END;
40948761c62SAndrew Jeffery std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_VERSION_RESP_BYTES>
41048761c62SAndrew Jeffery responseMsg{};
411*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
41248761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
41348761c62SAndrew Jeffery ver32_t version = {0xff, 0xff, 0xff, 0xff};
41448761c62SAndrew Jeffery
41548761c62SAndrew Jeffery auto rc = encode_get_version_resp(0, PLDM_SUCCESS, 0, PLDM_START_AND_END,
41648761c62SAndrew Jeffery &version, sizeof(ver32_t), response);
41748761c62SAndrew Jeffery
41848761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
41948761c62SAndrew Jeffery EXPECT_EQ(completionCode, response->payload[0]);
42048761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]),
42148761c62SAndrew Jeffery &transferHandle, sizeof(transferHandle)));
42248761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
42348761c62SAndrew Jeffery sizeof(transferHandle),
42448761c62SAndrew Jeffery &flag, sizeof(flag)));
42548761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
42648761c62SAndrew Jeffery sizeof(transferHandle) + sizeof(flag),
42748761c62SAndrew Jeffery &version, sizeof(version)));
42848761c62SAndrew Jeffery }
42948761c62SAndrew Jeffery
TEST(GetPLDMVersion,testDecodeRequest)43048761c62SAndrew Jeffery TEST(GetPLDMVersion, testDecodeRequest)
43148761c62SAndrew Jeffery {
43248761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_GET_VERSION_REQ_BYTES> requestMsg{};
43348761c62SAndrew Jeffery uint32_t transferHandle = 0x0;
43448761c62SAndrew Jeffery uint32_t retTransferHandle = 0x0;
43548761c62SAndrew Jeffery uint8_t flag = PLDM_GET_FIRSTPART;
43648761c62SAndrew Jeffery uint8_t retFlag = PLDM_GET_FIRSTPART;
43748761c62SAndrew Jeffery uint8_t pldmType = PLDM_BASE;
43848761c62SAndrew Jeffery uint8_t retType = PLDM_BASE;
43948761c62SAndrew Jeffery
44048761c62SAndrew Jeffery memcpy(requestMsg.data() + hdrSize, &transferHandle,
44148761c62SAndrew Jeffery sizeof(transferHandle));
44248761c62SAndrew Jeffery memcpy(requestMsg.data() + sizeof(transferHandle) + hdrSize, &flag,
44348761c62SAndrew Jeffery sizeof(flag));
44448761c62SAndrew Jeffery memcpy(requestMsg.data() + sizeof(transferHandle) + sizeof(flag) + hdrSize,
44548761c62SAndrew Jeffery &pldmType, sizeof(pldmType));
44648761c62SAndrew Jeffery
447*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
44848761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
44948761c62SAndrew Jeffery
45048761c62SAndrew Jeffery auto rc = decode_get_version_req(request, requestMsg.size() - hdrSize,
45148761c62SAndrew Jeffery &retTransferHandle, &retFlag, &retType);
45248761c62SAndrew Jeffery
45348761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
45448761c62SAndrew Jeffery EXPECT_EQ(transferHandle, retTransferHandle);
45548761c62SAndrew Jeffery EXPECT_EQ(flag, retFlag);
45648761c62SAndrew Jeffery EXPECT_EQ(pldmType, retType);
45748761c62SAndrew Jeffery }
45848761c62SAndrew Jeffery
TEST(GetPLDMVersion,testDecodeResponse)45948761c62SAndrew Jeffery TEST(GetPLDMVersion, testDecodeResponse)
46048761c62SAndrew Jeffery {
46148761c62SAndrew Jeffery std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_VERSION_RESP_BYTES>
46248761c62SAndrew Jeffery responseMsg{};
46348761c62SAndrew Jeffery uint32_t transferHandle = 0x0;
46448761c62SAndrew Jeffery uint32_t retTransferHandle = 0x0;
46548761c62SAndrew Jeffery uint8_t flag = PLDM_START_AND_END;
46648761c62SAndrew Jeffery uint8_t retFlag = PLDM_START_AND_END;
46748761c62SAndrew Jeffery uint8_t completionCode = 0;
46848761c62SAndrew Jeffery ver32_t version = {0xff, 0xff, 0xff, 0xff};
46948761c62SAndrew Jeffery ver32_t versionOut;
47048761c62SAndrew Jeffery uint8_t completion_code;
47148761c62SAndrew Jeffery
47248761c62SAndrew Jeffery memcpy(responseMsg.data() + sizeof(completionCode) + hdrSize,
47348761c62SAndrew Jeffery &transferHandle, sizeof(transferHandle));
47448761c62SAndrew Jeffery memcpy(responseMsg.data() + sizeof(completionCode) +
47548761c62SAndrew Jeffery sizeof(transferHandle) + hdrSize,
47648761c62SAndrew Jeffery &flag, sizeof(flag));
47748761c62SAndrew Jeffery memcpy(responseMsg.data() + sizeof(completionCode) +
47848761c62SAndrew Jeffery sizeof(transferHandle) + sizeof(flag) + hdrSize,
47948761c62SAndrew Jeffery &version, sizeof(version));
48048761c62SAndrew Jeffery
481*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
48248761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
48348761c62SAndrew Jeffery
48448761c62SAndrew Jeffery auto rc = decode_get_version_resp(response, responseMsg.size() - hdrSize,
48548761c62SAndrew Jeffery &completion_code, &retTransferHandle,
48648761c62SAndrew Jeffery &retFlag, &versionOut);
48748761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
48848761c62SAndrew Jeffery EXPECT_EQ(transferHandle, retTransferHandle);
48948761c62SAndrew Jeffery EXPECT_EQ(flag, retFlag);
49048761c62SAndrew Jeffery
49148761c62SAndrew Jeffery EXPECT_EQ(versionOut.major, version.major);
49248761c62SAndrew Jeffery EXPECT_EQ(versionOut.minor, version.minor);
49348761c62SAndrew Jeffery EXPECT_EQ(versionOut.update, version.update);
49448761c62SAndrew Jeffery EXPECT_EQ(versionOut.alpha, version.alpha);
49548761c62SAndrew Jeffery }
49648761c62SAndrew Jeffery
TEST(GetTID,testEncodeRequest)49748761c62SAndrew Jeffery TEST(GetTID, testEncodeRequest)
49848761c62SAndrew Jeffery {
49948761c62SAndrew Jeffery pldm_msg request{};
50048761c62SAndrew Jeffery
50148761c62SAndrew Jeffery auto rc = encode_get_tid_req(0, &request);
50248761c62SAndrew Jeffery ASSERT_EQ(rc, PLDM_SUCCESS);
50348761c62SAndrew Jeffery }
50448761c62SAndrew Jeffery
TEST(GetTID,testEncodeResponse)50548761c62SAndrew Jeffery TEST(GetTID, testEncodeResponse)
50648761c62SAndrew Jeffery {
50748761c62SAndrew Jeffery uint8_t completionCode = 0;
50848761c62SAndrew Jeffery std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_TID_RESP_BYTES>
50948761c62SAndrew Jeffery responseMsg{};
510*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
51148761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
51248761c62SAndrew Jeffery uint8_t tid = 1;
51348761c62SAndrew Jeffery
51448761c62SAndrew Jeffery auto rc = encode_get_tid_resp(0, PLDM_SUCCESS, tid, response);
51548761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
51648761c62SAndrew Jeffery uint8_t* payload = response->payload;
51748761c62SAndrew Jeffery EXPECT_EQ(completionCode, payload[0]);
51848761c62SAndrew Jeffery EXPECT_EQ(1, payload[sizeof(completionCode)]);
51948761c62SAndrew Jeffery }
52048761c62SAndrew Jeffery
TEST(GetTID,testDecodeResponse)52148761c62SAndrew Jeffery TEST(GetTID, testDecodeResponse)
52248761c62SAndrew Jeffery {
52348761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_GET_TID_RESP_BYTES> responseMsg{};
52448761c62SAndrew Jeffery responseMsg[1 + hdrSize] = 1;
52548761c62SAndrew Jeffery
52648761c62SAndrew Jeffery uint8_t tid;
52748761c62SAndrew Jeffery uint8_t completion_code;
52848761c62SAndrew Jeffery responseMsg[hdrSize] = PLDM_SUCCESS;
52948761c62SAndrew Jeffery
530*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
53148761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
53248761c62SAndrew Jeffery
53348761c62SAndrew Jeffery auto rc = decode_get_tid_resp(response, responseMsg.size() - hdrSize,
53448761c62SAndrew Jeffery &completion_code, &tid);
53548761c62SAndrew Jeffery
53648761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
53748761c62SAndrew Jeffery EXPECT_EQ(completion_code, PLDM_SUCCESS);
53848761c62SAndrew Jeffery EXPECT_EQ(tid, 1);
53948761c62SAndrew Jeffery }
54048761c62SAndrew Jeffery
TEST(MultipartReceive,testDecodeRequestPass)54148761c62SAndrew Jeffery TEST(MultipartReceive, testDecodeRequestPass)
54248761c62SAndrew Jeffery {
54348761c62SAndrew Jeffery constexpr uint8_t kPldmType = PLDM_BASE;
54448761c62SAndrew Jeffery constexpr uint8_t kFlag = PLDM_XFER_FIRST_PART;
54548761c62SAndrew Jeffery constexpr uint32_t kTransferCtx = 0x01;
54648761c62SAndrew Jeffery constexpr uint32_t kTransferHandle = 0x10;
54748761c62SAndrew Jeffery constexpr uint32_t kSectionOffset = 0x0;
54848761c62SAndrew Jeffery constexpr uint32_t kSectionLength = 0x10;
54948761c62SAndrew Jeffery uint8_t pldm_type = 0x0;
55048761c62SAndrew Jeffery uint8_t flag = PLDM_GET_FIRSTPART;
55148761c62SAndrew Jeffery uint32_t transfer_ctx;
55248761c62SAndrew Jeffery uint32_t transfer_handle;
55348761c62SAndrew Jeffery uint32_t section_offset;
55448761c62SAndrew Jeffery uint32_t section_length;
55548761c62SAndrew Jeffery
55648761c62SAndrew Jeffery // Header values don't matter for this test.
55748761c62SAndrew Jeffery pldm_msg_hdr hdr{};
55848761c62SAndrew Jeffery // Assign values to the packet struct and memcpy to ensure correct byte
55948761c62SAndrew Jeffery // ordering.
56048761c62SAndrew Jeffery pldm_multipart_receive_req req_pkt = {
56148761c62SAndrew Jeffery .pldm_type = kPldmType,
56248761c62SAndrew Jeffery .transfer_opflag = kFlag,
56348761c62SAndrew Jeffery .transfer_ctx = kTransferCtx,
56448761c62SAndrew Jeffery .transfer_handle = kTransferHandle,
56548761c62SAndrew Jeffery .section_offset = kSectionOffset,
56648761c62SAndrew Jeffery .section_length = kSectionLength,
56748761c62SAndrew Jeffery };
56848761c62SAndrew Jeffery std::vector<uint8_t> req(sizeof(hdr) + PLDM_MULTIPART_RECEIVE_REQ_BYTES);
56948761c62SAndrew Jeffery std::memcpy(req.data(), &hdr, sizeof(hdr));
57048761c62SAndrew Jeffery std::memcpy(req.data() + sizeof(hdr), &req_pkt, sizeof(req_pkt));
57148761c62SAndrew Jeffery
572*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
57348761c62SAndrew Jeffery pldm_msg* pldm_request = reinterpret_cast<pldm_msg*>(req.data());
57448761c62SAndrew Jeffery int rc = decode_multipart_receive_req(
57548761c62SAndrew Jeffery pldm_request, req.size() - hdrSize, &pldm_type, &flag, &transfer_ctx,
57648761c62SAndrew Jeffery &transfer_handle, §ion_offset, §ion_length);
57748761c62SAndrew Jeffery
57848761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
57948761c62SAndrew Jeffery EXPECT_EQ(pldm_type, kPldmType);
58048761c62SAndrew Jeffery EXPECT_EQ(flag, kFlag);
58148761c62SAndrew Jeffery EXPECT_EQ(transfer_ctx, kTransferCtx);
58248761c62SAndrew Jeffery EXPECT_EQ(transfer_handle, kTransferHandle);
58348761c62SAndrew Jeffery EXPECT_EQ(section_offset, kSectionOffset);
58448761c62SAndrew Jeffery EXPECT_EQ(section_length, kSectionLength);
58548761c62SAndrew Jeffery }
58648761c62SAndrew Jeffery
TEST(MultipartReceive,testDecodeRequestFailNullData)58748761c62SAndrew Jeffery TEST(MultipartReceive, testDecodeRequestFailNullData)
58848761c62SAndrew Jeffery {
58948761c62SAndrew Jeffery EXPECT_EQ(decode_multipart_receive_req(NULL, 0, NULL, NULL, NULL, NULL,
59048761c62SAndrew Jeffery NULL, NULL),
59148761c62SAndrew Jeffery PLDM_ERROR_INVALID_DATA);
59248761c62SAndrew Jeffery }
59348761c62SAndrew Jeffery
TEST(MultipartReceive,testDecodeRequestFailBadLength)59448761c62SAndrew Jeffery TEST(MultipartReceive, testDecodeRequestFailBadLength)
59548761c62SAndrew Jeffery {
59648761c62SAndrew Jeffery constexpr uint8_t kPldmType = PLDM_BASE;
59748761c62SAndrew Jeffery constexpr uint8_t kFlag = PLDM_XFER_FIRST_PART;
59848761c62SAndrew Jeffery uint8_t pldm_type;
59948761c62SAndrew Jeffery uint8_t flag;
60048761c62SAndrew Jeffery uint32_t transfer_ctx;
60148761c62SAndrew Jeffery uint32_t transfer_handle;
60248761c62SAndrew Jeffery uint32_t section_offset;
60348761c62SAndrew Jeffery uint32_t section_length;
60448761c62SAndrew Jeffery
60548761c62SAndrew Jeffery // Header values don't matter for this test.
60648761c62SAndrew Jeffery pldm_msg_hdr hdr{};
60748761c62SAndrew Jeffery // Assign values to the packet struct and memcpy to ensure correct byte
60848761c62SAndrew Jeffery // ordering.
60948761c62SAndrew Jeffery pldm_multipart_receive_req req_pkt{};
61048761c62SAndrew Jeffery req_pkt.pldm_type = kPldmType;
61148761c62SAndrew Jeffery req_pkt.transfer_opflag = kFlag;
61248761c62SAndrew Jeffery
61348761c62SAndrew Jeffery std::vector<uint8_t> req(sizeof(hdr) + PLDM_MULTIPART_RECEIVE_REQ_BYTES);
61448761c62SAndrew Jeffery std::memcpy(req.data(), &hdr, sizeof(hdr));
61548761c62SAndrew Jeffery std::memcpy(req.data() + sizeof(hdr), &req_pkt, sizeof(req_pkt));
61648761c62SAndrew Jeffery
617*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
61848761c62SAndrew Jeffery pldm_msg* pldm_request = reinterpret_cast<pldm_msg*>(req.data());
61948761c62SAndrew Jeffery EXPECT_EQ(decode_multipart_receive_req(
62048761c62SAndrew Jeffery pldm_request, (req.size() - hdrSize) + 1, &pldm_type, &flag,
62148761c62SAndrew Jeffery &transfer_ctx, &transfer_handle, §ion_offset,
62248761c62SAndrew Jeffery §ion_length),
62348761c62SAndrew Jeffery PLDM_ERROR_INVALID_LENGTH);
62448761c62SAndrew Jeffery }
62548761c62SAndrew Jeffery
TEST(MultipartReceive,testDecodeRequestFailBadPldmType)62648761c62SAndrew Jeffery TEST(MultipartReceive, testDecodeRequestFailBadPldmType)
62748761c62SAndrew Jeffery {
62848761c62SAndrew Jeffery constexpr uint8_t kPldmType = 0xff;
62948761c62SAndrew Jeffery constexpr uint8_t kFlag = PLDM_XFER_FIRST_PART;
63048761c62SAndrew Jeffery uint8_t pldm_type;
63148761c62SAndrew Jeffery uint8_t flag;
63248761c62SAndrew Jeffery uint32_t transfer_ctx;
63348761c62SAndrew Jeffery uint32_t transfer_handle;
63448761c62SAndrew Jeffery uint32_t section_offset;
63548761c62SAndrew Jeffery uint32_t section_length;
63648761c62SAndrew Jeffery
63748761c62SAndrew Jeffery // Header values don't matter for this test.
63848761c62SAndrew Jeffery pldm_msg_hdr hdr{};
63948761c62SAndrew Jeffery // Assign values to the packet struct and memcpy to ensure correct byte
64048761c62SAndrew Jeffery // ordering.
64148761c62SAndrew Jeffery pldm_multipart_receive_req req_pkt{};
64248761c62SAndrew Jeffery req_pkt.pldm_type = kPldmType;
64348761c62SAndrew Jeffery req_pkt.transfer_opflag = kFlag;
64448761c62SAndrew Jeffery
64548761c62SAndrew Jeffery std::vector<uint8_t> req(sizeof(hdr) + PLDM_MULTIPART_RECEIVE_REQ_BYTES);
64648761c62SAndrew Jeffery std::memcpy(req.data(), &hdr, sizeof(hdr));
64748761c62SAndrew Jeffery std::memcpy(req.data() + sizeof(hdr), &req_pkt, sizeof(req_pkt));
64848761c62SAndrew Jeffery
649*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
65048761c62SAndrew Jeffery pldm_msg* pldm_request = reinterpret_cast<pldm_msg*>(req.data());
65148761c62SAndrew Jeffery EXPECT_EQ(decode_multipart_receive_req(pldm_request, req.size() - hdrSize,
65248761c62SAndrew Jeffery &pldm_type, &flag, &transfer_ctx,
65348761c62SAndrew Jeffery &transfer_handle, §ion_offset,
65448761c62SAndrew Jeffery §ion_length),
65548761c62SAndrew Jeffery PLDM_ERROR_INVALID_PLDM_TYPE);
65648761c62SAndrew Jeffery }
65748761c62SAndrew Jeffery
TEST(MultipartReceive,testDecodeRequestFailBadTransferFlag)65848761c62SAndrew Jeffery TEST(MultipartReceive, testDecodeRequestFailBadTransferFlag)
65948761c62SAndrew Jeffery {
66048761c62SAndrew Jeffery constexpr uint8_t kPldmType = PLDM_BASE;
66148761c62SAndrew Jeffery constexpr uint8_t kFlag = PLDM_XFER_CURRENT_PART + 0x10;
66248761c62SAndrew Jeffery uint8_t pldm_type;
66348761c62SAndrew Jeffery uint8_t flag;
66448761c62SAndrew Jeffery uint32_t transfer_ctx;
66548761c62SAndrew Jeffery uint32_t transfer_handle;
66648761c62SAndrew Jeffery uint32_t section_offset;
66748761c62SAndrew Jeffery uint32_t section_length;
66848761c62SAndrew Jeffery
66948761c62SAndrew Jeffery // Header values don't matter for this test.
67048761c62SAndrew Jeffery pldm_msg_hdr hdr{};
67148761c62SAndrew Jeffery // Assign values to the packet struct and memcpy to ensure correct byte
67248761c62SAndrew Jeffery // ordering.
67348761c62SAndrew Jeffery pldm_multipart_receive_req req_pkt{};
67448761c62SAndrew Jeffery req_pkt.pldm_type = kPldmType;
67548761c62SAndrew Jeffery req_pkt.transfer_opflag = kFlag;
67648761c62SAndrew Jeffery
67748761c62SAndrew Jeffery std::vector<uint8_t> req(sizeof(hdr) + PLDM_MULTIPART_RECEIVE_REQ_BYTES);
67848761c62SAndrew Jeffery std::memcpy(req.data(), &hdr, sizeof(hdr));
67948761c62SAndrew Jeffery std::memcpy(req.data() + sizeof(hdr), &req_pkt, sizeof(req_pkt));
68048761c62SAndrew Jeffery
681*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
68248761c62SAndrew Jeffery pldm_msg* pldm_request = reinterpret_cast<pldm_msg*>(req.data());
68348761c62SAndrew Jeffery EXPECT_EQ(decode_multipart_receive_req(pldm_request, req.size() - hdrSize,
68448761c62SAndrew Jeffery &pldm_type, &flag, &transfer_ctx,
68548761c62SAndrew Jeffery &transfer_handle, §ion_offset,
68648761c62SAndrew Jeffery §ion_length),
68748761c62SAndrew Jeffery PLDM_INVALID_TRANSFER_OPERATION_FLAG);
68848761c62SAndrew Jeffery }
68948761c62SAndrew Jeffery
TEST(MultipartReceive,testDecodeRequestFailBadOffset)69048761c62SAndrew Jeffery TEST(MultipartReceive, testDecodeRequestFailBadOffset)
69148761c62SAndrew Jeffery {
69248761c62SAndrew Jeffery constexpr uint8_t kPldmType = PLDM_BASE;
69348761c62SAndrew Jeffery constexpr uint8_t kFlag = PLDM_XFER_NEXT_PART;
69448761c62SAndrew Jeffery constexpr uint32_t kTransferHandle = 0x01;
69548761c62SAndrew Jeffery constexpr uint32_t kSectionOffset = 0x0;
69648761c62SAndrew Jeffery uint8_t pldm_type;
69748761c62SAndrew Jeffery uint8_t flag;
69848761c62SAndrew Jeffery uint32_t transfer_ctx;
69948761c62SAndrew Jeffery uint32_t transfer_handle;
70048761c62SAndrew Jeffery uint32_t section_offset;
70148761c62SAndrew Jeffery uint32_t section_length;
70248761c62SAndrew Jeffery
70348761c62SAndrew Jeffery // Header values don't matter for this test.
70448761c62SAndrew Jeffery pldm_msg_hdr hdr{};
70548761c62SAndrew Jeffery // Assign values to the packet struct and memcpy to ensure correct byte
70648761c62SAndrew Jeffery // ordering.
70748761c62SAndrew Jeffery pldm_multipart_receive_req req_pkt{};
70848761c62SAndrew Jeffery req_pkt.pldm_type = kPldmType;
70948761c62SAndrew Jeffery req_pkt.transfer_opflag = kFlag;
71048761c62SAndrew Jeffery req_pkt.transfer_handle = kTransferHandle;
71148761c62SAndrew Jeffery req_pkt.section_offset = kSectionOffset;
71248761c62SAndrew Jeffery
71348761c62SAndrew Jeffery std::vector<uint8_t> req(sizeof(hdr) + PLDM_MULTIPART_RECEIVE_REQ_BYTES);
71448761c62SAndrew Jeffery std::memcpy(req.data(), &hdr, sizeof(hdr));
71548761c62SAndrew Jeffery std::memcpy(req.data() + sizeof(hdr), &req_pkt, sizeof(req_pkt));
71648761c62SAndrew Jeffery
717*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
71848761c62SAndrew Jeffery pldm_msg* pldm_request = reinterpret_cast<pldm_msg*>(req.data());
71948761c62SAndrew Jeffery EXPECT_EQ(decode_multipart_receive_req(pldm_request, req.size() - hdrSize,
72048761c62SAndrew Jeffery &pldm_type, &flag, &transfer_ctx,
72148761c62SAndrew Jeffery &transfer_handle, §ion_offset,
72248761c62SAndrew Jeffery §ion_length),
72348761c62SAndrew Jeffery PLDM_ERROR_INVALID_DATA);
72448761c62SAndrew Jeffery }
72548761c62SAndrew Jeffery
TEST(MultipartReceive,testDecodeRequestFailBadHandle)72648761c62SAndrew Jeffery TEST(MultipartReceive, testDecodeRequestFailBadHandle)
72748761c62SAndrew Jeffery {
72848761c62SAndrew Jeffery constexpr uint8_t kPldmType = PLDM_BASE;
72948761c62SAndrew Jeffery constexpr uint8_t kFlag = PLDM_XFER_NEXT_PART;
73048761c62SAndrew Jeffery constexpr uint32_t kSectionOffset = 0x100;
73148761c62SAndrew Jeffery constexpr uint32_t kTransferHandle = 0x0;
73248761c62SAndrew Jeffery uint8_t pldm_type;
73348761c62SAndrew Jeffery uint8_t flag;
73448761c62SAndrew Jeffery uint32_t transfer_ctx;
73548761c62SAndrew Jeffery uint32_t transfer_handle;
73648761c62SAndrew Jeffery uint32_t section_offset;
73748761c62SAndrew Jeffery uint32_t section_length;
73848761c62SAndrew Jeffery
73948761c62SAndrew Jeffery // Header values don't matter for this test.
74048761c62SAndrew Jeffery pldm_msg_hdr hdr{};
74148761c62SAndrew Jeffery // Assign values to the packet struct and memcpy to ensure correct byte
74248761c62SAndrew Jeffery // ordering.
74348761c62SAndrew Jeffery pldm_multipart_receive_req req_pkt{};
74448761c62SAndrew Jeffery req_pkt.pldm_type = kPldmType;
74548761c62SAndrew Jeffery req_pkt.transfer_opflag = kFlag;
74648761c62SAndrew Jeffery req_pkt.transfer_handle = kTransferHandle;
74748761c62SAndrew Jeffery req_pkt.section_offset = kSectionOffset;
74848761c62SAndrew Jeffery
74948761c62SAndrew Jeffery std::vector<uint8_t> req(sizeof(hdr) + PLDM_MULTIPART_RECEIVE_REQ_BYTES);
75048761c62SAndrew Jeffery std::memcpy(req.data(), &hdr, sizeof(hdr));
75148761c62SAndrew Jeffery std::memcpy(req.data() + sizeof(hdr), &req_pkt, sizeof(req_pkt));
75248761c62SAndrew Jeffery
753*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
75448761c62SAndrew Jeffery pldm_msg* pldm_request = reinterpret_cast<pldm_msg*>(req.data());
75548761c62SAndrew Jeffery EXPECT_EQ(decode_multipart_receive_req(pldm_request, req.size() - hdrSize,
75648761c62SAndrew Jeffery &pldm_type, &flag, &transfer_ctx,
75748761c62SAndrew Jeffery &transfer_handle, §ion_offset,
75848761c62SAndrew Jeffery §ion_length),
75948761c62SAndrew Jeffery PLDM_ERROR_INVALID_DATA);
76048761c62SAndrew Jeffery }
76148761c62SAndrew Jeffery
TEST(CcOnlyResponse,testEncode)76248761c62SAndrew Jeffery TEST(CcOnlyResponse, testEncode)
76348761c62SAndrew Jeffery {
76448761c62SAndrew Jeffery struct pldm_msg responseMsg;
76548761c62SAndrew Jeffery
76648761c62SAndrew Jeffery auto rc =
76748761c62SAndrew Jeffery encode_cc_only_resp(0 /*instance id*/, 1 /*pldm type*/, 2 /*command*/,
7689e3a5d45SManojkiran Eda 3 /*completion code*/, &responseMsg);
76948761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
77048761c62SAndrew Jeffery
771*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
77248761c62SAndrew Jeffery auto p = reinterpret_cast<uint8_t*>(&responseMsg);
77348761c62SAndrew Jeffery EXPECT_THAT(std::vector<uint8_t>(p, p + sizeof(responseMsg)),
77448761c62SAndrew Jeffery ElementsAreArray({0, 1, 2, 3}));
77548761c62SAndrew Jeffery
77648761c62SAndrew Jeffery rc = encode_cc_only_resp(PLDM_INSTANCE_MAX + 1, 1, 2, 3, &responseMsg);
77748761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
77848761c62SAndrew Jeffery
77948761c62SAndrew Jeffery rc = encode_cc_only_resp(0, 1, 2, 3, nullptr);
78048761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
78148761c62SAndrew Jeffery }
78248761c62SAndrew Jeffery
TEST(SetTID,testGoodEncodeRequest)78348761c62SAndrew Jeffery TEST(SetTID, testGoodEncodeRequest)
78448761c62SAndrew Jeffery {
78548761c62SAndrew Jeffery uint8_t instanceId = 0;
78648761c62SAndrew Jeffery uint8_t tid = 0x01;
78748761c62SAndrew Jeffery std::array<uint8_t, sizeof(pldm_msg_hdr) + sizeof(tid)> requestMsg{};
788*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
78948761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
79048761c62SAndrew Jeffery
79148761c62SAndrew Jeffery auto rc = encode_set_tid_req(instanceId, tid, request);
79248761c62SAndrew Jeffery ASSERT_EQ(rc, PLDM_SUCCESS);
79348761c62SAndrew Jeffery
79448761c62SAndrew Jeffery EXPECT_EQ(request->hdr.command, PLDM_SET_TID);
79548761c62SAndrew Jeffery EXPECT_EQ(request->hdr.type, PLDM_BASE);
79648761c62SAndrew Jeffery EXPECT_EQ(request->hdr.request, 1);
79748761c62SAndrew Jeffery EXPECT_EQ(request->hdr.datagram, 0);
79848761c62SAndrew Jeffery EXPECT_EQ(request->hdr.instance_id, instanceId);
79948761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(request->payload, &tid, sizeof(tid)));
80048761c62SAndrew Jeffery }
80148761c62SAndrew Jeffery
TEST(SetTID,testBadEncodeRequest)80248761c62SAndrew Jeffery TEST(SetTID, testBadEncodeRequest)
80348761c62SAndrew Jeffery {
80448761c62SAndrew Jeffery uint8_t tid = 0x01;
80548761c62SAndrew Jeffery std::array<uint8_t, sizeof(pldm_msg_hdr) + sizeof(tid)> requestMsg{};
806*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
80748761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
80848761c62SAndrew Jeffery
80948761c62SAndrew Jeffery auto rc = encode_set_tid_req(0, tid, nullptr);
81048761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
81148761c62SAndrew Jeffery
81248761c62SAndrew Jeffery rc = encode_set_tid_req(0, 0, request);
81348761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
81448761c62SAndrew Jeffery
81548761c62SAndrew Jeffery rc = encode_set_tid_req(0, 0xff, request);
81648761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
81748761c62SAndrew Jeffery }
81848761c62SAndrew Jeffery
81948761c62SAndrew Jeffery #ifdef LIBPLDM_API_TESTING
TEST(PldmMsgHdr,correlateSuccess)82048761c62SAndrew Jeffery TEST(PldmMsgHdr, correlateSuccess)
82148761c62SAndrew Jeffery {
82248761c62SAndrew Jeffery static const struct pldm_msg_hdr req = {
82348761c62SAndrew Jeffery .instance_id = 0,
82448761c62SAndrew Jeffery .reserved = 0,
82548761c62SAndrew Jeffery .datagram = 0,
82648761c62SAndrew Jeffery .request = 1,
82748761c62SAndrew Jeffery .type = 0,
82848761c62SAndrew Jeffery .header_ver = 1,
82948761c62SAndrew Jeffery .command = 0x01,
83048761c62SAndrew Jeffery };
83148761c62SAndrew Jeffery static const struct pldm_msg_hdr resp = {
83248761c62SAndrew Jeffery .instance_id = 0,
83348761c62SAndrew Jeffery .reserved = 0,
83448761c62SAndrew Jeffery .datagram = 0,
83548761c62SAndrew Jeffery .request = 0,
83648761c62SAndrew Jeffery .type = 0,
83748761c62SAndrew Jeffery .header_ver = 1,
83848761c62SAndrew Jeffery .command = 0x01,
83948761c62SAndrew Jeffery };
84048761c62SAndrew Jeffery
84148761c62SAndrew Jeffery ASSERT_EQ(pldm_msg_hdr_correlate_response(&req, &resp), true);
84248761c62SAndrew Jeffery }
84348761c62SAndrew Jeffery #endif
84448761c62SAndrew Jeffery
84548761c62SAndrew Jeffery #ifdef LIBPLDM_API_TESTING
TEST(PldmMsgHdr,correlateFailInstanceID)84648761c62SAndrew Jeffery TEST(PldmMsgHdr, correlateFailInstanceID)
84748761c62SAndrew Jeffery {
84848761c62SAndrew Jeffery static const struct pldm_msg_hdr req = {
84948761c62SAndrew Jeffery .instance_id = 0,
85048761c62SAndrew Jeffery .reserved = 0,
85148761c62SAndrew Jeffery .datagram = 0,
85248761c62SAndrew Jeffery .request = 1,
85348761c62SAndrew Jeffery .type = 0,
85448761c62SAndrew Jeffery .header_ver = 1,
85548761c62SAndrew Jeffery .command = 0x01,
85648761c62SAndrew Jeffery };
85748761c62SAndrew Jeffery static const struct pldm_msg_hdr resp = {
85848761c62SAndrew Jeffery .instance_id = 1,
85948761c62SAndrew Jeffery .reserved = 0,
86048761c62SAndrew Jeffery .datagram = 0,
86148761c62SAndrew Jeffery .request = 0,
86248761c62SAndrew Jeffery .type = 0,
86348761c62SAndrew Jeffery .header_ver = 1,
86448761c62SAndrew Jeffery .command = 0x01,
86548761c62SAndrew Jeffery };
86648761c62SAndrew Jeffery
86748761c62SAndrew Jeffery ASSERT_EQ(pldm_msg_hdr_correlate_response(&req, &resp), false);
86848761c62SAndrew Jeffery }
86948761c62SAndrew Jeffery #endif
87048761c62SAndrew Jeffery
87148761c62SAndrew Jeffery #ifdef LIBPLDM_API_TESTING
TEST(PldmMsgHdr,correlateFailRequest)87248761c62SAndrew Jeffery TEST(PldmMsgHdr, correlateFailRequest)
87348761c62SAndrew Jeffery {
87448761c62SAndrew Jeffery static const struct pldm_msg_hdr req = {
87548761c62SAndrew Jeffery .instance_id = 0,
87648761c62SAndrew Jeffery .reserved = 0,
87748761c62SAndrew Jeffery .datagram = 0,
87848761c62SAndrew Jeffery .request = 1,
87948761c62SAndrew Jeffery .type = 0,
88048761c62SAndrew Jeffery .header_ver = 1,
88148761c62SAndrew Jeffery .command = 0x01,
88248761c62SAndrew Jeffery };
88348761c62SAndrew Jeffery static const struct pldm_msg_hdr resp = {
88448761c62SAndrew Jeffery .instance_id = 0,
88548761c62SAndrew Jeffery .reserved = 0,
88648761c62SAndrew Jeffery .datagram = 0,
88748761c62SAndrew Jeffery .request = 1,
88848761c62SAndrew Jeffery .type = 0,
88948761c62SAndrew Jeffery .header_ver = 1,
89048761c62SAndrew Jeffery .command = 0x01,
89148761c62SAndrew Jeffery };
89248761c62SAndrew Jeffery
89348761c62SAndrew Jeffery ASSERT_EQ(pldm_msg_hdr_correlate_response(&req, &resp), false);
89448761c62SAndrew Jeffery }
89548761c62SAndrew Jeffery #endif
89648761c62SAndrew Jeffery
89748761c62SAndrew Jeffery #ifdef LIBPLDM_API_TESTING
TEST(PldmMsgHdr,correlateFailType)89848761c62SAndrew Jeffery TEST(PldmMsgHdr, correlateFailType)
89948761c62SAndrew Jeffery {
90048761c62SAndrew Jeffery static const struct pldm_msg_hdr req = {
90148761c62SAndrew Jeffery .instance_id = 0,
90248761c62SAndrew Jeffery .reserved = 0,
90348761c62SAndrew Jeffery .datagram = 0,
90448761c62SAndrew Jeffery .request = 1,
90548761c62SAndrew Jeffery .type = 0,
90648761c62SAndrew Jeffery .header_ver = 1,
90748761c62SAndrew Jeffery .command = 0x01,
90848761c62SAndrew Jeffery };
90948761c62SAndrew Jeffery static const struct pldm_msg_hdr resp = {
91048761c62SAndrew Jeffery .instance_id = 0,
91148761c62SAndrew Jeffery .reserved = 0,
91248761c62SAndrew Jeffery .datagram = 0,
91348761c62SAndrew Jeffery .request = 0,
91448761c62SAndrew Jeffery .type = 1,
91548761c62SAndrew Jeffery .header_ver = 1,
91648761c62SAndrew Jeffery .command = 0x01,
91748761c62SAndrew Jeffery };
91848761c62SAndrew Jeffery
91948761c62SAndrew Jeffery ASSERT_EQ(pldm_msg_hdr_correlate_response(&req, &resp), false);
92048761c62SAndrew Jeffery }
92148761c62SAndrew Jeffery #endif
92248761c62SAndrew Jeffery
92348761c62SAndrew Jeffery #ifdef LIBPLDM_API_TESTING
TEST(PldmMsgHdr,correlateFailCommand)92448761c62SAndrew Jeffery TEST(PldmMsgHdr, correlateFailCommand)
92548761c62SAndrew Jeffery {
92648761c62SAndrew Jeffery static const struct pldm_msg_hdr req = {
92748761c62SAndrew Jeffery .instance_id = 0,
92848761c62SAndrew Jeffery .reserved = 0,
92948761c62SAndrew Jeffery .datagram = 0,
93048761c62SAndrew Jeffery .request = 1,
93148761c62SAndrew Jeffery .type = 0,
93248761c62SAndrew Jeffery .header_ver = 1,
93348761c62SAndrew Jeffery .command = 0x01,
93448761c62SAndrew Jeffery };
93548761c62SAndrew Jeffery static const struct pldm_msg_hdr resp = {
93648761c62SAndrew Jeffery .instance_id = 0,
93748761c62SAndrew Jeffery .reserved = 0,
93848761c62SAndrew Jeffery .datagram = 0,
93948761c62SAndrew Jeffery .request = 0,
94048761c62SAndrew Jeffery .type = 0,
94148761c62SAndrew Jeffery .header_ver = 1,
94248761c62SAndrew Jeffery .command = 0x02,
94348761c62SAndrew Jeffery };
94448761c62SAndrew Jeffery
94548761c62SAndrew Jeffery ASSERT_EQ(pldm_msg_hdr_correlate_response(&req, &resp), false);
94648761c62SAndrew Jeffery }
94748761c62SAndrew Jeffery #endif
94848761c62SAndrew Jeffery
94948761c62SAndrew Jeffery #ifdef LIBPLDM_API_TESTING
TEST(PldmMsgHdr,correlateFailRequestIsResponse)95048761c62SAndrew Jeffery TEST(PldmMsgHdr, correlateFailRequestIsResponse)
95148761c62SAndrew Jeffery {
95248761c62SAndrew Jeffery static const struct pldm_msg_hdr req = {
95348761c62SAndrew Jeffery .instance_id = 0,
95448761c62SAndrew Jeffery .reserved = 0,
95548761c62SAndrew Jeffery .datagram = 0,
95648761c62SAndrew Jeffery .request = 0,
95748761c62SAndrew Jeffery .type = 0,
95848761c62SAndrew Jeffery .header_ver = 1,
95948761c62SAndrew Jeffery .command = 0x01,
96048761c62SAndrew Jeffery };
96148761c62SAndrew Jeffery static const struct pldm_msg_hdr resp = {
96248761c62SAndrew Jeffery .instance_id = 0,
96348761c62SAndrew Jeffery .reserved = 0,
96448761c62SAndrew Jeffery .datagram = 0,
96548761c62SAndrew Jeffery .request = 0,
96648761c62SAndrew Jeffery .type = 0,
96748761c62SAndrew Jeffery .header_ver = 1,
96848761c62SAndrew Jeffery .command = 0x02,
96948761c62SAndrew Jeffery };
97048761c62SAndrew Jeffery
97148761c62SAndrew Jeffery ASSERT_EQ(pldm_msg_hdr_correlate_response(&req, &resp), false);
97248761c62SAndrew Jeffery }
97348761c62SAndrew Jeffery #endif
974