pldm: Add gmock test for the setNumericEffecterValue method

Add the setNumericEffecterValueHandler test method to the
test/libpldmresponder_platform_numeric_effecter_test.cpp.

Signed-off-by: George Liu <liuxiwei@inspur.com>
Change-Id: Iccc7e672ddd5044eb23f5e61202a5a51a1ef17f3
diff --git a/test/libpldmresponder_platform_test.cpp b/test/libpldmresponder_platform_test.cpp
index c764ce3..5ea71ab 100644
--- a/test/libpldmresponder_platform_test.cpp
+++ b/test/libpldmresponder_platform_test.cpp
@@ -1,6 +1,7 @@
 #include "libpldmresponder/pdr.hpp"
 #include "libpldmresponder/pdr_utils.hpp"
 #include "libpldmresponder/platform.hpp"
+#include "libpldmresponder/platform_numeric_effecter.hpp"
 #include "libpldmresponder/platform_state_effecter.hpp"
 #include "mocked_utils.hpp"
 #include "utils.hpp"
@@ -248,3 +249,70 @@
     pldm_pdr_destroy(inPDRRepo);
     pldm_pdr_destroy(outPDRRepo);
 }
+
+TEST(setNumericEffecterValueHandler, testGoodRequest)
+{
+    auto inPDRRepo = pldm_pdr_init();
+    auto numericEffecterPdrRepo = pldm_pdr_init();
+    Repo numericEffecterPDRs(numericEffecterPdrRepo);
+    Handler handler("./pdr_jsons/state_effecter/good", inPDRRepo, nullptr);
+    Repo inRepo(inPDRRepo);
+    getRepoByType(inRepo, numericEffecterPDRs, PLDM_NUMERIC_EFFECTER_PDR);
+
+    pdr_utils::PdrEntry e;
+    auto record3 = pdr::getRecordByHandle(numericEffecterPDRs, 3, e);
+    ASSERT_NE(record3, nullptr);
+
+    pldm_numeric_effecter_value_pdr* pdr =
+        reinterpret_cast<pldm_numeric_effecter_value_pdr*>(e.data);
+    EXPECT_EQ(pdr->hdr.type, PLDM_NUMERIC_EFFECTER_PDR);
+
+    uint16_t effecterId = 3;
+    uint32_t effecterValue = 2100000000; // 2036-07-18 21:20:00
+    PropertyValue propertyValue = static_cast<uint32_t>(effecterValue);
+
+    MockdBusHandler handlerObj;
+    DBusMapping dbusMapping{"/foo/bar", "xyz.openbmc_project.Foo.Bar",
+                            "propertyName", "uint64_t"};
+    EXPECT_CALL(handlerObj, setDbusProperty(dbusMapping, propertyValue))
+        .Times(1);
+
+    auto rc = platform_numeric_effecter::setNumericEffecterValueHandler<
+        MockdBusHandler, Handler>(
+        handlerObj, handler, effecterId, PLDM_EFFECTER_DATA_SIZE_UINT32,
+        reinterpret_cast<uint8_t*>(&effecterValue), 4);
+    ASSERT_EQ(rc, 0);
+
+    pldm_pdr_destroy(inPDRRepo);
+    pldm_pdr_destroy(numericEffecterPdrRepo);
+}
+
+TEST(setNumericEffecterValueHandler, testBadRequest)
+{
+    auto inPDRRepo = pldm_pdr_init();
+    auto numericEffecterPdrRepo = pldm_pdr_init();
+    Repo numericEffecterPDRs(numericEffecterPdrRepo);
+    Handler handler("./pdr_jsons/state_effecter/good", inPDRRepo, nullptr);
+    Repo inRepo(inPDRRepo);
+    getRepoByType(inRepo, numericEffecterPDRs, PLDM_NUMERIC_EFFECTER_PDR);
+
+    pdr_utils::PdrEntry e;
+    auto record3 = pdr::getRecordByHandle(numericEffecterPDRs, 3, e);
+    ASSERT_NE(record3, nullptr);
+
+    pldm_numeric_effecter_value_pdr* pdr =
+        reinterpret_cast<pldm_numeric_effecter_value_pdr*>(e.data);
+    EXPECT_EQ(pdr->hdr.type, PLDM_NUMERIC_EFFECTER_PDR);
+
+    uint16_t effecterId = 3;
+    uint64_t effecterValue = 9876543210;
+    MockdBusHandler handlerObj;
+    auto rc = platform_numeric_effecter::setNumericEffecterValueHandler<
+        MockdBusHandler, Handler>(
+        handlerObj, handler, effecterId, PLDM_EFFECTER_DATA_SIZE_SINT32,
+        reinterpret_cast<uint8_t*>(&effecterValue), 3);
+    ASSERT_EQ(rc, PLDM_ERROR_INVALID_DATA);
+
+    pldm_pdr_destroy(inPDRRepo);
+    pldm_pdr_destroy(numericEffecterPdrRepo);
+}