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);
}