148761c62SAndrew Jeffery #include <endian.h>
248761c62SAndrew Jeffery #include <libpldm/base.h>
348761c62SAndrew Jeffery #include <libpldm/bios.h>
448761c62SAndrew Jeffery #include <libpldm/utils.h>
548761c62SAndrew Jeffery
648761c62SAndrew Jeffery #include <array>
748761c62SAndrew Jeffery #include <cstdint>
848761c62SAndrew Jeffery #include <cstring>
948761c62SAndrew Jeffery #include <memory>
1048761c62SAndrew Jeffery
1148761c62SAndrew Jeffery #include <gtest/gtest.h>
1248761c62SAndrew Jeffery
1348761c62SAndrew Jeffery constexpr auto hdrSize = sizeof(pldm_msg_hdr);
1448761c62SAndrew Jeffery
TEST(GetDateTime,testEncodeRequest)1548761c62SAndrew Jeffery TEST(GetDateTime, testEncodeRequest)
1648761c62SAndrew Jeffery {
1748761c62SAndrew Jeffery pldm_msg request{};
1848761c62SAndrew Jeffery
1948761c62SAndrew Jeffery auto rc = encode_get_date_time_req(0, &request);
2048761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
2148761c62SAndrew Jeffery }
2248761c62SAndrew Jeffery
TEST(GetDateTime,testEncodeResponse)2348761c62SAndrew Jeffery TEST(GetDateTime, testEncodeResponse)
2448761c62SAndrew Jeffery {
2548761c62SAndrew Jeffery uint8_t completionCode = 0;
2648761c62SAndrew Jeffery uint8_t seconds = 50;
2748761c62SAndrew Jeffery uint8_t minutes = 20;
2848761c62SAndrew Jeffery uint8_t hours = 5;
2948761c62SAndrew Jeffery uint8_t day = 23;
3048761c62SAndrew Jeffery uint8_t month = 11;
3148761c62SAndrew Jeffery uint16_t year = 2019;
3248761c62SAndrew Jeffery
3348761c62SAndrew Jeffery std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_DATE_TIME_RESP_BYTES>
3448761c62SAndrew Jeffery responseMsg{};
3548761c62SAndrew Jeffery
36*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
3748761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
3848761c62SAndrew Jeffery
3948761c62SAndrew Jeffery auto rc = encode_get_date_time_resp(0, PLDM_SUCCESS, seconds, minutes,
4048761c62SAndrew Jeffery hours, day, month, year, response);
4148761c62SAndrew Jeffery
4248761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
4348761c62SAndrew Jeffery EXPECT_EQ(completionCode, response->payload[0]);
4448761c62SAndrew Jeffery
4548761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]),
4648761c62SAndrew Jeffery &seconds, sizeof(seconds)));
4748761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
4848761c62SAndrew Jeffery sizeof(seconds),
4948761c62SAndrew Jeffery &minutes, sizeof(minutes)));
5048761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
5148761c62SAndrew Jeffery sizeof(seconds) + sizeof(minutes),
5248761c62SAndrew Jeffery &hours, sizeof(hours)));
5348761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
5448761c62SAndrew Jeffery sizeof(seconds) + sizeof(minutes) + sizeof(hours),
5548761c62SAndrew Jeffery &day, sizeof(day)));
5648761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
5748761c62SAndrew Jeffery sizeof(seconds) + sizeof(minutes) + sizeof(hours) +
5848761c62SAndrew Jeffery sizeof(day),
5948761c62SAndrew Jeffery &month, sizeof(month)));
6048761c62SAndrew Jeffery uint16_t yearLe = htole16(year);
6148761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(response->payload + sizeof(response->payload[0]) +
6248761c62SAndrew Jeffery sizeof(seconds) + sizeof(minutes) + sizeof(hours) +
6348761c62SAndrew Jeffery sizeof(day) + sizeof(month),
6448761c62SAndrew Jeffery &yearLe, sizeof(yearLe)));
6548761c62SAndrew Jeffery }
6648761c62SAndrew Jeffery
TEST(GetDateTime,testDecodeResponse)6748761c62SAndrew Jeffery TEST(GetDateTime, testDecodeResponse)
6848761c62SAndrew Jeffery {
6948761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_GET_DATE_TIME_RESP_BYTES> responseMsg{};
7048761c62SAndrew Jeffery
7148761c62SAndrew Jeffery uint8_t completionCode = 0;
7248761c62SAndrew Jeffery
7348761c62SAndrew Jeffery uint8_t seconds = 55;
7448761c62SAndrew Jeffery uint8_t minutes = 2;
7548761c62SAndrew Jeffery uint8_t hours = 8;
7648761c62SAndrew Jeffery uint8_t day = 9;
7748761c62SAndrew Jeffery uint8_t month = 7;
7848761c62SAndrew Jeffery uint16_t year = 2020;
7948761c62SAndrew Jeffery uint16_t yearLe = htole16(year);
8048761c62SAndrew Jeffery
8148761c62SAndrew Jeffery uint8_t retSeconds = 0;
8248761c62SAndrew Jeffery uint8_t retMinutes = 0;
8348761c62SAndrew Jeffery uint8_t retHours = 0;
8448761c62SAndrew Jeffery uint8_t retDay = 0;
8548761c62SAndrew Jeffery uint8_t retMonth = 0;
8648761c62SAndrew Jeffery uint16_t retYear = 0;
8748761c62SAndrew Jeffery
8848761c62SAndrew Jeffery memcpy(responseMsg.data() + sizeof(completionCode) + hdrSize, &seconds,
8948761c62SAndrew Jeffery sizeof(seconds));
9048761c62SAndrew Jeffery memcpy(responseMsg.data() + sizeof(completionCode) + sizeof(seconds) +
9148761c62SAndrew Jeffery hdrSize,
9248761c62SAndrew Jeffery &minutes, sizeof(minutes));
9348761c62SAndrew Jeffery memcpy(responseMsg.data() + sizeof(completionCode) + sizeof(seconds) +
9448761c62SAndrew Jeffery sizeof(minutes) + hdrSize,
9548761c62SAndrew Jeffery &hours, sizeof(hours));
9648761c62SAndrew Jeffery memcpy(responseMsg.data() + sizeof(completionCode) + sizeof(seconds) +
9748761c62SAndrew Jeffery sizeof(minutes) + sizeof(hours) + hdrSize,
9848761c62SAndrew Jeffery &day, sizeof(day));
9948761c62SAndrew Jeffery memcpy(responseMsg.data() + sizeof(completionCode) + sizeof(seconds) +
10048761c62SAndrew Jeffery sizeof(minutes) + sizeof(hours) + sizeof(day) + hdrSize,
10148761c62SAndrew Jeffery &month, sizeof(month));
10248761c62SAndrew Jeffery memcpy(responseMsg.data() + sizeof(completionCode) + sizeof(seconds) +
10348761c62SAndrew Jeffery sizeof(minutes) + sizeof(hours) + sizeof(day) + sizeof(month) +
10448761c62SAndrew Jeffery hdrSize,
10548761c62SAndrew Jeffery &yearLe, sizeof(yearLe));
10648761c62SAndrew Jeffery
107*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
10848761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
10948761c62SAndrew Jeffery
11048761c62SAndrew Jeffery auto rc = decode_get_date_time_resp(
11148761c62SAndrew Jeffery response, responseMsg.size() - hdrSize, &completionCode, &retSeconds,
11248761c62SAndrew Jeffery &retMinutes, &retHours, &retDay, &retMonth, &retYear);
11348761c62SAndrew Jeffery
11448761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
11548761c62SAndrew Jeffery EXPECT_EQ(seconds, retSeconds);
11648761c62SAndrew Jeffery EXPECT_EQ(minutes, retMinutes);
11748761c62SAndrew Jeffery EXPECT_EQ(hours, retHours);
11848761c62SAndrew Jeffery EXPECT_EQ(day, retDay);
11948761c62SAndrew Jeffery EXPECT_EQ(month, retMonth);
12048761c62SAndrew Jeffery EXPECT_EQ(year, retYear);
12148761c62SAndrew Jeffery }
12248761c62SAndrew Jeffery
TEST(SetDateTime,testGoodEncodeResponse)12348761c62SAndrew Jeffery TEST(SetDateTime, testGoodEncodeResponse)
12448761c62SAndrew Jeffery {
12548761c62SAndrew Jeffery uint8_t instanceId = 0;
12648761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
12748761c62SAndrew Jeffery
12848761c62SAndrew Jeffery std::array<uint8_t, hdrSize + sizeof(struct pldm_only_cc_resp)>
12948761c62SAndrew Jeffery responseMsg{};
13048761c62SAndrew Jeffery struct pldm_msg* response =
131*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
13248761c62SAndrew Jeffery reinterpret_cast<struct pldm_msg*>(responseMsg.data());
13348761c62SAndrew Jeffery
13448761c62SAndrew Jeffery auto rc = encode_set_date_time_resp(instanceId, completionCode, response,
13548761c62SAndrew Jeffery responseMsg.size() - hdrSize);
13648761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
13748761c62SAndrew Jeffery
13848761c62SAndrew Jeffery struct pldm_only_cc_resp* resp =
139*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
14048761c62SAndrew Jeffery reinterpret_cast<struct pldm_only_cc_resp*>(response->payload);
14148761c62SAndrew Jeffery EXPECT_EQ(completionCode, resp->completion_code);
14248761c62SAndrew Jeffery }
14348761c62SAndrew Jeffery
TEST(SetDateTime,testBadEncodeResponse)14448761c62SAndrew Jeffery TEST(SetDateTime, testBadEncodeResponse)
14548761c62SAndrew Jeffery {
14648761c62SAndrew Jeffery
14748761c62SAndrew Jeffery uint8_t instanceId = 10;
14848761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
14948761c62SAndrew Jeffery std::array<uint8_t, hdrSize + sizeof(struct pldm_only_cc_resp)>
15048761c62SAndrew Jeffery responseMsg{};
15148761c62SAndrew Jeffery struct pldm_msg* response =
152*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
15348761c62SAndrew Jeffery reinterpret_cast<struct pldm_msg*>(responseMsg.data());
15448761c62SAndrew Jeffery auto rc = encode_set_date_time_resp(instanceId, completionCode, nullptr,
15548761c62SAndrew Jeffery responseMsg.size() - hdrSize);
15648761c62SAndrew Jeffery
15748761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
15848761c62SAndrew Jeffery rc = encode_set_date_time_resp(instanceId, completionCode, response,
15948761c62SAndrew Jeffery responseMsg.size() - hdrSize - 1);
16048761c62SAndrew Jeffery
16148761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
16248761c62SAndrew Jeffery }
16348761c62SAndrew Jeffery
TEST(SetDateTime,testGoodDecodeResponse)16448761c62SAndrew Jeffery TEST(SetDateTime, testGoodDecodeResponse)
16548761c62SAndrew Jeffery {
16648761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
16748761c62SAndrew Jeffery std::array<uint8_t, hdrSize + sizeof(struct pldm_only_cc_resp)>
16848761c62SAndrew Jeffery responseMsg{};
16948761c62SAndrew Jeffery struct pldm_msg* response =
170*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
17148761c62SAndrew Jeffery reinterpret_cast<struct pldm_msg*>(responseMsg.data());
17248761c62SAndrew Jeffery struct pldm_only_cc_resp* resp =
173*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
17448761c62SAndrew Jeffery reinterpret_cast<struct pldm_only_cc_resp*>(response->payload);
17548761c62SAndrew Jeffery
17648761c62SAndrew Jeffery resp->completion_code = completionCode;
17748761c62SAndrew Jeffery
17848761c62SAndrew Jeffery uint8_t retCompletionCode;
17948761c62SAndrew Jeffery auto rc = decode_set_date_time_resp(response, responseMsg.size() - hdrSize,
18048761c62SAndrew Jeffery &retCompletionCode);
18148761c62SAndrew Jeffery
18248761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
18348761c62SAndrew Jeffery EXPECT_EQ(completionCode, retCompletionCode);
18448761c62SAndrew Jeffery }
18548761c62SAndrew Jeffery
TEST(SetDateTime,testBadDecodeResponse)18648761c62SAndrew Jeffery TEST(SetDateTime, testBadDecodeResponse)
18748761c62SAndrew Jeffery {
18848761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
18948761c62SAndrew Jeffery
19048761c62SAndrew Jeffery std::array<uint8_t, hdrSize + sizeof(struct pldm_only_cc_resp)>
19148761c62SAndrew Jeffery responseMsg{};
19248761c62SAndrew Jeffery struct pldm_msg* response =
193*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
19448761c62SAndrew Jeffery reinterpret_cast<struct pldm_msg*>(responseMsg.data());
19548761c62SAndrew Jeffery auto rc = decode_set_date_time_resp(nullptr, responseMsg.size() - hdrSize,
19648761c62SAndrew Jeffery &completionCode);
19748761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
19848761c62SAndrew Jeffery
19948761c62SAndrew Jeffery rc = decode_set_date_time_resp(response, responseMsg.size() - hdrSize - 1,
20048761c62SAndrew Jeffery &completionCode);
20148761c62SAndrew Jeffery
20248761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
20348761c62SAndrew Jeffery }
20448761c62SAndrew Jeffery
TEST(SetDateTime,testGoodEncodeRequset)20548761c62SAndrew Jeffery TEST(SetDateTime, testGoodEncodeRequset)
20648761c62SAndrew Jeffery {
20748761c62SAndrew Jeffery uint8_t instanceId = 0;
20848761c62SAndrew Jeffery uint8_t seconds = 50;
20948761c62SAndrew Jeffery uint8_t minutes = 20;
21048761c62SAndrew Jeffery uint8_t hours = 10;
21148761c62SAndrew Jeffery uint8_t day = 11;
21248761c62SAndrew Jeffery uint8_t month = 11;
21348761c62SAndrew Jeffery uint16_t year = 2019;
21448761c62SAndrew Jeffery
21548761c62SAndrew Jeffery std::array<uint8_t, hdrSize + sizeof(struct pldm_set_date_time_req)>
21648761c62SAndrew Jeffery requestMsg{};
21748761c62SAndrew Jeffery
218*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
21948761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
22048761c62SAndrew Jeffery auto rc = encode_set_date_time_req(instanceId, seconds, minutes, hours, day,
22148761c62SAndrew Jeffery month, year, request,
22248761c62SAndrew Jeffery requestMsg.size() - hdrSize);
22348761c62SAndrew Jeffery
22448761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
22548761c62SAndrew Jeffery
22648761c62SAndrew Jeffery struct pldm_set_date_time_req* req =
227*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
22848761c62SAndrew Jeffery reinterpret_cast<struct pldm_set_date_time_req*>(request->payload);
22948761c62SAndrew Jeffery EXPECT_EQ(seconds, bcd2dec8(req->seconds));
23048761c62SAndrew Jeffery EXPECT_EQ(minutes, bcd2dec8(req->minutes));
23148761c62SAndrew Jeffery EXPECT_EQ(hours, bcd2dec8(req->hours));
23248761c62SAndrew Jeffery EXPECT_EQ(day, bcd2dec8(req->day));
23348761c62SAndrew Jeffery EXPECT_EQ(month, bcd2dec8(req->month));
23448761c62SAndrew Jeffery EXPECT_EQ(year, bcd2dec16(le16toh(req->year)));
23548761c62SAndrew Jeffery }
23648761c62SAndrew Jeffery
TEST(SetDateTime,testBadEncodeRequset)23748761c62SAndrew Jeffery TEST(SetDateTime, testBadEncodeRequset)
23848761c62SAndrew Jeffery {
23948761c62SAndrew Jeffery uint8_t instanceId = 0;
24048761c62SAndrew Jeffery
24148761c62SAndrew Jeffery uint8_t seconds = 50;
24248761c62SAndrew Jeffery uint8_t minutes = 20;
24348761c62SAndrew Jeffery uint8_t hours = 10;
24448761c62SAndrew Jeffery uint8_t day = 13;
24548761c62SAndrew Jeffery uint8_t month = 11;
24648761c62SAndrew Jeffery uint16_t year = 2019;
24748761c62SAndrew Jeffery
24848761c62SAndrew Jeffery uint8_t erday = 43;
24948761c62SAndrew Jeffery
25048761c62SAndrew Jeffery std::array<uint8_t, hdrSize + sizeof(struct pldm_set_date_time_req)>
25148761c62SAndrew Jeffery requestMsg{};
25248761c62SAndrew Jeffery
253*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
25448761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
25548761c62SAndrew Jeffery
25648761c62SAndrew Jeffery auto rc = encode_set_date_time_req(instanceId, seconds, minutes, hours, day,
25748761c62SAndrew Jeffery month, year, nullptr,
25848761c62SAndrew Jeffery requestMsg.size() - hdrSize);
25948761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
26048761c62SAndrew Jeffery
26148761c62SAndrew Jeffery rc = encode_set_date_time_req(instanceId, seconds, minutes, hours, erday,
26248761c62SAndrew Jeffery month, year, request,
26348761c62SAndrew Jeffery requestMsg.size() - hdrSize);
26448761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
26548761c62SAndrew Jeffery
26648761c62SAndrew Jeffery rc = encode_set_date_time_req(instanceId, seconds, minutes, hours, day,
26748761c62SAndrew Jeffery month, year, request,
26848761c62SAndrew Jeffery requestMsg.size() - hdrSize - 4);
26948761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
27048761c62SAndrew Jeffery }
27148761c62SAndrew Jeffery
TEST(SetDateTime,testGoodDecodeRequest)27248761c62SAndrew Jeffery TEST(SetDateTime, testGoodDecodeRequest)
27348761c62SAndrew Jeffery {
27448761c62SAndrew Jeffery std::array<uint8_t, hdrSize + sizeof(struct pldm_set_date_time_req)>
27548761c62SAndrew Jeffery requestMsg{};
27648761c62SAndrew Jeffery uint8_t seconds = 0x50;
27748761c62SAndrew Jeffery uint8_t minutes = 0x20;
27848761c62SAndrew Jeffery uint8_t hours = 0x10;
27948761c62SAndrew Jeffery uint8_t day = 0x11;
28048761c62SAndrew Jeffery uint8_t month = 0x11;
28148761c62SAndrew Jeffery uint16_t year = 0x2019;
28248761c62SAndrew Jeffery
283*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
28448761c62SAndrew Jeffery auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
28548761c62SAndrew Jeffery struct pldm_set_date_time_req* req =
286*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
28748761c62SAndrew Jeffery reinterpret_cast<struct pldm_set_date_time_req*>(request->payload);
28848761c62SAndrew Jeffery req->seconds = seconds;
28948761c62SAndrew Jeffery req->minutes = minutes;
29048761c62SAndrew Jeffery req->hours = hours;
29148761c62SAndrew Jeffery req->day = day;
29248761c62SAndrew Jeffery req->month = month;
29348761c62SAndrew Jeffery req->year = htole16(year);
29448761c62SAndrew Jeffery
29548761c62SAndrew Jeffery uint8_t retseconds;
29648761c62SAndrew Jeffery uint8_t retminutes;
29748761c62SAndrew Jeffery uint8_t rethours;
29848761c62SAndrew Jeffery uint8_t retday;
29948761c62SAndrew Jeffery uint8_t retmonth;
30048761c62SAndrew Jeffery uint16_t retyear;
30148761c62SAndrew Jeffery
30248761c62SAndrew Jeffery auto rc = decode_set_date_time_req(request, requestMsg.size() - hdrSize,
30348761c62SAndrew Jeffery &retseconds, &retminutes, &rethours,
30448761c62SAndrew Jeffery &retday, &retmonth, &retyear);
30548761c62SAndrew Jeffery
30648761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
30748761c62SAndrew Jeffery EXPECT_EQ(retseconds, 50);
30848761c62SAndrew Jeffery EXPECT_EQ(retminutes, 20);
30948761c62SAndrew Jeffery EXPECT_EQ(rethours, 10);
31048761c62SAndrew Jeffery EXPECT_EQ(retday, 11);
31148761c62SAndrew Jeffery EXPECT_EQ(retmonth, 11);
31248761c62SAndrew Jeffery EXPECT_EQ(retyear, 2019);
31348761c62SAndrew Jeffery }
31448761c62SAndrew Jeffery
TEST(SetDateTime,testBadDecodeRequest)31548761c62SAndrew Jeffery TEST(SetDateTime, testBadDecodeRequest)
31648761c62SAndrew Jeffery {
31748761c62SAndrew Jeffery uint8_t seconds = 0x50;
31848761c62SAndrew Jeffery uint8_t minutes = 0x20;
31948761c62SAndrew Jeffery uint8_t hours = 0x10;
32048761c62SAndrew Jeffery uint8_t day = 0x11;
32148761c62SAndrew Jeffery uint8_t month = 0x11;
32248761c62SAndrew Jeffery uint16_t year = htole16(0x2019);
32348761c62SAndrew Jeffery
32448761c62SAndrew Jeffery std::array<uint8_t, hdrSize + sizeof(struct pldm_set_date_time_req)>
32548761c62SAndrew Jeffery requestMsg{};
32648761c62SAndrew Jeffery
327*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
32848761c62SAndrew Jeffery auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
32948761c62SAndrew Jeffery
33048761c62SAndrew Jeffery decode_set_date_time_req(request, requestMsg.size() - hdrSize, &seconds,
33148761c62SAndrew Jeffery &minutes, &hours, &day, &month, &year);
33248761c62SAndrew Jeffery
33348761c62SAndrew Jeffery auto rc =
33448761c62SAndrew Jeffery decode_set_date_time_req(nullptr, requestMsg.size() - hdrSize, &seconds,
33548761c62SAndrew Jeffery &minutes, &hours, &day, &month, &year);
33648761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
33748761c62SAndrew Jeffery
33848761c62SAndrew Jeffery rc = decode_set_date_time_req(request, requestMsg.size() - hdrSize, nullptr,
33948761c62SAndrew Jeffery nullptr, nullptr, nullptr, nullptr, nullptr);
34048761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
34148761c62SAndrew Jeffery
34248761c62SAndrew Jeffery rc = decode_set_date_time_req(request, requestMsg.size() - hdrSize - 4,
34348761c62SAndrew Jeffery &seconds, &minutes, &hours, &day, &month,
34448761c62SAndrew Jeffery &year);
34548761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
34648761c62SAndrew Jeffery }
34748761c62SAndrew Jeffery
TEST(GetBIOSTable,testGoodEncodeResponse)34848761c62SAndrew Jeffery TEST(GetBIOSTable, testGoodEncodeResponse)
34948761c62SAndrew Jeffery {
35048761c62SAndrew Jeffery std::array<uint8_t,
35148761c62SAndrew Jeffery sizeof(pldm_msg_hdr) + PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES + 4>
35248761c62SAndrew Jeffery responseMsg{};
353*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
35448761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
35548761c62SAndrew Jeffery
35648761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
35748761c62SAndrew Jeffery uint32_t nextTransferHandle = 32;
35848761c62SAndrew Jeffery uint8_t transferFlag = PLDM_START_AND_END;
35948761c62SAndrew Jeffery std::array<uint8_t, 4> tableData{1, 2, 3, 4};
36048761c62SAndrew Jeffery
36148761c62SAndrew Jeffery auto rc = encode_get_bios_table_resp(
36248761c62SAndrew Jeffery 0, PLDM_SUCCESS, nextTransferHandle, transferFlag, tableData.data(),
36348761c62SAndrew Jeffery sizeof(pldm_msg_hdr) + PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES + 4,
36448761c62SAndrew Jeffery response);
36548761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
36648761c62SAndrew Jeffery
36748761c62SAndrew Jeffery struct pldm_get_bios_table_resp* resp =
368*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
36948761c62SAndrew Jeffery reinterpret_cast<struct pldm_get_bios_table_resp*>(response->payload);
37048761c62SAndrew Jeffery
37148761c62SAndrew Jeffery EXPECT_EQ(completionCode, resp->completion_code);
37248761c62SAndrew Jeffery EXPECT_EQ(nextTransferHandle, le32toh(resp->next_transfer_handle));
37348761c62SAndrew Jeffery EXPECT_EQ(transferFlag, resp->transfer_flag);
37448761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(tableData.data(), resp->table_data, tableData.size()));
37548761c62SAndrew Jeffery }
37648761c62SAndrew Jeffery
TEST(GetBIOSTable,testBadEncodeResponse)37748761c62SAndrew Jeffery TEST(GetBIOSTable, testBadEncodeResponse)
37848761c62SAndrew Jeffery {
37948761c62SAndrew Jeffery uint32_t nextTransferHandle = 32;
38048761c62SAndrew Jeffery uint8_t transferFlag = PLDM_START_AND_END;
38148761c62SAndrew Jeffery std::array<uint8_t, 4> tableData{1, 2, 3, 4};
38248761c62SAndrew Jeffery
38348761c62SAndrew Jeffery auto rc = encode_get_bios_table_resp(
38448761c62SAndrew Jeffery 0, PLDM_SUCCESS, nextTransferHandle, transferFlag, tableData.data(),
38548761c62SAndrew Jeffery sizeof(pldm_msg_hdr) + PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES + 4, nullptr);
38648761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
38748761c62SAndrew Jeffery }
38848761c62SAndrew Jeffery
TEST(GetBIOSTable,testGoodEncodeRequest)38948761c62SAndrew Jeffery TEST(GetBIOSTable, testGoodEncodeRequest)
39048761c62SAndrew Jeffery {
39148761c62SAndrew Jeffery std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_BIOS_TABLE_REQ_BYTES>
39248761c62SAndrew Jeffery requestMsg{};
39348761c62SAndrew Jeffery uint32_t transferHandle = 0x0;
39448761c62SAndrew Jeffery uint8_t transferOpFlag = 0x01;
39548761c62SAndrew Jeffery uint8_t tableType = PLDM_BIOS_ATTR_TABLE;
39648761c62SAndrew Jeffery
397*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
39848761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
39948761c62SAndrew Jeffery auto rc = encode_get_bios_table_req(0, transferHandle, transferOpFlag,
40048761c62SAndrew Jeffery tableType, request);
40148761c62SAndrew Jeffery
40248761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
40348761c62SAndrew Jeffery
40448761c62SAndrew Jeffery struct pldm_get_bios_table_req* req =
405*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
40648761c62SAndrew Jeffery reinterpret_cast<struct pldm_get_bios_table_req*>(request->payload);
40748761c62SAndrew Jeffery EXPECT_EQ(transferHandle, le32toh(req->transfer_handle));
40848761c62SAndrew Jeffery EXPECT_EQ(transferOpFlag, req->transfer_op_flag);
40948761c62SAndrew Jeffery EXPECT_EQ(tableType, req->table_type);
41048761c62SAndrew Jeffery }
41148761c62SAndrew Jeffery
TEST(GetBIOSTable,testBadEncodeRequest)41248761c62SAndrew Jeffery TEST(GetBIOSTable, testBadEncodeRequest)
41348761c62SAndrew Jeffery {
41448761c62SAndrew Jeffery uint32_t transferHandle = 0x0;
41548761c62SAndrew Jeffery uint8_t transferOpFlag = 0x01;
41648761c62SAndrew Jeffery uint8_t tableType = PLDM_BIOS_ATTR_TABLE;
41748761c62SAndrew Jeffery
41848761c62SAndrew Jeffery auto rc = encode_get_bios_table_req(0, transferHandle, transferOpFlag,
41948761c62SAndrew Jeffery tableType, nullptr);
42048761c62SAndrew Jeffery
42148761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
42248761c62SAndrew Jeffery }
42348761c62SAndrew Jeffery
TEST(GetBIOSTable,testGoodDecodeRequest)42448761c62SAndrew Jeffery TEST(GetBIOSTable, testGoodDecodeRequest)
42548761c62SAndrew Jeffery {
42648761c62SAndrew Jeffery const auto hdr_size = sizeof(pldm_msg_hdr);
42748761c62SAndrew Jeffery std::array<uint8_t, hdr_size + PLDM_GET_BIOS_TABLE_REQ_BYTES> requestMsg{};
42848761c62SAndrew Jeffery uint32_t transferHandle = 31;
42948761c62SAndrew Jeffery uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
43048761c62SAndrew Jeffery uint8_t tableType = PLDM_BIOS_ATTR_TABLE;
43148761c62SAndrew Jeffery uint32_t retTransferHandle = 0;
43248761c62SAndrew Jeffery uint8_t retTransferOpFlag = 0;
43348761c62SAndrew Jeffery uint8_t retTableType = 0;
43448761c62SAndrew Jeffery
435*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
43648761c62SAndrew Jeffery auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
43748761c62SAndrew Jeffery struct pldm_get_bios_table_req* request =
438*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
43948761c62SAndrew Jeffery reinterpret_cast<struct pldm_get_bios_table_req*>(req->payload);
44048761c62SAndrew Jeffery
44148761c62SAndrew Jeffery request->transfer_handle = htole32(transferHandle);
44248761c62SAndrew Jeffery request->transfer_op_flag = transferOpFlag;
44348761c62SAndrew Jeffery request->table_type = tableType;
44448761c62SAndrew Jeffery
44548761c62SAndrew Jeffery auto rc = decode_get_bios_table_req(req, requestMsg.size() - hdr_size,
44648761c62SAndrew Jeffery &retTransferHandle, &retTransferOpFlag,
44748761c62SAndrew Jeffery &retTableType);
44848761c62SAndrew Jeffery
44948761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
45048761c62SAndrew Jeffery EXPECT_EQ(transferHandle, retTransferHandle);
45148761c62SAndrew Jeffery EXPECT_EQ(transferOpFlag, retTransferOpFlag);
45248761c62SAndrew Jeffery EXPECT_EQ(tableType, retTableType);
45348761c62SAndrew Jeffery }
TEST(GetBIOSTable,testBadDecodeRequest)45448761c62SAndrew Jeffery TEST(GetBIOSTable, testBadDecodeRequest)
45548761c62SAndrew Jeffery {
45648761c62SAndrew Jeffery const auto hdr_size = sizeof(pldm_msg_hdr);
45748761c62SAndrew Jeffery std::array<uint8_t, hdr_size + PLDM_GET_BIOS_TABLE_REQ_BYTES> requestMsg{};
45848761c62SAndrew Jeffery uint32_t transferHandle = 31;
45948761c62SAndrew Jeffery uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
46048761c62SAndrew Jeffery uint8_t tableType = PLDM_BIOS_ATTR_TABLE;
46148761c62SAndrew Jeffery uint32_t retTransferHandle = 0;
46248761c62SAndrew Jeffery uint8_t retTransferOpFlag = 0;
46348761c62SAndrew Jeffery uint8_t retTableType = 0;
46448761c62SAndrew Jeffery
465*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
46648761c62SAndrew Jeffery auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
46748761c62SAndrew Jeffery struct pldm_get_bios_table_req* request =
468*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
46948761c62SAndrew Jeffery reinterpret_cast<struct pldm_get_bios_table_req*>(req->payload);
47048761c62SAndrew Jeffery
47148761c62SAndrew Jeffery request->transfer_handle = htole32(transferHandle);
47248761c62SAndrew Jeffery request->transfer_op_flag = transferOpFlag;
47348761c62SAndrew Jeffery request->table_type = tableType;
47448761c62SAndrew Jeffery
47548761c62SAndrew Jeffery auto rc = decode_get_bios_table_req(req, requestMsg.size() - hdr_size,
47648761c62SAndrew Jeffery &retTransferHandle, &retTransferOpFlag,
47748761c62SAndrew Jeffery &retTableType);
47848761c62SAndrew Jeffery
47948761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
48048761c62SAndrew Jeffery EXPECT_EQ(transferHandle, retTransferHandle);
48148761c62SAndrew Jeffery EXPECT_EQ(transferOpFlag, retTransferOpFlag);
48248761c62SAndrew Jeffery EXPECT_EQ(tableType, retTableType);
48348761c62SAndrew Jeffery }
48448761c62SAndrew Jeffery /*
48548761c62SAndrew Jeffery TEST(GetBIOSTable, testBadDecodeRequest)
48648761c62SAndrew Jeffery {
48748761c62SAndrew Jeffery const auto hdr_size = sizeof(pldm_msg_hdr);
48848761c62SAndrew Jeffery std::array<uint8_t, hdr_size + PLDM_GET_BIOS_TABLE_REQ_BYTES> requestMsg{};
48948761c62SAndrew Jeffery uint32_t transferHandle = 31;
49048761c62SAndrew Jeffery uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
49148761c62SAndrew Jeffery uint8_t tableType = PLDM_BIOS_ATTR_TABLE;
49248761c62SAndrew Jeffery uint32_t retTransferHandle = 0;
49348761c62SAndrew Jeffery uint8_t retTransferOpFlag = 0;
49448761c62SAndrew Jeffery uint8_t retTableType = 0;
49548761c62SAndrew Jeffery
496*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
49748761c62SAndrew Jeffery auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
49848761c62SAndrew Jeffery struct pldm_get_bios_table_req* request =
499*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
50048761c62SAndrew Jeffery reinterpret_cast<struct pldm_get_bios_table_req*>(req->payload);
50148761c62SAndrew Jeffery
50248761c62SAndrew Jeffery request->transfer_handle = htole32(transferHandle);
50348761c62SAndrew Jeffery request->transfer_op_flag = transferOpFlag;
50448761c62SAndrew Jeffery request->table_type = tableType;
50548761c62SAndrew Jeffery
50648761c62SAndrew Jeffery auto rc = decode_get_bios_table_req(req, requestMsg.size() - hdr_size - 3,
50748761c62SAndrew Jeffery &retTransferHandle, &retTransferOpFlag,
50848761c62SAndrew Jeffery &retTableType);
50948761c62SAndrew Jeffery
51048761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
51148761c62SAndrew Jeffery }*/
51248761c62SAndrew Jeffery
TEST(GetBIOSAttributeCurrentValueByHandle,testGoodDecodeRequest)51348761c62SAndrew Jeffery TEST(GetBIOSAttributeCurrentValueByHandle, testGoodDecodeRequest)
51448761c62SAndrew Jeffery {
51548761c62SAndrew Jeffery uint32_t transferHandle = 45;
51648761c62SAndrew Jeffery uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
51748761c62SAndrew Jeffery uint16_t attributehandle = 10;
51848761c62SAndrew Jeffery uint32_t retTransferHandle = 0;
51948761c62SAndrew Jeffery uint8_t retTransferOpFlag = 0;
52048761c62SAndrew Jeffery uint16_t retattributehandle = 0;
52148761c62SAndrew Jeffery std::array<uint8_t, hdrSize + sizeof(transferHandle) +
52248761c62SAndrew Jeffery sizeof(transferOpFlag) + sizeof(attributehandle)>
52348761c62SAndrew Jeffery requestMsg{};
52448761c62SAndrew Jeffery
525*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
52648761c62SAndrew Jeffery auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
52748761c62SAndrew Jeffery struct pldm_get_bios_attribute_current_value_by_handle_req* request =
528*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
52948761c62SAndrew Jeffery reinterpret_cast<
53048761c62SAndrew Jeffery struct pldm_get_bios_attribute_current_value_by_handle_req*>(
53148761c62SAndrew Jeffery req->payload);
53248761c62SAndrew Jeffery
53348761c62SAndrew Jeffery request->transfer_handle = htole32(transferHandle);
53448761c62SAndrew Jeffery request->transfer_op_flag = transferOpFlag;
53548761c62SAndrew Jeffery request->attribute_handle = htole16(attributehandle);
53648761c62SAndrew Jeffery
53748761c62SAndrew Jeffery auto rc = decode_get_bios_attribute_current_value_by_handle_req(
53848761c62SAndrew Jeffery req, requestMsg.size() - hdrSize, &retTransferHandle,
53948761c62SAndrew Jeffery &retTransferOpFlag, &retattributehandle);
54048761c62SAndrew Jeffery
54148761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
54248761c62SAndrew Jeffery EXPECT_EQ(transferHandle, retTransferHandle);
54348761c62SAndrew Jeffery EXPECT_EQ(transferOpFlag, retTransferOpFlag);
54448761c62SAndrew Jeffery EXPECT_EQ(attributehandle, retattributehandle);
54548761c62SAndrew Jeffery }
54648761c62SAndrew Jeffery
TEST(GetBIOSAttributeCurrentValueByHandle,testBadDecodeRequest)54748761c62SAndrew Jeffery TEST(GetBIOSAttributeCurrentValueByHandle, testBadDecodeRequest)
54848761c62SAndrew Jeffery {
54948761c62SAndrew Jeffery
55048761c62SAndrew Jeffery uint32_t transferHandle = 0;
55148761c62SAndrew Jeffery uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
55248761c62SAndrew Jeffery uint16_t attribute_handle = 0;
55348761c62SAndrew Jeffery uint32_t retTransferHandle = 0;
55448761c62SAndrew Jeffery uint8_t retTransferOpFlag = 0;
55548761c62SAndrew Jeffery uint16_t retattribute_handle = 0;
55648761c62SAndrew Jeffery std::array<uint8_t, hdrSize + sizeof(transferHandle) +
55748761c62SAndrew Jeffery sizeof(transferOpFlag) + sizeof(attribute_handle)>
55848761c62SAndrew Jeffery requestMsg{};
55948761c62SAndrew Jeffery
560*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
56148761c62SAndrew Jeffery auto req = reinterpret_cast<pldm_msg*>(requestMsg.data());
56248761c62SAndrew Jeffery struct pldm_get_bios_attribute_current_value_by_handle_req* request =
563*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
56448761c62SAndrew Jeffery reinterpret_cast<
56548761c62SAndrew Jeffery struct pldm_get_bios_attribute_current_value_by_handle_req*>(
56648761c62SAndrew Jeffery req->payload);
56748761c62SAndrew Jeffery
56848761c62SAndrew Jeffery request->transfer_handle = htole32(transferHandle);
56948761c62SAndrew Jeffery request->transfer_op_flag = transferOpFlag;
57048761c62SAndrew Jeffery request->attribute_handle = attribute_handle;
57148761c62SAndrew Jeffery
57248761c62SAndrew Jeffery auto rc = decode_get_bios_attribute_current_value_by_handle_req(
57348761c62SAndrew Jeffery NULL, requestMsg.size() - hdrSize, &retTransferHandle,
57448761c62SAndrew Jeffery &retTransferOpFlag, &retattribute_handle);
57548761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
57648761c62SAndrew Jeffery
57748761c62SAndrew Jeffery transferHandle = 31;
57848761c62SAndrew Jeffery request->transfer_handle = htole32(transferHandle);
57948761c62SAndrew Jeffery
58048761c62SAndrew Jeffery rc = decode_get_bios_attribute_current_value_by_handle_req(
58148761c62SAndrew Jeffery req, 0, &retTransferHandle, &retTransferOpFlag, &retattribute_handle);
58248761c62SAndrew Jeffery
58348761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
58448761c62SAndrew Jeffery }
58548761c62SAndrew Jeffery
TEST(GetBIOSAttributeCurrentValueByHandle,testGoodEncodeRequest)58648761c62SAndrew Jeffery TEST(GetBIOSAttributeCurrentValueByHandle, testGoodEncodeRequest)
58748761c62SAndrew Jeffery {
58848761c62SAndrew Jeffery std::array<uint8_t, sizeof(pldm_msg_hdr) +
58948761c62SAndrew Jeffery PLDM_GET_BIOS_ATTR_CURR_VAL_BY_HANDLE_REQ_BYTES>
59048761c62SAndrew Jeffery requestMsg{};
59148761c62SAndrew Jeffery uint32_t transferHandle = 45;
59248761c62SAndrew Jeffery uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
59348761c62SAndrew Jeffery uint8_t attributeHandle = 10;
59448761c62SAndrew Jeffery
595*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
59648761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
59748761c62SAndrew Jeffery auto rc = encode_get_bios_attribute_current_value_by_handle_req(
59848761c62SAndrew Jeffery 0, transferHandle, transferOpFlag, attributeHandle, request);
59948761c62SAndrew Jeffery
60048761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
60148761c62SAndrew Jeffery
60248761c62SAndrew Jeffery struct pldm_get_bios_attribute_current_value_by_handle_req* req =
603*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
60448761c62SAndrew Jeffery reinterpret_cast<
60548761c62SAndrew Jeffery struct pldm_get_bios_attribute_current_value_by_handle_req*>(
60648761c62SAndrew Jeffery request->payload);
60748761c62SAndrew Jeffery EXPECT_EQ(transferHandle, le32toh(req->transfer_handle));
60848761c62SAndrew Jeffery EXPECT_EQ(transferOpFlag, req->transfer_op_flag);
60948761c62SAndrew Jeffery EXPECT_EQ(attributeHandle, le16toh(req->attribute_handle));
61048761c62SAndrew Jeffery }
61148761c62SAndrew Jeffery
TEST(GetBIOSAttributeCurrentValueByHandle,testBadEncodeRequest)61248761c62SAndrew Jeffery TEST(GetBIOSAttributeCurrentValueByHandle, testBadEncodeRequest)
61348761c62SAndrew Jeffery {
61448761c62SAndrew Jeffery uint32_t transferHandle = 0;
61548761c62SAndrew Jeffery uint8_t transferOpFlag = PLDM_GET_FIRSTPART;
61648761c62SAndrew Jeffery uint8_t attributeHandle = 0;
61748761c62SAndrew Jeffery
61848761c62SAndrew Jeffery auto rc = encode_get_bios_attribute_current_value_by_handle_req(
61948761c62SAndrew Jeffery 0, transferHandle, transferOpFlag, attributeHandle, nullptr);
62048761c62SAndrew Jeffery
62148761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
62248761c62SAndrew Jeffery }
62348761c62SAndrew Jeffery
TEST(GetBIOSAttributeCurrentValueByHandle,testGoodEncodeResponse)62448761c62SAndrew Jeffery TEST(GetBIOSAttributeCurrentValueByHandle, testGoodEncodeResponse)
62548761c62SAndrew Jeffery {
62648761c62SAndrew Jeffery
62748761c62SAndrew Jeffery uint8_t instanceId = 10;
62848761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
62948761c62SAndrew Jeffery uint32_t nextTransferHandle = 32;
63048761c62SAndrew Jeffery uint8_t transferFlag = PLDM_START_AND_END;
63148761c62SAndrew Jeffery uint8_t attributeData = 44;
63248761c62SAndrew Jeffery std::array<uint8_t,
63348761c62SAndrew Jeffery hdrSize +
63448761c62SAndrew Jeffery sizeof(pldm_get_bios_attribute_current_value_by_handle_resp)>
63548761c62SAndrew Jeffery responseMsg{};
636*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
63748761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
63848761c62SAndrew Jeffery
63948761c62SAndrew Jeffery auto rc = encode_get_bios_current_value_by_handle_resp(
64048761c62SAndrew Jeffery instanceId, completionCode, nextTransferHandle, transferFlag,
64148761c62SAndrew Jeffery &attributeData, sizeof(attributeData), response);
64248761c62SAndrew Jeffery
64348761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
64448761c62SAndrew Jeffery
64548761c62SAndrew Jeffery struct pldm_get_bios_attribute_current_value_by_handle_resp* resp =
646*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
64748761c62SAndrew Jeffery reinterpret_cast<
64848761c62SAndrew Jeffery struct pldm_get_bios_attribute_current_value_by_handle_resp*>(
64948761c62SAndrew Jeffery response->payload);
65048761c62SAndrew Jeffery
65148761c62SAndrew Jeffery EXPECT_EQ(completionCode, resp->completion_code);
65248761c62SAndrew Jeffery EXPECT_EQ(nextTransferHandle, le32toh(resp->next_transfer_handle));
65348761c62SAndrew Jeffery EXPECT_EQ(transferFlag, resp->transfer_flag);
65448761c62SAndrew Jeffery EXPECT_EQ(
65548761c62SAndrew Jeffery 0, memcmp(&attributeData, resp->attribute_data, sizeof(attributeData)));
65648761c62SAndrew Jeffery }
65748761c62SAndrew Jeffery
TEST(GetBIOSAttributeCurrentValueByHandle,testBadEncodeResponse)65848761c62SAndrew Jeffery TEST(GetBIOSAttributeCurrentValueByHandle, testBadEncodeResponse)
65948761c62SAndrew Jeffery {
66048761c62SAndrew Jeffery uint32_t nextTransferHandle = 32;
66148761c62SAndrew Jeffery uint8_t transferFlag = PLDM_START_AND_END;
66248761c62SAndrew Jeffery uint8_t attributeData = 44;
66348761c62SAndrew Jeffery
66448761c62SAndrew Jeffery auto rc = encode_get_bios_current_value_by_handle_resp(
66548761c62SAndrew Jeffery 0, PLDM_SUCCESS, nextTransferHandle, transferFlag, &attributeData,
66648761c62SAndrew Jeffery sizeof(attributeData), nullptr);
66748761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
66848761c62SAndrew Jeffery
66948761c62SAndrew Jeffery std::array<uint8_t,
67048761c62SAndrew Jeffery hdrSize +
67148761c62SAndrew Jeffery sizeof(pldm_get_bios_attribute_current_value_by_handle_resp)>
67248761c62SAndrew Jeffery responseMsg{};
673*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
67448761c62SAndrew Jeffery auto response = reinterpret_cast<pldm_msg*>(responseMsg.data());
67548761c62SAndrew Jeffery rc = encode_get_bios_current_value_by_handle_resp(
67648761c62SAndrew Jeffery 0, PLDM_SUCCESS, nextTransferHandle, transferFlag, nullptr,
67748761c62SAndrew Jeffery sizeof(attributeData), response);
67848761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
67948761c62SAndrew Jeffery }
68048761c62SAndrew Jeffery
TEST(SetBiosAttributeCurrentValue,testGoodEncodeRequest)68148761c62SAndrew Jeffery TEST(SetBiosAttributeCurrentValue, testGoodEncodeRequest)
68248761c62SAndrew Jeffery {
68348761c62SAndrew Jeffery uint8_t instanceId = 10;
68448761c62SAndrew Jeffery uint32_t transferHandle = 32;
68548761c62SAndrew Jeffery uint8_t transferFlag = PLDM_START_AND_END;
68648761c62SAndrew Jeffery uint32_t attributeData = 44;
68748761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES +
68848761c62SAndrew Jeffery sizeof(attributeData)>
68948761c62SAndrew Jeffery requestMsg{};
690*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
69148761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
69248761c62SAndrew Jeffery auto rc = encode_set_bios_attribute_current_value_req(
69348761c62SAndrew Jeffery instanceId, transferHandle, transferFlag,
694*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
69548761c62SAndrew Jeffery reinterpret_cast<uint8_t*>(&attributeData), sizeof(attributeData),
69648761c62SAndrew Jeffery request, requestMsg.size() - hdrSize);
69748761c62SAndrew Jeffery
69848761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
69948761c62SAndrew Jeffery
70048761c62SAndrew Jeffery struct pldm_set_bios_attribute_current_value_req* req =
701*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
70248761c62SAndrew Jeffery reinterpret_cast<struct pldm_set_bios_attribute_current_value_req*>(
70348761c62SAndrew Jeffery request->payload);
70448761c62SAndrew Jeffery EXPECT_EQ(htole32(transferHandle), req->transfer_handle);
70548761c62SAndrew Jeffery EXPECT_EQ(transferFlag, req->transfer_flag);
70648761c62SAndrew Jeffery EXPECT_EQ(
70748761c62SAndrew Jeffery 0, memcmp(&attributeData, req->attribute_data, sizeof(attributeData)));
70848761c62SAndrew Jeffery }
70948761c62SAndrew Jeffery
TEST(SetBiosAttributeCurrentValue,testBadEncodeRequest)71048761c62SAndrew Jeffery TEST(SetBiosAttributeCurrentValue, testBadEncodeRequest)
71148761c62SAndrew Jeffery {
71248761c62SAndrew Jeffery uint8_t instanceId = 10;
71348761c62SAndrew Jeffery uint32_t transferHandle = 32;
71448761c62SAndrew Jeffery uint8_t transferFlag = PLDM_START_AND_END;
71548761c62SAndrew Jeffery uint32_t attributeData = 44;
71648761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES>
71748761c62SAndrew Jeffery requestMsg{};
718*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
71948761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
72048761c62SAndrew Jeffery
72148761c62SAndrew Jeffery auto rc = encode_set_bios_attribute_current_value_req(
72248761c62SAndrew Jeffery instanceId, transferHandle, transferFlag, nullptr, 0, nullptr, 0);
72348761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
72448761c62SAndrew Jeffery rc = encode_set_bios_attribute_current_value_req(
72548761c62SAndrew Jeffery instanceId, transferHandle, transferFlag,
726*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
72748761c62SAndrew Jeffery reinterpret_cast<uint8_t*>(&attributeData), sizeof(attributeData),
72848761c62SAndrew Jeffery request, requestMsg.size() - hdrSize);
72948761c62SAndrew Jeffery
73048761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
73148761c62SAndrew Jeffery }
73248761c62SAndrew Jeffery
TEST(SetBiosAttributeCurrentValue,testGoodDecodeRequest)73348761c62SAndrew Jeffery TEST(SetBiosAttributeCurrentValue, testGoodDecodeRequest)
73448761c62SAndrew Jeffery {
73548761c62SAndrew Jeffery uint32_t transferHandle = 32;
73648761c62SAndrew Jeffery uint8_t transferFlag = PLDM_START_AND_END;
73748761c62SAndrew Jeffery uint32_t attributeData = 44;
73848761c62SAndrew Jeffery
73948761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES +
74048761c62SAndrew Jeffery sizeof(attributeData)>
74148761c62SAndrew Jeffery requestMsg{};
742*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
74348761c62SAndrew Jeffery auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
74448761c62SAndrew Jeffery struct pldm_set_bios_attribute_current_value_req* req =
745*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
74648761c62SAndrew Jeffery reinterpret_cast<struct pldm_set_bios_attribute_current_value_req*>(
74748761c62SAndrew Jeffery request->payload);
74848761c62SAndrew Jeffery req->transfer_handle = htole32(transferHandle);
74948761c62SAndrew Jeffery req->transfer_flag = transferFlag;
75048761c62SAndrew Jeffery memcpy(req->attribute_data, &attributeData, sizeof(attributeData));
75148761c62SAndrew Jeffery
75248761c62SAndrew Jeffery uint32_t retTransferHandle;
75348761c62SAndrew Jeffery uint8_t retTransferFlag;
75448761c62SAndrew Jeffery struct variable_field attribute;
75548761c62SAndrew Jeffery auto rc = decode_set_bios_attribute_current_value_req(
75648761c62SAndrew Jeffery request, requestMsg.size() - hdrSize, &retTransferHandle,
75748761c62SAndrew Jeffery &retTransferFlag, &attribute);
75848761c62SAndrew Jeffery
75948761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
76048761c62SAndrew Jeffery EXPECT_EQ(retTransferHandle, transferHandle);
76148761c62SAndrew Jeffery EXPECT_EQ(retTransferFlag, transferFlag);
76248761c62SAndrew Jeffery EXPECT_EQ(attribute.length, sizeof(attributeData));
76348761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(attribute.ptr, &attributeData, sizeof(attributeData)));
76448761c62SAndrew Jeffery }
76548761c62SAndrew Jeffery
TEST(SetBiosAttributeCurrentValue,testBadDecodeRequest)76648761c62SAndrew Jeffery TEST(SetBiosAttributeCurrentValue, testBadDecodeRequest)
76748761c62SAndrew Jeffery {
76848761c62SAndrew Jeffery uint32_t transferHandle = 32;
76948761c62SAndrew Jeffery uint8_t transferFlag = PLDM_START_AND_END;
77048761c62SAndrew Jeffery struct variable_field attribute;
77148761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_MIN_REQ_BYTES - 1>
77248761c62SAndrew Jeffery requestMsg{};
773*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
77448761c62SAndrew Jeffery auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
77548761c62SAndrew Jeffery
77648761c62SAndrew Jeffery auto rc = decode_set_bios_attribute_current_value_req(
77748761c62SAndrew Jeffery nullptr, 0, &transferHandle, &transferFlag, &attribute);
77848761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
77948761c62SAndrew Jeffery rc = decode_set_bios_attribute_current_value_req(
78048761c62SAndrew Jeffery request, requestMsg.size() - hdrSize, &transferHandle, &transferFlag,
78148761c62SAndrew Jeffery &attribute);
78248761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
78348761c62SAndrew Jeffery }
78448761c62SAndrew Jeffery
TEST(SetBiosAttributeCurrentValue,testGoodEncodeResponse)78548761c62SAndrew Jeffery TEST(SetBiosAttributeCurrentValue, testGoodEncodeResponse)
78648761c62SAndrew Jeffery {
78748761c62SAndrew Jeffery uint8_t instanceId = 10;
78848761c62SAndrew Jeffery uint32_t nextTransferHandle = 32;
78948761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
79048761c62SAndrew Jeffery
79148761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_RESP_BYTES>
79248761c62SAndrew Jeffery responseMsg{};
79348761c62SAndrew Jeffery struct pldm_msg* response =
794*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
79548761c62SAndrew Jeffery reinterpret_cast<struct pldm_msg*>(responseMsg.data());
79648761c62SAndrew Jeffery auto rc = encode_set_bios_attribute_current_value_resp(
79748761c62SAndrew Jeffery instanceId, completionCode, nextTransferHandle, response);
79848761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
79948761c62SAndrew Jeffery
80048761c62SAndrew Jeffery struct pldm_set_bios_attribute_current_value_resp* resp =
801*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
80248761c62SAndrew Jeffery reinterpret_cast<struct pldm_set_bios_attribute_current_value_resp*>(
80348761c62SAndrew Jeffery response->payload);
80448761c62SAndrew Jeffery EXPECT_EQ(completionCode, resp->completion_code);
80548761c62SAndrew Jeffery EXPECT_EQ(htole32(nextTransferHandle), resp->next_transfer_handle);
80648761c62SAndrew Jeffery }
80748761c62SAndrew Jeffery
TEST(SetBiosAttributeCurrentValue,testBadEncodeResponse)80848761c62SAndrew Jeffery TEST(SetBiosAttributeCurrentValue, testBadEncodeResponse)
80948761c62SAndrew Jeffery {
81048761c62SAndrew Jeffery uint8_t instanceId = 10;
81148761c62SAndrew Jeffery uint32_t nextTransferHandle = 32;
81248761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
81348761c62SAndrew Jeffery auto rc = encode_set_bios_attribute_current_value_resp(
81448761c62SAndrew Jeffery instanceId, completionCode, nextTransferHandle, nullptr);
81548761c62SAndrew Jeffery
81648761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
81748761c62SAndrew Jeffery }
TEST(SetBiosAttributeCurrentValue,testGoodDecodeResponse)81848761c62SAndrew Jeffery TEST(SetBiosAttributeCurrentValue, testGoodDecodeResponse)
81948761c62SAndrew Jeffery {
82048761c62SAndrew Jeffery uint32_t nextTransferHandle = 32;
82148761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
82248761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_RESP_BYTES>
82348761c62SAndrew Jeffery responseMsg{};
82448761c62SAndrew Jeffery struct pldm_msg* response =
825*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
82648761c62SAndrew Jeffery reinterpret_cast<struct pldm_msg*>(responseMsg.data());
82748761c62SAndrew Jeffery struct pldm_set_bios_attribute_current_value_resp* resp =
828*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
82948761c62SAndrew Jeffery reinterpret_cast<struct pldm_set_bios_attribute_current_value_resp*>(
83048761c62SAndrew Jeffery response->payload);
83148761c62SAndrew Jeffery
83248761c62SAndrew Jeffery resp->completion_code = completionCode;
83348761c62SAndrew Jeffery resp->next_transfer_handle = htole32(nextTransferHandle);
83448761c62SAndrew Jeffery
83548761c62SAndrew Jeffery uint8_t retCompletionCode;
83648761c62SAndrew Jeffery uint32_t retNextTransferHandle;
83748761c62SAndrew Jeffery auto rc = decode_set_bios_attribute_current_value_resp(
83848761c62SAndrew Jeffery response, responseMsg.size() - hdrSize, &retCompletionCode,
83948761c62SAndrew Jeffery &retNextTransferHandle);
84048761c62SAndrew Jeffery
84148761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
84248761c62SAndrew Jeffery EXPECT_EQ(completionCode, retCompletionCode);
84348761c62SAndrew Jeffery EXPECT_EQ(nextTransferHandle, retNextTransferHandle);
84448761c62SAndrew Jeffery }
84548761c62SAndrew Jeffery
TEST(SetBiosAttributeCurrentValue,testBadDecodeResponse)84648761c62SAndrew Jeffery TEST(SetBiosAttributeCurrentValue, testBadDecodeResponse)
84748761c62SAndrew Jeffery {
84848761c62SAndrew Jeffery uint32_t nextTransferHandle = 32;
84948761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
85048761c62SAndrew Jeffery
85148761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_SET_BIOS_ATTR_CURR_VAL_RESP_BYTES>
85248761c62SAndrew Jeffery responseMsg{};
85348761c62SAndrew Jeffery struct pldm_msg* response =
854*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
85548761c62SAndrew Jeffery reinterpret_cast<struct pldm_msg*>(responseMsg.data());
85648761c62SAndrew Jeffery struct pldm_set_bios_attribute_current_value_resp* resp =
857*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
85848761c62SAndrew Jeffery reinterpret_cast<struct pldm_set_bios_attribute_current_value_resp*>(
85948761c62SAndrew Jeffery response->payload);
86048761c62SAndrew Jeffery
86148761c62SAndrew Jeffery resp->completion_code = completionCode;
86248761c62SAndrew Jeffery resp->next_transfer_handle = htole32(nextTransferHandle);
86348761c62SAndrew Jeffery
86448761c62SAndrew Jeffery auto rc = decode_set_bios_attribute_current_value_resp(
86548761c62SAndrew Jeffery nullptr, 0, &completionCode, &nextTransferHandle);
86648761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
86748761c62SAndrew Jeffery
86848761c62SAndrew Jeffery rc = decode_set_bios_attribute_current_value_resp(
86948761c62SAndrew Jeffery response, responseMsg.size() - hdrSize - 1, &completionCode,
87048761c62SAndrew Jeffery &nextTransferHandle);
87148761c62SAndrew Jeffery
87248761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
87348761c62SAndrew Jeffery }
87448761c62SAndrew Jeffery
TEST(GetBIOSTable,testDecodeResponse)87548761c62SAndrew Jeffery TEST(GetBIOSTable, testDecodeResponse)
87648761c62SAndrew Jeffery {
87748761c62SAndrew Jeffery uint32_t nextTransferHandle = 32;
87848761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
87948761c62SAndrew Jeffery uint8_t transfer_flag = PLDM_START_AND_END;
88048761c62SAndrew Jeffery
88148761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_GET_BIOS_TABLE_MIN_RESP_BYTES>
88248761c62SAndrew Jeffery responseMsg{};
88348761c62SAndrew Jeffery struct pldm_msg* response =
884*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
88548761c62SAndrew Jeffery reinterpret_cast<struct pldm_msg*>(responseMsg.data());
88648761c62SAndrew Jeffery
88748761c62SAndrew Jeffery struct pldm_get_bios_table_resp* resp =
888*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
88948761c62SAndrew Jeffery reinterpret_cast<struct pldm_get_bios_table_resp*>(response->payload);
89048761c62SAndrew Jeffery
89148761c62SAndrew Jeffery resp->completion_code = completionCode;
89248761c62SAndrew Jeffery resp->next_transfer_handle = htole32(nextTransferHandle);
89348761c62SAndrew Jeffery resp->transfer_flag = transfer_flag;
89448761c62SAndrew Jeffery size_t biosTableOffset = sizeof(completionCode) +
89548761c62SAndrew Jeffery sizeof(nextTransferHandle) + sizeof(transfer_flag);
89648761c62SAndrew Jeffery
89748761c62SAndrew Jeffery uint8_t retCompletionCode;
89848761c62SAndrew Jeffery uint32_t retNextTransferHandle;
89948761c62SAndrew Jeffery uint8_t retransfer_flag;
90048761c62SAndrew Jeffery size_t rebiosTableOffset = 0;
90148761c62SAndrew Jeffery auto rc = decode_get_bios_table_resp(
90248761c62SAndrew Jeffery response, responseMsg.size(), &retCompletionCode,
90348761c62SAndrew Jeffery &retNextTransferHandle, &retransfer_flag, &rebiosTableOffset);
90448761c62SAndrew Jeffery
90548761c62SAndrew Jeffery ASSERT_EQ(rc, PLDM_SUCCESS);
90648761c62SAndrew Jeffery ASSERT_EQ(completionCode, retCompletionCode);
90748761c62SAndrew Jeffery ASSERT_EQ(nextTransferHandle, retNextTransferHandle);
90848761c62SAndrew Jeffery ASSERT_EQ(transfer_flag, retransfer_flag);
90948761c62SAndrew Jeffery ASSERT_EQ(biosTableOffset, rebiosTableOffset);
91048761c62SAndrew Jeffery }
91148761c62SAndrew Jeffery
TEST(GetBIOSAttributeCurrentValueByHandle,testDecodeResponse)91248761c62SAndrew Jeffery TEST(GetBIOSAttributeCurrentValueByHandle, testDecodeResponse)
91348761c62SAndrew Jeffery {
91448761c62SAndrew Jeffery uint32_t nextTransferHandle = 32;
91548761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
91648761c62SAndrew Jeffery uint8_t transfer_flag = PLDM_START_AND_END;
91748761c62SAndrew Jeffery uint32_t attributeData = 44;
91848761c62SAndrew Jeffery
91948761c62SAndrew Jeffery std::array<uint8_t,
92048761c62SAndrew Jeffery hdrSize + PLDM_GET_BIOS_ATTR_CURR_VAL_BY_HANDLE_MIN_RESP_BYTES +
92148761c62SAndrew Jeffery sizeof(attributeData)>
92248761c62SAndrew Jeffery responseMsg{};
92348761c62SAndrew Jeffery struct pldm_msg* response =
924*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
92548761c62SAndrew Jeffery reinterpret_cast<struct pldm_msg*>(responseMsg.data());
92648761c62SAndrew Jeffery
92748761c62SAndrew Jeffery struct pldm_get_bios_attribute_current_value_by_handle_resp* resp =
928*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
92948761c62SAndrew Jeffery reinterpret_cast<
93048761c62SAndrew Jeffery struct pldm_get_bios_attribute_current_value_by_handle_resp*>(
93148761c62SAndrew Jeffery response->payload);
93248761c62SAndrew Jeffery
93348761c62SAndrew Jeffery resp->completion_code = completionCode;
93448761c62SAndrew Jeffery resp->next_transfer_handle = htole32(nextTransferHandle);
93548761c62SAndrew Jeffery resp->transfer_flag = transfer_flag;
93648761c62SAndrew Jeffery memcpy(resp->attribute_data, &attributeData, sizeof(attributeData));
93748761c62SAndrew Jeffery
93848761c62SAndrew Jeffery uint8_t retCompletionCode;
93948761c62SAndrew Jeffery uint32_t retNextTransferHandle;
94048761c62SAndrew Jeffery uint8_t retransfer_flag;
94148761c62SAndrew Jeffery struct variable_field retAttributeData;
94248761c62SAndrew Jeffery auto rc = decode_get_bios_attribute_current_value_by_handle_resp(
94348761c62SAndrew Jeffery response, responseMsg.size() - hdrSize, &retCompletionCode,
94448761c62SAndrew Jeffery &retNextTransferHandle, &retransfer_flag, &retAttributeData);
94548761c62SAndrew Jeffery
94648761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
94748761c62SAndrew Jeffery EXPECT_EQ(completionCode, retCompletionCode);
94848761c62SAndrew Jeffery EXPECT_EQ(nextTransferHandle, retNextTransferHandle);
94948761c62SAndrew Jeffery EXPECT_EQ(transfer_flag, retransfer_flag);
95048761c62SAndrew Jeffery EXPECT_EQ(sizeof(attributeData), retAttributeData.length);
95148761c62SAndrew Jeffery EXPECT_EQ(
95248761c62SAndrew Jeffery 0, memcmp(retAttributeData.ptr, &attributeData, sizeof(attributeData)));
95348761c62SAndrew Jeffery }
95448761c62SAndrew Jeffery
TEST(SetBIOSTable,testGoodEncodeRequest)95548761c62SAndrew Jeffery TEST(SetBIOSTable, testGoodEncodeRequest)
95648761c62SAndrew Jeffery {
95748761c62SAndrew Jeffery uint8_t instanceId = 10;
95848761c62SAndrew Jeffery uint32_t transferHandle = 32;
95948761c62SAndrew Jeffery uint8_t transferFlag = PLDM_START_AND_END;
96048761c62SAndrew Jeffery uint8_t tableType = PLDM_BIOS_STRING_TABLE;
96148761c62SAndrew Jeffery uint32_t tableData = 44;
96248761c62SAndrew Jeffery std::array<uint8_t,
96348761c62SAndrew Jeffery hdrSize + PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES + sizeof(tableData)>
96448761c62SAndrew Jeffery requestMsg{};
965*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
96648761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
96748761c62SAndrew Jeffery auto rc = encode_set_bios_table_req(
96848761c62SAndrew Jeffery instanceId, transferHandle, transferFlag, tableType,
969*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
97048761c62SAndrew Jeffery reinterpret_cast<uint8_t*>(&tableData), sizeof(tableData), request,
97148761c62SAndrew Jeffery requestMsg.size() - hdrSize);
97248761c62SAndrew Jeffery
97348761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
97448761c62SAndrew Jeffery
97548761c62SAndrew Jeffery struct pldm_set_bios_table_req* req =
976*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
97748761c62SAndrew Jeffery reinterpret_cast<struct pldm_set_bios_table_req*>(request->payload);
97848761c62SAndrew Jeffery
97948761c62SAndrew Jeffery EXPECT_EQ(htole32(transferHandle), req->transfer_handle);
98048761c62SAndrew Jeffery EXPECT_EQ(transferFlag, req->transfer_flag);
98148761c62SAndrew Jeffery EXPECT_EQ(tableType, req->table_type);
98248761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(&tableData, req->table_data, sizeof(tableData)));
98348761c62SAndrew Jeffery }
98448761c62SAndrew Jeffery
TEST(SetBIOSTable,testBadEncodeRequest)98548761c62SAndrew Jeffery TEST(SetBIOSTable, testBadEncodeRequest)
98648761c62SAndrew Jeffery {
98748761c62SAndrew Jeffery uint8_t instanceId = 10;
98848761c62SAndrew Jeffery uint32_t transferHandle = 32;
98948761c62SAndrew Jeffery uint8_t transferFlag = PLDM_START_AND_END;
99048761c62SAndrew Jeffery uint8_t tableType = PLDM_BIOS_STRING_TABLE;
99148761c62SAndrew Jeffery uint32_t tableData = 44;
99248761c62SAndrew Jeffery std::array<uint8_t,
99348761c62SAndrew Jeffery hdrSize + PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES + sizeof(tableData)>
99448761c62SAndrew Jeffery requestMsg{};
995*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
99648761c62SAndrew Jeffery auto request = reinterpret_cast<pldm_msg*>(requestMsg.data());
99748761c62SAndrew Jeffery
99848761c62SAndrew Jeffery auto rc = encode_set_bios_table_req(
99948761c62SAndrew Jeffery instanceId, transferHandle, transferFlag, tableType, NULL,
100048761c62SAndrew Jeffery sizeof(tableData), request, requestMsg.size() - hdrSize);
100148761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
100248761c62SAndrew Jeffery
100348761c62SAndrew Jeffery rc = encode_set_bios_table_req(
100448761c62SAndrew Jeffery instanceId, transferHandle, transferFlag, tableType,
1005*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
100648761c62SAndrew Jeffery reinterpret_cast<uint8_t*>(&tableData), sizeof(tableData), request,
100748761c62SAndrew Jeffery requestMsg.size() - hdrSize + 1);
100848761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
100948761c62SAndrew Jeffery }
101048761c62SAndrew Jeffery
TEST(SetBIOSTable,testGoodDecodeResponse)101148761c62SAndrew Jeffery TEST(SetBIOSTable, testGoodDecodeResponse)
101248761c62SAndrew Jeffery {
101348761c62SAndrew Jeffery uint32_t nextTransferHandle = 32;
101448761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
101548761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_SET_BIOS_TABLE_RESP_BYTES> responseMsg{};
101648761c62SAndrew Jeffery struct pldm_msg* response =
1017*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
101848761c62SAndrew Jeffery reinterpret_cast<struct pldm_msg*>(responseMsg.data());
101948761c62SAndrew Jeffery struct pldm_set_bios_table_resp* resp =
1020*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
102148761c62SAndrew Jeffery reinterpret_cast<struct pldm_set_bios_table_resp*>(response->payload);
102248761c62SAndrew Jeffery
102348761c62SAndrew Jeffery resp->completion_code = completionCode;
102448761c62SAndrew Jeffery resp->next_transfer_handle = htole32(nextTransferHandle);
102548761c62SAndrew Jeffery
102648761c62SAndrew Jeffery uint8_t retCompletionCode;
102748761c62SAndrew Jeffery uint32_t retNextTransferHandle;
102848761c62SAndrew Jeffery auto rc =
102948761c62SAndrew Jeffery decode_set_bios_table_resp(response, responseMsg.size() - hdrSize,
103048761c62SAndrew Jeffery &retCompletionCode, &retNextTransferHandle);
103148761c62SAndrew Jeffery
103248761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
103348761c62SAndrew Jeffery EXPECT_EQ(completionCode, retCompletionCode);
103448761c62SAndrew Jeffery EXPECT_EQ(nextTransferHandle, retNextTransferHandle);
103548761c62SAndrew Jeffery }
103648761c62SAndrew Jeffery
TEST(SetBIOSTable,testBadDecodeResponse)103748761c62SAndrew Jeffery TEST(SetBIOSTable, testBadDecodeResponse)
103848761c62SAndrew Jeffery {
103948761c62SAndrew Jeffery uint32_t nextTransferHandle = 32;
104048761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
104148761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_SET_BIOS_TABLE_RESP_BYTES> responseMsg{};
104248761c62SAndrew Jeffery struct pldm_msg* response =
1043*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
104448761c62SAndrew Jeffery reinterpret_cast<struct pldm_msg*>(responseMsg.data());
104548761c62SAndrew Jeffery struct pldm_set_bios_table_resp* resp =
1046*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
104748761c62SAndrew Jeffery reinterpret_cast<struct pldm_set_bios_table_resp*>(response->payload);
104848761c62SAndrew Jeffery
104948761c62SAndrew Jeffery resp->completion_code = completionCode;
105048761c62SAndrew Jeffery resp->next_transfer_handle = htole32(nextTransferHandle);
105148761c62SAndrew Jeffery
105248761c62SAndrew Jeffery uint8_t retCompletionCode;
105348761c62SAndrew Jeffery uint32_t retNextTransferHandle;
105448761c62SAndrew Jeffery
105548761c62SAndrew Jeffery auto rc = decode_set_bios_table_resp(NULL, responseMsg.size() - hdrSize,
105648761c62SAndrew Jeffery NULL, NULL);
105748761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
105848761c62SAndrew Jeffery
105948761c62SAndrew Jeffery rc = decode_set_bios_table_resp(response, responseMsg.size() - hdrSize + 1,
106048761c62SAndrew Jeffery &retCompletionCode, &retNextTransferHandle);
106148761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
106248761c62SAndrew Jeffery }
106348761c62SAndrew Jeffery
TEST(SetBIOSTable,testGoodEncodeResponse)106448761c62SAndrew Jeffery TEST(SetBIOSTable, testGoodEncodeResponse)
106548761c62SAndrew Jeffery {
106648761c62SAndrew Jeffery uint8_t instanceId = 10;
106748761c62SAndrew Jeffery uint32_t nextTransferHandle = 32;
106848761c62SAndrew Jeffery uint8_t completionCode = PLDM_SUCCESS;
106948761c62SAndrew Jeffery
107048761c62SAndrew Jeffery std::array<uint8_t, hdrSize + PLDM_SET_BIOS_TABLE_RESP_BYTES> responseMsg{};
107148761c62SAndrew Jeffery struct pldm_msg* response =
1072*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
107348761c62SAndrew Jeffery reinterpret_cast<struct pldm_msg*>(responseMsg.data());
107448761c62SAndrew Jeffery auto rc = encode_set_bios_table_resp(instanceId, completionCode,
107548761c62SAndrew Jeffery nextTransferHandle, response);
107648761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
107748761c62SAndrew Jeffery
107848761c62SAndrew Jeffery struct pldm_set_bios_table_resp* resp =
1079*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
108048761c62SAndrew Jeffery reinterpret_cast<struct pldm_set_bios_table_resp*>(response->payload);
108148761c62SAndrew Jeffery EXPECT_EQ(completionCode, resp->completion_code);
108248761c62SAndrew Jeffery EXPECT_EQ(htole32(nextTransferHandle), resp->next_transfer_handle);
108348761c62SAndrew Jeffery }
108448761c62SAndrew Jeffery
TEST(SetBIOSTable,testBadEncodeResponse)108548761c62SAndrew Jeffery TEST(SetBIOSTable, testBadEncodeResponse)
108648761c62SAndrew Jeffery {
108748761c62SAndrew Jeffery auto rc = encode_set_bios_table_resp(0, PLDM_SUCCESS, 1, NULL);
108848761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
108948761c62SAndrew Jeffery }
109048761c62SAndrew Jeffery
TEST(SetBIOSTable,testGoodDecodeRequest)109148761c62SAndrew Jeffery TEST(SetBIOSTable, testGoodDecodeRequest)
109248761c62SAndrew Jeffery {
109348761c62SAndrew Jeffery uint32_t transferHandle = 32;
109448761c62SAndrew Jeffery uint8_t transferFlag = PLDM_START_AND_END;
109548761c62SAndrew Jeffery uint8_t tableType = PLDM_BIOS_STRING_TABLE;
109648761c62SAndrew Jeffery uint32_t tableData = 44;
109748761c62SAndrew Jeffery
109848761c62SAndrew Jeffery std::array<uint8_t,
109948761c62SAndrew Jeffery hdrSize + PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES + sizeof(tableData)>
110048761c62SAndrew Jeffery requestMsg{};
1101*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
110248761c62SAndrew Jeffery auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
110348761c62SAndrew Jeffery struct pldm_set_bios_table_req* req =
1104*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
110548761c62SAndrew Jeffery reinterpret_cast<struct pldm_set_bios_table_req*>(request->payload);
110648761c62SAndrew Jeffery req->transfer_handle = htole32(transferHandle);
110748761c62SAndrew Jeffery req->transfer_flag = transferFlag;
110848761c62SAndrew Jeffery req->table_type = tableType;
110948761c62SAndrew Jeffery memcpy(req->table_data, &tableData, sizeof(tableData));
111048761c62SAndrew Jeffery
111148761c62SAndrew Jeffery uint32_t retTransferHandle;
111248761c62SAndrew Jeffery uint8_t retTransferFlag;
111348761c62SAndrew Jeffery uint8_t retTableType;
111448761c62SAndrew Jeffery struct variable_field table;
111548761c62SAndrew Jeffery auto rc = decode_set_bios_table_req(request, requestMsg.size() - hdrSize,
111648761c62SAndrew Jeffery &retTransferHandle, &retTransferFlag,
111748761c62SAndrew Jeffery &retTableType, &table);
111848761c62SAndrew Jeffery
111948761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_SUCCESS);
112048761c62SAndrew Jeffery EXPECT_EQ(retTransferHandle, transferHandle);
112148761c62SAndrew Jeffery EXPECT_EQ(retTransferFlag, transferFlag);
112248761c62SAndrew Jeffery EXPECT_EQ(retTableType, tableType);
112348761c62SAndrew Jeffery EXPECT_EQ(table.length, sizeof(tableData));
112448761c62SAndrew Jeffery EXPECT_EQ(0, memcmp(table.ptr, &tableData, sizeof(tableData)));
112548761c62SAndrew Jeffery }
112648761c62SAndrew Jeffery
TEST(SetBIOSTable,testBadDecodeRequest)112748761c62SAndrew Jeffery TEST(SetBIOSTable, testBadDecodeRequest)
112848761c62SAndrew Jeffery {
112948761c62SAndrew Jeffery uint32_t transferHandle = 32;
113048761c62SAndrew Jeffery uint8_t transferFlag = PLDM_START_AND_END;
113148761c62SAndrew Jeffery uint8_t tableType = PLDM_BIOS_STRING_TABLE;
113248761c62SAndrew Jeffery uint32_t tableData = 44;
113348761c62SAndrew Jeffery
113448761c62SAndrew Jeffery std::array<uint8_t,
113548761c62SAndrew Jeffery hdrSize + PLDM_SET_BIOS_TABLE_MIN_REQ_BYTES + sizeof(tableData)>
113648761c62SAndrew Jeffery requestMsg{};
1137*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
113848761c62SAndrew Jeffery auto request = reinterpret_cast<struct pldm_msg*>(requestMsg.data());
113948761c62SAndrew Jeffery struct pldm_set_bios_table_req* req =
1140*d0ba43afSAndrew Jeffery // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
114148761c62SAndrew Jeffery reinterpret_cast<struct pldm_set_bios_table_req*>(request->payload);
114248761c62SAndrew Jeffery req->transfer_handle = htole32(transferHandle);
114348761c62SAndrew Jeffery req->transfer_flag = transferFlag;
114448761c62SAndrew Jeffery req->table_type = tableType;
114548761c62SAndrew Jeffery memcpy(req->table_data, &tableData, sizeof(tableData));
114648761c62SAndrew Jeffery
114748761c62SAndrew Jeffery uint32_t retTransferHandle;
114848761c62SAndrew Jeffery uint8_t retTransferFlag;
114948761c62SAndrew Jeffery uint8_t retTableType;
115048761c62SAndrew Jeffery
115148761c62SAndrew Jeffery auto rc = decode_set_bios_table_req(request, requestMsg.size() - hdrSize,
115248761c62SAndrew Jeffery &retTransferHandle, &retTransferFlag,
115348761c62SAndrew Jeffery &retTableType, NULL);
115448761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
115548761c62SAndrew Jeffery
115648761c62SAndrew Jeffery struct variable_field table;
115748761c62SAndrew Jeffery rc = decode_set_bios_table_req(
115848761c62SAndrew Jeffery request, requestMsg.size() - hdrSize - sizeof(tableData) - 1,
115948761c62SAndrew Jeffery &retTransferHandle, &retTransferFlag, &retTableType, &table);
116048761c62SAndrew Jeffery EXPECT_EQ(rc, PLDM_ERROR_INVALID_LENGTH);
116148761c62SAndrew Jeffery }
1162