1 #include "libpldm/entity.h"
2 
3 #include "common/utils.hpp"
4 #include "libpldmresponder/event_parser.hpp"
5 #include "libpldmresponder/pdr.hpp"
6 #include "libpldmresponder/pdr_utils.hpp"
7 #include "libpldmresponder/platform.hpp"
8 #include "oem/ibm/libpldmresponder/inband_code_update.hpp"
9 #include "oem/ibm/libpldmresponder/oem_ibm_handler.hpp"
10 #include "test/mocked_utils.hpp"
11 
12 #include <iostream>
13 
14 using namespace pldm::utils;
15 using namespace pldm::responder;
16 using namespace pldm::responder::pdr;
17 using namespace pldm::responder::pdr_utils;
18 using namespace pldm::responder::oem_ibm_platform;
19 
20 class MockCodeUpdate : public CodeUpdate
21 {
22   public:
23     MockCodeUpdate(const pldm::utils::DBusHandler* dBusIntf) :
24         CodeUpdate(dBusIntf)
25     {}
26 
27     MOCK_METHOD(void, setVersions, (), (override));
28 };
29 
30 TEST(oemSetStateEffecterStatesHandler, testGoodRequest)
31 {
32     uint16_t entityID_ = PLDM_ENTITY_VIRTUAL_MACHINE_MANAGER;
33     uint16_t stateSetId_ = PLDM_OEM_IBM_BOOT_STATE;
34     uint16_t entityInstance_ = 0;
35     uint8_t compSensorCnt_ = 1;
36 
37     std::vector<get_sensor_state_field> stateField;
38 
39     auto mockDbusHandler = std::make_unique<MockdBusHandler>();
40     std::unique_ptr<CodeUpdate> mockCodeUpdate =
41         std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
42     std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
43 
44     oemPlatformHandler = std::make_unique<oem_ibm_platform::Handler>(
45         mockDbusHandler.get(), mockCodeUpdate.get());
46 
47     auto rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
48         entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField);
49 
50     ASSERT_EQ(rc, PLDM_SUCCESS);
51     ASSERT_EQ(stateField.size(), 1);
52     ASSERT_EQ(stateField[0].event_state, tSideNum);
53     ASSERT_EQ(stateField[0].sensor_op_state, PLDM_SENSOR_ENABLED);
54     ASSERT_EQ(stateField[0].present_state, PLDM_SENSOR_UNKNOWN);
55     ASSERT_EQ(stateField[0].previous_state, PLDM_SENSOR_UNKNOWN);
56 
57     entityInstance_ = 1;
58 
59     std::vector<get_sensor_state_field> stateField1;
60     rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
61         entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
62     ASSERT_EQ(stateField1.size(), 1);
63     ASSERT_EQ(stateField1[0].event_state, tSideNum);
64 
65     entityInstance_ = 2;
66     rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
67         entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
68     ASSERT_EQ(stateField1[0].event_state, PLDM_SENSOR_UNKNOWN);
69 
70     entityID_ = 40;
71     stateSetId_ = 50;
72     rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
73         entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
74     ASSERT_EQ(rc, PLDM_PLATFORM_INVALID_STATE_VALUE);
75 
76     entityID_ = PLDM_ENTITY_VIRTUAL_MACHINE_MANAGER;
77     entityInstance_ = 0;
78     stateSetId_ = PLDM_OEM_IBM_BOOT_STATE;
79     compSensorCnt_ = 1;
80 
81     std::vector<set_effecter_state_field> setEffecterStateField;
82     setEffecterStateField.push_back({PLDM_REQUEST_SET, pSideNum});
83 
84     rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
85         entityID_, entityInstance_, stateSetId_, compSensorCnt_,
86         setEffecterStateField);
87     ASSERT_EQ(rc, PLDM_SUCCESS);
88 
89     entityInstance_ = 2;
90     rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
91         entityID_, entityInstance_, stateSetId_, compSensorCnt_,
92         setEffecterStateField);
93 
94     ASSERT_EQ(rc, PLDM_PLATFORM_INVALID_STATE_VALUE);
95 
96     entityID_ = 34;
97     stateSetId_ = 99;
98     entityInstance_ = 0;
99     rc = oemPlatformHandler->oemSetStateEffecterStatesHandler(
100         entityID_, entityInstance_, stateSetId_, compSensorCnt_,
101         setEffecterStateField);
102     ASSERT_EQ(rc, PLDM_PLATFORM_SET_EFFECTER_UNSUPPORTED_SENSORSTATE);
103 }
104