pldm: Add parsing JSON for Numeric Effecter PDR

According to spec DSP0248_1.2.0: 28.11 and effecter_pdr.json, parse JSON and generate PDR
structure.

In addition:
 1. move the parsing generateNumericEffecterHandler method to pdr_numeric_effecter_pdr.hpp.
 2. test/libpldmresponder_pdr_state_effecter_test.cpp renamed
test/libpldmresponder_pdr_effecter_test.cpp.

Tested with JSON files:
 https://gist.github.com/lxwinspur/2c3fd68cdb35e06480c4a5f7890e3a06#file-effecter_pdr-json.

Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: I4254a14f0fd5e33b312f65c15c9a23437e28d341
diff --git a/test/libpldmresponder_pdr_state_effecter_test.cpp b/test/libpldmresponder_pdr_effecter_test.cpp
similarity index 75%
rename from test/libpldmresponder_pdr_state_effecter_test.cpp
rename to test/libpldmresponder_pdr_effecter_test.cpp
index e17fe89..72ca0c6 100644
--- a/test/libpldmresponder_pdr_state_effecter_test.cpp
+++ b/test/libpldmresponder_pdr_effecter_test.cpp
@@ -10,7 +10,7 @@
 using namespace pldm::responder::pdr;
 using namespace pldm::responder::pdr_utils;
 
-TEST(GeneratePDR, testGoodJson)
+TEST(GeneratePDRByStateEffecter, testGoodJson)
 {
     auto inPDRRepo = pldm_pdr_init();
     auto outPDRRepo = pldm_pdr_init();
@@ -103,6 +103,46 @@
     pldm_pdr_destroy(outPDRRepo);
 }
 
+TEST(GeneratePDRByNumericEffecter, testGoodJson)
+{
+    auto inPDRRepo = pldm_pdr_init();
+    auto outPDRRepo = pldm_pdr_init();
+    Repo outRepo(outPDRRepo);
+    Handler handler("./pdr_jsons/state_effecter/good", inPDRRepo, nullptr);
+    Repo inRepo(inPDRRepo);
+    getRepoByType(inRepo, outRepo, PLDM_NUMERIC_EFFECTER_PDR);
+
+    // 1 entries
+    ASSERT_EQ(outRepo.getRecordCount(), 1);
+
+    // Check first PDR
+    pdr_utils::PdrEntry e;
+    auto record = pdr::getRecordByHandle(outRepo, 3, e);
+    ASSERT_NE(record, nullptr);
+
+    pldm_numeric_effecter_value_pdr* pdr =
+        reinterpret_cast<pldm_numeric_effecter_value_pdr*>(e.data);
+    EXPECT_EQ(pdr->hdr.record_handle, 3);
+    EXPECT_EQ(pdr->hdr.version, 1);
+    EXPECT_EQ(pdr->hdr.type, PLDM_NUMERIC_EFFECTER_PDR);
+    EXPECT_EQ(pdr->hdr.record_change_num, 0);
+    EXPECT_EQ(pdr->hdr.length,
+              sizeof(pldm_numeric_effecter_value_pdr) - sizeof(pldm_pdr_hdr));
+
+    EXPECT_EQ(pdr->effecter_id, 3);
+    EXPECT_EQ(pdr->effecter_data_size, 4);
+
+    const auto& [dbusMappings, dbusValMaps] =
+        handler.getDbusObjMaps(pdr->effecter_id);
+    EXPECT_EQ(dbusMappings[0].objectPath, "/foo/bar");
+    EXPECT_EQ(dbusMappings[0].interface, "xyz.openbmc_project.Foo.Bar");
+    EXPECT_EQ(dbusMappings[0].propertyName, "propertyName");
+    EXPECT_EQ(dbusMappings[0].propertyType, "uint64_t");
+
+    pldm_pdr_destroy(inPDRRepo);
+    pldm_pdr_destroy(outPDRRepo);
+}
+
 TEST(GeneratePDR, testNoJson)
 {
     auto pdrRepo = pldm_pdr_init();
diff --git a/test/meson.build b/test/meson.build
index b9d5b74..4bbdbc5 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -28,7 +28,7 @@
   'libpldmresponder_bios_config_test',
   'libpldmresponder_bios_integer_attribute_test',
   'libpldmresponder_bios_enum_attribute_test',
-  'libpldmresponder_pdr_state_effecter_test',
+  'libpldmresponder_pdr_effecter_test',
   'libpldmresponder_bios_table_test',
   'libpldmresponder_platform_test',
   'pldmd_instanceid_test',