More PDR refactor
- PDRs can be created not just by the platform monitoring and control
handlers, but by other handlers (eg FRU) as well.
- For this purpose, create the PDR repo in the pldm daemon, and pass it
to the handlers. This change warranted some refactor.
Signed-off-by: Deepak Kodihalli <dkodihal@in.ibm.com>
Change-Id: I4e789da9bae99dee1b535d92ce98ae5bb8eed62b
Signed-off-by: George Liu <liuxiwei@inspur.com>
diff --git a/test/libpldmresponder_pdr_state_effecter_test.cpp b/test/libpldmresponder_pdr_state_effecter_test.cpp
index c2b114c..5c197dd 100644
--- a/test/libpldmresponder_pdr_state_effecter_test.cpp
+++ b/test/libpldmresponder_pdr_state_effecter_test.cpp
@@ -1,25 +1,30 @@
-#include "libpldmresponder/effecters.hpp"
-#include "libpldmresponder/pdr.hpp"
#include "libpldmresponder/pdr_utils.hpp"
+#include "libpldmresponder/platform.hpp"
#include "libpldm/platform.h"
#include <gtest/gtest.h>
using namespace pldm::responder;
+using namespace pldm::responder::platform;
+using namespace pldm::responder::pdr;
+using namespace pldm::responder::pdr_utils;
TEST(GeneratePDR, testGoodJson)
{
- using namespace effecter::dbus_mapping;
- pdr_utils::Repo pdrRepo = pdr::getRepoByType(
- "./pdr_jsons/state_effecter/good", PLDM_STATE_EFFECTER_PDR);
+ auto inPDRRepo = pldm_pdr_init();
+ auto outPDRRepo = pldm_pdr_init();
+ Repo outRepo(outPDRRepo);
+ Handler handler("./pdr_jsons/state_effecter/good", inPDRRepo);
+ Repo inRepo(inPDRRepo);
+ getRepoByType(inRepo, outRepo, PLDM_STATE_EFFECTER_PDR);
// 2 entries
- ASSERT_EQ(pdrRepo.getRecordCount(), 2);
+ ASSERT_EQ(outRepo.getRecordCount(), 2);
// Check first PDR
pdr_utils::PdrEntry e;
- auto record1 = pdr::getRecordByHandle(pdrRepo, 1, e);
+ auto record1 = pdr::getRecordByHandle(outRepo, 1, e);
ASSERT_NE(record1, nullptr);
pldm_state_effecter_pdr* pdr =
reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
@@ -47,11 +52,11 @@
bf1.byte = 2;
ASSERT_EQ(states->states[0].byte, bf1.byte);
- auto paths = get(pdr->effecter_id);
+ const auto& paths = handler.getEffecterObjs(pdr->effecter_id);
ASSERT_EQ(paths[0], "/foo/bar");
// Check second PDR
- auto record2 = pdr::getRecordByHandle(pdrRepo, 2, e);
+ auto record2 = pdr::getRecordByHandle(outRepo, 2, e);
ASSERT_NE(record2, nullptr);
pdr = reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
@@ -86,23 +91,38 @@
ASSERT_EQ(states->states[0].byte, bf2[0].byte);
ASSERT_EQ(states->states[1].byte, bf2[1].byte);
- paths = get(pdr->effecter_id);
- ASSERT_EQ(paths[0], "/foo/bar");
- ASSERT_EQ(paths[1], "/foo/bar/baz");
+ const auto& paths1 = handler.getEffecterObjs(pdr->effecter_id);
+ ASSERT_EQ(paths1[0], "/foo/bar");
+ ASSERT_EQ(paths1[1], "/foo/bar/baz");
- ASSERT_THROW(get(0xDEAD), std::exception);
+ ASSERT_THROW(handler.getEffecterObjs(0xDEAD), std::exception);
+
+ pldm_pdr_destroy(inPDRRepo);
+ pldm_pdr_destroy(outPDRRepo);
}
TEST(GeneratePDR, testNoJson)
{
- ASSERT_THROW(pdr_utils::readJson("./pdr_jsons/not_there"), std::exception);
+ auto pdrRepo = pldm_pdr_init();
+
+ ASSERT_THROW(Handler("./pdr_jsons/not_there", pdrRepo), std::exception);
+
+ pldm_pdr_destroy(pdrRepo);
}
TEST(GeneratePDR, testMalformedJson)
{
- pdr_utils::Repo pdrRepo = pdr::getRepoByType(
- "./pdr_jsons/state_effecter/good", PLDM_STATE_EFFECTER_PDR);
- ASSERT_EQ(pdrRepo.getRecordCount(), 2);
+ auto inPDRRepo = pldm_pdr_init();
+ auto outPDRRepo = pldm_pdr_init();
+ Repo outRepo(outPDRRepo);
+ Handler handler("./pdr_jsons/state_effecter/good", inPDRRepo);
+ Repo inRepo(inPDRRepo);
+ getRepoByType(inRepo, outRepo, PLDM_STATE_EFFECTER_PDR);
+
+ ASSERT_EQ(outRepo.getRecordCount(), 2);
ASSERT_THROW(pdr_utils::readJson("./pdr_jsons/state_effecter/malformed"),
std::exception);
+
+ pldm_pdr_destroy(inPDRRepo);
+ pldm_pdr_destroy(outPDRRepo);
}
diff --git a/test/libpldmresponder_platform_test.cpp b/test/libpldmresponder_platform_test.cpp
index 8252920..d1241c2 100644
--- a/test/libpldmresponder_platform_test.cpp
+++ b/test/libpldmresponder_platform_test.cpp
@@ -1,4 +1,3 @@
-#include "libpldmresponder/effecters.hpp"
#include "libpldmresponder/pdr.hpp"
#include "libpldmresponder/pdr_utils.hpp"
#include "libpldmresponder/platform.hpp"
@@ -10,6 +9,9 @@
#include <gtest/gtest.h>
using namespace pldm::responder;
+using namespace pldm::responder::platform;
+using namespace pldm::responder::pdr;
+using namespace pldm::responder::pdr_utils;
TEST(getPDR, testGoodPath)
{
@@ -22,10 +24,10 @@
reinterpret_cast<struct pldm_get_pdr_req*>(req->payload);
request->request_count = 100;
- pdr_utils::RepoInterface& pdrRepo =
- pdr::getRepo("./pdr_jsons/state_effecter/good");
- ASSERT_EQ(pdrRepo.empty(), false);
- platform::Handler handler;
+ auto pdrRepo = pldm_pdr_init();
+ Handler handler("./pdr_jsons/state_effecter/good", pdrRepo);
+ Repo repo(pdrRepo);
+ ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
@@ -38,6 +40,8 @@
pldm_pdr_hdr* hdr = reinterpret_cast<pldm_pdr_hdr*>(resp->record_data);
ASSERT_EQ(hdr->record_handle, 1);
ASSERT_EQ(hdr->version, 1);
+
+ pldm_pdr_destroy(pdrRepo);
}
TEST(getPDR, testShortRead)
@@ -51,16 +55,17 @@
reinterpret_cast<struct pldm_get_pdr_req*>(req->payload);
request->request_count = 1;
- pdr_utils::RepoInterface& pdrRepo =
- pdr::getRepo("./pdr_jsons/state_effecter/good");
- ASSERT_EQ(pdrRepo.empty(), false);
- platform::Handler handler;
+ auto pdrRepo = pldm_pdr_init();
+ Handler handler("./pdr_jsons/state_effecter/good", pdrRepo);
+ Repo repo(pdrRepo);
+ ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
struct pldm_get_pdr_resp* resp =
reinterpret_cast<struct pldm_get_pdr_resp*>(responsePtr->payload);
ASSERT_EQ(PLDM_SUCCESS, resp->completion_code);
ASSERT_EQ(1, resp->response_count);
+ pldm_pdr_destroy(pdrRepo);
}
TEST(getPDR, testBadRecordHandle)
@@ -75,14 +80,16 @@
request->record_handle = 100000;
request->request_count = 1;
- pdr_utils::RepoInterface& pdrRepo =
- pdr::getRepo("./pdr_jsons/state_effecter/good");
- ASSERT_EQ(pdrRepo.empty(), false);
- platform::Handler handler;
+ auto pdrRepo = pldm_pdr_init();
+ Handler handler("./pdr_jsons/state_effecter/good", pdrRepo);
+ Repo repo(pdrRepo);
+ ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
ASSERT_EQ(responsePtr->payload[0], PLDM_PLATFORM_INVALID_RECORD_HANDLE);
+
+ pldm_pdr_destroy(pdrRepo);
}
TEST(getPDR, testNoNextRecord)
@@ -96,16 +103,18 @@
reinterpret_cast<struct pldm_get_pdr_req*>(req->payload);
request->record_handle = 1;
- pdr_utils::RepoInterface& pdrRepo =
- pdr::getRepo("./pdr_jsons/state_effecter/good");
- ASSERT_EQ(pdrRepo.empty(), false);
- platform::Handler handler;
+ auto pdrRepo = pldm_pdr_init();
+ Handler handler("./pdr_jsons/state_effecter/good", pdrRepo);
+ Repo repo(pdrRepo);
+ ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
struct pldm_get_pdr_resp* resp =
reinterpret_cast<struct pldm_get_pdr_resp*>(responsePtr->payload);
ASSERT_EQ(PLDM_SUCCESS, resp->completion_code);
ASSERT_EQ(2, resp->next_record_handle);
+
+ pldm_pdr_destroy(pdrRepo);
}
TEST(getPDR, testFindPDR)
@@ -119,10 +128,10 @@
reinterpret_cast<struct pldm_get_pdr_req*>(req->payload);
request->request_count = 100;
- pdr_utils::RepoInterface& pdrRepo =
- pdr::getRepo("./pdr_jsons/state_effecter/good");
- ASSERT_EQ(pdrRepo.empty(), false);
- platform::Handler handler;
+ auto pdrRepo = pldm_pdr_init();
+ Handler handler("./pdr_jsons/state_effecter/good", pdrRepo);
+ Repo repo(pdrRepo);
+ ASSERT_EQ(repo.empty(), false);
auto response = handler.getPDR(req, requestPayloadLength);
// Let's try to find a PDR of type stateEffecter (= 11) and entity type =
@@ -132,7 +141,6 @@
while (!found)
{
request->record_handle = handle;
- platform::Handler handler;
auto response = handler.getPDR(req, requestPayloadLength);
auto responsePtr = reinterpret_cast<pldm_msg*>(response.data());
struct pldm_get_pdr_resp* resp =
@@ -163,6 +171,8 @@
}
}
ASSERT_EQ(found, true);
+
+ pldm_pdr_destroy(pdrRepo);
}
namespace pldm
@@ -187,10 +197,14 @@
TEST(setStateEffecterStatesHandler, testGoodRequest)
{
- pdr_utils::Repo pdrRepo = pdr::getRepoByType(
- "./pdr_jsons/state_effecter/good", PLDM_STATE_EFFECTER_PDR);
+ auto inPDRRepo = pldm_pdr_init();
+ auto outPDRRepo = pldm_pdr_init();
+ Repo outRepo(outPDRRepo);
+ Handler handler("./pdr_jsons/state_effecter/good", inPDRRepo);
+ Repo inRepo(inPDRRepo);
+ getRepoByType(inRepo, outRepo, PLDM_STATE_EFFECTER_PDR);
pdr_utils::PdrEntry e;
- auto record1 = pdr::getRecordByHandle(pdrRepo, 1, e);
+ auto record1 = pdr::getRecordByHandle(outRepo, 1, e);
ASSERT_NE(record1, nullptr);
pldm_state_effecter_pdr* pdr =
reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
@@ -210,18 +224,24 @@
EXPECT_CALL(handlerObj, setDbusProperty(objPath, bootProgressProp,
bootProgressInf, value))
.Times(2);
- platform::Handler handler;
auto rc = handler.setStateEffecterStatesHandler<MockdBusHandler>(
handlerObj, 0x1, stateField);
ASSERT_EQ(rc, 0);
+
+ pldm_pdr_destroy(inPDRRepo);
+ pldm_pdr_destroy(outPDRRepo);
}
TEST(setStateEffecterStatesHandler, testBadRequest)
{
- pdr_utils::Repo pdrRepo = pdr::getRepoByType(
- "./pdr_jsons/state_effecter/good", PLDM_STATE_EFFECTER_PDR);
+ auto inPDRRepo = pldm_pdr_init();
+ auto outPDRRepo = pldm_pdr_init();
+ Repo outRepo(outPDRRepo);
+ Handler handler("./pdr_jsons/state_effecter/good", inPDRRepo);
+ Repo inRepo(inPDRRepo);
+ getRepoByType(inRepo, outRepo, PLDM_STATE_EFFECTER_PDR);
pdr_utils::PdrEntry e;
- auto record1 = pdr::getRecordByHandle(pdrRepo, 1, e);
+ auto record1 = pdr::getRecordByHandle(outRepo, 1, e);
ASSERT_NE(record1, nullptr);
pldm_state_effecter_pdr* pdr =
reinterpret_cast<pldm_state_effecter_pdr*>(e.data);
@@ -232,7 +252,6 @@
stateField.push_back({PLDM_REQUEST_SET, 4});
MockdBusHandler handlerObj;
- platform::Handler handler;
auto rc = handler.setStateEffecterStatesHandler<MockdBusHandler>(
handlerObj, 0x1, stateField);
ASSERT_EQ(rc, PLDM_PLATFORM_SET_EFFECTER_UNSUPPORTED_SENSORSTATE);
@@ -252,4 +271,7 @@
rc = handler.setStateEffecterStatesHandler<MockdBusHandler>(handlerObj, 0x2,
newStateField);
ASSERT_EQ(rc, PLDM_PLATFORM_INVALID_STATE_VALUE);
+
+ pldm_pdr_destroy(inPDRRepo);
+ pldm_pdr_destroy(outPDRRepo);
}