blob: f1ecfc3e26a731b20089d84727fe5029393f8fb6 [file] [log] [blame]
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -05001#include "common/utils.hpp"
Deepak Kodihalli1b24f972019-02-01 04:09:13 -06002#include "libpldmresponder/base.hpp"
Andrew Jeffery7c1dc7e2023-04-28 14:52:16 +09303#include "pldmd/instance_id.hpp"
4#include "test/test_instance_id.hpp"
Deepak Kodihalli1b24f972019-02-01 04:09:13 -06005
George Liuc453e162022-12-21 17:16:23 +08006#include <libpldm/base.h>
Deepak Kodihalli1b24f972019-02-01 04:09:13 -06007#include <string.h>
8
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -05009#include <sdeventplus/event.hpp>
10
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060011#include <array>
12
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060013#include <gtest/gtest.h>
14
15using namespace pldm::responder;
16
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050017class TestBaseCommands : public testing::Test
18{
19 protected:
20 TestBaseCommands() :
Andrew Jeffery7c1dc7e2023-04-28 14:52:16 +093021 instanceIdDb(), requester(pldm::utils::DBusHandler::getBus(),
22 "/abc/def", this->instanceIdDb),
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050023 event(sdeventplus::Event::get_default())
24 {}
25
26 uint8_t mctpEid = 0;
Andrew Jeffery7c1dc7e2023-04-28 14:52:16 +093027 TestInstanceIdDb instanceIdDb;
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050028 Requester requester;
29 sdeventplus::Event event;
30};
31
32TEST_F(TestBaseCommands, testPLDMTypesGoodRequest)
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060033{
vkaverapa6575b82019-04-03 05:33:52 -050034 std::array<uint8_t, sizeof(pldm_msg_hdr)> requestPayload{};
35 auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
36 // payload length will be 0 in this case
37 size_t requestPayloadLength = 0;
Sagar Srinivas79669c92021-04-28 15:43:30 -050038 base::Handler handler(mctpEid, requester, event, nullptr, nullptr);
Deepak Kodihallibc669f12019-11-28 08:52:07 -060039 auto response = handler.getPLDMTypes(request, requestPayloadLength);
Sridevi Rameshf58d9a52020-02-14 00:30:58 -060040 // Need to support OEM type.
vkaverapa6575b82019-04-03 05:33:52 -050041 auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
42 uint8_t* payload_ptr = responsePtr->payload;
43 ASSERT_EQ(payload_ptr[0], 0);
Sridevi Rameshf58d9a52020-02-14 00:30:58 -060044 ASSERT_EQ(payload_ptr[1], 29); // 0b11101 see DSP0240 table11
vkaverapa6575b82019-04-03 05:33:52 -050045 ASSERT_EQ(payload_ptr[2], 0);
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060046}
47
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050048TEST_F(TestBaseCommands, testGetPLDMCommandsGoodRequest)
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060049{
Sridevi Rameshf58d9a52020-02-14 00:30:58 -060050 // Need to support OEM type commands.
vkaverapa6575b82019-04-03 05:33:52 -050051 std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_COMMANDS_REQ_BYTES>
52 requestPayload{};
53 auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
54 size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
Sagar Srinivas79669c92021-04-28 15:43:30 -050055 base::Handler handler(mctpEid, requester, event, nullptr, nullptr);
Deepak Kodihallibc669f12019-11-28 08:52:07 -060056 auto response = handler.getPLDMCommands(request, requestPayloadLength);
vkaverapa6575b82019-04-03 05:33:52 -050057 auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
58 uint8_t* payload_ptr = responsePtr->payload;
59 ASSERT_EQ(payload_ptr[0], 0);
John Wang5c4f80d2019-07-29 11:12:18 +080060 ASSERT_EQ(payload_ptr[1], 60); // 60 = 0b111100
vkaverapa6575b82019-04-03 05:33:52 -050061 ASSERT_EQ(payload_ptr[2], 0);
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060062}
63
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050064TEST_F(TestBaseCommands, testGetPLDMCommandsBadRequest)
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060065{
vkaverapa6575b82019-04-03 05:33:52 -050066 std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_COMMANDS_REQ_BYTES>
67 requestPayload{};
68 auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060069
vkaverapa6575b82019-04-03 05:33:52 -050070 request->payload[0] = 0xFF;
71 size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
Sagar Srinivas79669c92021-04-28 15:43:30 -050072 base::Handler handler(mctpEid, requester, event, nullptr, nullptr);
Deepak Kodihallibc669f12019-11-28 08:52:07 -060073 auto response = handler.getPLDMCommands(request, requestPayloadLength);
vkaverapa6575b82019-04-03 05:33:52 -050074 auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
75 uint8_t* payload_ptr = responsePtr->payload;
76 ASSERT_EQ(payload_ptr[0], PLDM_ERROR_INVALID_PLDM_TYPE);
Deepak Kodihalli1b24f972019-02-01 04:09:13 -060077}
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -050078
79TEST_F(TestBaseCommands, testGetPLDMVersionGoodRequest)
Sampa Misra432e1872019-02-13 03:49:43 -060080{
vkaverapa6575b82019-04-03 05:33:52 -050081 std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_VERSION_REQ_BYTES>
82 requestPayload{};
83 auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
84 size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
Sampa Misra432e1872019-02-13 03:49:43 -060085
86 uint8_t pldmType = PLDM_BASE;
87 uint32_t transferHandle = 0x0;
88 uint8_t flag = PLDM_GET_FIRSTPART;
89 uint8_t retFlag = PLDM_START_AND_END;
Manojkiran Edacb454672022-06-29 11:05:42 +053090 ver32_t version = {0x00, 0xF0, 0xF0, 0xF1};
Sampa Misra432e1872019-02-13 03:49:43 -060091
Patrick Williams6da4f912023-05-10 07:50:53 -050092 auto rc = encode_get_version_req(0, transferHandle, flag, pldmType,
93 request);
Sampa Misra432e1872019-02-13 03:49:43 -060094
95 ASSERT_EQ(0, rc);
96
Sagar Srinivas79669c92021-04-28 15:43:30 -050097 base::Handler handler(mctpEid, requester, event, nullptr, nullptr);
Deepak Kodihallibc669f12019-11-28 08:52:07 -060098 auto response = handler.getPLDMVersion(request, requestPayloadLength);
vkaverapa6575b82019-04-03 05:33:52 -050099 auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
Sampa Misra432e1872019-02-13 03:49:43 -0600100
vkaverapa6575b82019-04-03 05:33:52 -0500101 ASSERT_EQ(responsePtr->payload[0], 0);
102 ASSERT_EQ(0, memcmp(responsePtr->payload + sizeof(responsePtr->payload[0]),
103 &transferHandle, sizeof(transferHandle)));
104 ASSERT_EQ(0, memcmp(responsePtr->payload + sizeof(responsePtr->payload[0]) +
105 sizeof(transferHandle),
106 &retFlag, sizeof(flag)));
107 ASSERT_EQ(0, memcmp(responsePtr->payload + sizeof(responsePtr->payload[0]) +
108 sizeof(transferHandle) + sizeof(flag),
109 &version, sizeof(version)));
Sampa Misra432e1872019-02-13 03:49:43 -0600110}
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -0500111
112TEST_F(TestBaseCommands, testGetPLDMVersionBadRequest)
Sampa Misra94d704b2019-02-22 03:36:02 -0600113{
vkaverapa6575b82019-04-03 05:33:52 -0500114 std::array<uint8_t, sizeof(pldm_msg_hdr) + PLDM_GET_VERSION_REQ_BYTES>
115 requestPayload{};
116 auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
117 size_t requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
Sampa Misra94d704b2019-02-22 03:36:02 -0600118
119 uint8_t pldmType = 7;
120 uint32_t transferHandle = 0x0;
121 uint8_t flag = PLDM_GET_FIRSTPART;
122
Patrick Williams6da4f912023-05-10 07:50:53 -0500123 auto rc = encode_get_version_req(0, transferHandle, flag, pldmType,
124 request);
Sampa Misra94d704b2019-02-22 03:36:02 -0600125
126 ASSERT_EQ(0, rc);
127
Sagar Srinivas79669c92021-04-28 15:43:30 -0500128 base::Handler handler(mctpEid, requester, event, nullptr, nullptr);
Deepak Kodihallibc669f12019-11-28 08:52:07 -0600129 auto response = handler.getPLDMVersion(request, requestPayloadLength - 1);
vkaverapa6575b82019-04-03 05:33:52 -0500130 auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
Sampa Misra94d704b2019-02-22 03:36:02 -0600131
vkaverapa6575b82019-04-03 05:33:52 -0500132 ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_LENGTH);
Sampa Misra94d704b2019-02-22 03:36:02 -0600133
vkaverapa6575b82019-04-03 05:33:52 -0500134 request = reinterpret_cast<pldm_msg*>(requestPayload.data());
135 requestPayloadLength = requestPayload.size() - sizeof(pldm_msg_hdr);
Sampa Misra94d704b2019-02-22 03:36:02 -0600136
vkaverapa6575b82019-04-03 05:33:52 -0500137 rc = encode_get_version_req(0, transferHandle, flag, pldmType, request);
Sampa Misra94d704b2019-02-22 03:36:02 -0600138
139 ASSERT_EQ(0, rc);
140
Deepak Kodihallibc669f12019-11-28 08:52:07 -0600141 response = handler.getPLDMVersion(request, requestPayloadLength);
vkaverapa6575b82019-04-03 05:33:52 -0500142 responsePtr = reinterpret_cast<pldm_msg*>(response.data());
Sampa Misra94d704b2019-02-22 03:36:02 -0600143
vkaverapa6575b82019-04-03 05:33:52 -0500144 ASSERT_EQ(responsePtr->payload[0], PLDM_ERROR_INVALID_PLDM_TYPE);
Sampa Misra94d704b2019-02-22 03:36:02 -0600145}
John Wang5c4f80d2019-07-29 11:12:18 +0800146
Sagar Srinivasa6a8ccd2021-04-01 07:58:33 -0500147TEST_F(TestBaseCommands, testGetTIDGoodRequest)
John Wang5c4f80d2019-07-29 11:12:18 +0800148{
149 std::array<uint8_t, sizeof(pldm_msg_hdr)> requestPayload{};
150 auto request = reinterpret_cast<pldm_msg*>(requestPayload.data());
151 size_t requestPayloadLength = 0;
152
Sagar Srinivas79669c92021-04-28 15:43:30 -0500153 base::Handler handler(mctpEid, requester, event, nullptr, nullptr);
Deepak Kodihallibc669f12019-11-28 08:52:07 -0600154 auto response = handler.getTID(request, requestPayloadLength);
John Wang5c4f80d2019-07-29 11:12:18 +0800155
156 auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
157 uint8_t* payload = responsePtr->payload;
158
159 ASSERT_EQ(payload[0], 0);
160 ASSERT_EQ(payload[1], 1);
161}