pldm: Refector PDR repo based on the new PDR APIs
The related APIs for PDR operations is implemented in
pldm/libpldm/pdr.h and pldm/libpldm/pdr.c, we need to use this instead
of pdr::Repo(defined in libpldmresponder/pdr.hpp).
pdr::Repo is now a C++ wrapper around the PDR APIs in libpldm.
Tested with unit tests, with JSON files:
https://gist.github.com/lxwinspur/2c3fd68cdb35e06480c4a5f7890e3a06#file-effecter_pdr-json.
$ pldmtool platform GetPDR -d 0
Encode request successfully
Request Message:
08 01 80 02 51 00 00 00 00 00 00 00 00 01 80 00 00 00
Success in creating the socket : RC = 3
Success in connecting to socket : RC = 0
Success in sending message type as pldm to mctp : RC = 0
Write to socket successful : RC = 18
Total length:18
Loopback response message:
08 01 80 02 51 00 00 00 00 00 00 00 00 01 80 00 00 00
On first recv(),response == request : RC = 0
Total length: 46
Shutdown Socket successful : RC = 0
Response Message:
08 01 00 02 51 00 02 00 00 00 00 00 00 00 01 1d 00 01 00 00 00 01 0b 00 00 13 00 00 00 01 00 21 00 00 00 00 00 00 00 00 00 01 c4 00 01 06
Parsed Response Msg:
nextRecordHandle: 2
responseCount: 29
recordHandle: 1
PDRHeaderVersion: 1
PDRType: 11
recordChangeNumber: 0
dataLength: 19
PLDMTerminusHandle: 0
effecterID: 1
entityType: 33
entityInstanceNumber: 0
containerID: 0
effecterSemanticID: 0
effecterInit: 0
effecterDescriptionPDR: false
compositeEffecterCount: 1
stateSetID: 196
possibleStatesSize: 1
possibleStates: 6
Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: I0c41f888b2e36a5a49968dff190ad8d53255b9ed
diff --git a/test/libpldmresponder_pdr_state_effecter_test.cpp b/test/libpldmresponder_pdr_state_effecter_test.cpp
index e758f63..c2b114c 100644
--- a/test/libpldmresponder_pdr_state_effecter_test.cpp
+++ b/test/libpldmresponder_pdr_state_effecter_test.cpp
@@ -1,5 +1,6 @@
#include "libpldmresponder/effecters.hpp"
#include "libpldmresponder/pdr.hpp"
+#include "libpldmresponder/pdr_utils.hpp"
#include "libpldm/platform.h"
@@ -9,17 +10,19 @@
TEST(GeneratePDR, testGoodJson)
{
- using namespace pdr;
using namespace effecter::dbus_mapping;
- Repo& pdrRepo = get("./pdr_jsons/state_effecter/good");
+ pdr_utils::Repo pdrRepo = pdr::getRepoByType(
+ "./pdr_jsons/state_effecter/good", PLDM_STATE_EFFECTER_PDR);
// 2 entries
- ASSERT_EQ(pdrRepo.numEntries(), 2);
+ ASSERT_EQ(pdrRepo.getRecordCount(), 2);
// Check first PDR
- pdr::Entry e = pdrRepo.at(1);
+ pdr_utils::PdrEntry e;
+ auto record1 = pdr::getRecordByHandle(pdrRepo, 1, e);
+ ASSERT_NE(record1, nullptr);
pldm_state_effecter_pdr* pdr =
- reinterpret_cast<pldm_state_effecter_pdr*>(e.data());
+ reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
ASSERT_EQ(pdr->hdr.record_handle, 1);
ASSERT_EQ(pdr->hdr.version, 1);
@@ -48,8 +51,9 @@
ASSERT_EQ(paths[0], "/foo/bar");
// Check second PDR
- e = pdrRepo.at(2);
- pdr = reinterpret_cast<pldm_state_effecter_pdr*>(e.data());
+ auto record2 = pdr::getRecordByHandle(pdrRepo, 2, e);
+ ASSERT_NE(record2, nullptr);
+ pdr = reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
ASSERT_EQ(pdr->hdr.record_handle, 2);
ASSERT_EQ(pdr->hdr.version, 1);
@@ -91,19 +95,14 @@
TEST(GeneratePDR, testNoJson)
{
- using namespace pdr;
- Repo& pdrRepo = get("./pdr_jsons/not_there");
-
- ASSERT_EQ(pdrRepo.numEntries(), 2);
+ ASSERT_THROW(pdr_utils::readJson("./pdr_jsons/not_there"), std::exception);
}
TEST(GeneratePDR, testMalformedJson)
{
- using namespace pdr;
- Repo& pdrRepo = get("./pdr_jsons/state_effecter/good");
- ASSERT_EQ(pdrRepo.numEntries(), 2);
- pdrRepo.makeEmpty();
- ASSERT_THROW(pldm::responder::pdr::internal::readJson(
- "./pdr_jsons/state_effecter/malformed"),
+ pdr_utils::Repo pdrRepo = pdr::getRepoByType(
+ "./pdr_jsons/state_effecter/good", PLDM_STATE_EFFECTER_PDR);
+ ASSERT_EQ(pdrRepo.getRecordCount(), 2);
+ ASSERT_THROW(pdr_utils::readJson("./pdr_jsons/state_effecter/malformed"),
std::exception);
}