blob: 3b2d6817d65239283054cc59cd58b17193812bdd [file] [log] [blame]
Sampa Misraaea5dde2020-08-31 08:33:47 -05001#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
14using namespace pldm::utils;
15using namespace pldm::responder;
16using namespace pldm::responder::pdr;
17using namespace pldm::responder::pdr_utils;
18using namespace pldm::responder::oem_ibm_platform;
19
20class 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
30TEST(oemSetStateEffecterStatesHandler, testGoodRequest)
31{
Sagar Srinivas78a225a2020-08-27 00:52:20 -050032 uint16_t entityID_ = PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE;
Sampa Misraaea5dde2020-08-31 08:33:47 -050033 uint16_t stateSetId_ = PLDM_OEM_IBM_BOOT_STATE;
34 uint16_t entityInstance_ = 0;
35 uint8_t compSensorCnt_ = 1;
Varsha Kaverappa3fbd39e2020-09-28 01:40:22 -050036 uint16_t effecterId = 0xA;
Varsha Kaverappabb585b22020-09-10 06:15:42 -050037 sdbusplus::bus::bus bus(sdbusplus::bus::new_default());
38 Requester requester(bus, "/abc/def");
Sampa Misraaea5dde2020-08-31 08:33:47 -050039
40 std::vector<get_sensor_state_field> stateField;
41
42 auto mockDbusHandler = std::make_unique<MockdBusHandler>();
43 std::unique_ptr<CodeUpdate> mockCodeUpdate =
44 std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
45 std::unique_ptr<oem_platform::Handler> oemPlatformHandler{};
46
47 oemPlatformHandler = std::make_unique<oem_ibm_platform::Handler>(
Varsha Kaverappabb585b22020-09-10 06:15:42 -050048 mockDbusHandler.get(), mockCodeUpdate.get(), 0x1, 0x9, requester);
Sampa Misraaea5dde2020-08-31 08:33:47 -050049
50 auto rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
51 entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField);
52
53 ASSERT_EQ(rc, PLDM_SUCCESS);
54 ASSERT_EQ(stateField.size(), 1);
55 ASSERT_EQ(stateField[0].event_state, tSideNum);
56 ASSERT_EQ(stateField[0].sensor_op_state, PLDM_SENSOR_ENABLED);
57 ASSERT_EQ(stateField[0].present_state, PLDM_SENSOR_UNKNOWN);
58 ASSERT_EQ(stateField[0].previous_state, PLDM_SENSOR_UNKNOWN);
59
60 entityInstance_ = 1;
61
62 std::vector<get_sensor_state_field> stateField1;
63 rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
64 entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
65 ASSERT_EQ(stateField1.size(), 1);
66 ASSERT_EQ(stateField1[0].event_state, tSideNum);
67
68 entityInstance_ = 2;
69 rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
70 entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
71 ASSERT_EQ(stateField1[0].event_state, PLDM_SENSOR_UNKNOWN);
72
73 entityID_ = 40;
74 stateSetId_ = 50;
75 rc = oemPlatformHandler->getOemStateSensorReadingsHandler(
76 entityID_, entityInstance_, stateSetId_, compSensorCnt_, stateField1);
77 ASSERT_EQ(rc, PLDM_PLATFORM_INVALID_STATE_VALUE);
78
Sagar Srinivas78a225a2020-08-27 00:52:20 -050079 entityID_ = PLDM_OEM_IBM_ENTITY_FIRMWARE_UPDATE;
Sampa Misraaea5dde2020-08-31 08:33:47 -050080 entityInstance_ = 0;
81 stateSetId_ = PLDM_OEM_IBM_BOOT_STATE;
82 compSensorCnt_ = 1;
83
84 std::vector<set_effecter_state_field> setEffecterStateField;
85 setEffecterStateField.push_back({PLDM_REQUEST_SET, pSideNum});
86
Varsha Kaverappa3fbd39e2020-09-28 01:40:22 -050087 rc = oemPlatformHandler->OemSetStateEffecterStatesHandler(
Sampa Misraaea5dde2020-08-31 08:33:47 -050088 entityID_, entityInstance_, stateSetId_, compSensorCnt_,
Varsha Kaverappa3fbd39e2020-09-28 01:40:22 -050089 setEffecterStateField, effecterId);
Sampa Misraaea5dde2020-08-31 08:33:47 -050090 ASSERT_EQ(rc, PLDM_SUCCESS);
91
92 entityInstance_ = 2;
Varsha Kaverappa3fbd39e2020-09-28 01:40:22 -050093 rc = oemPlatformHandler->OemSetStateEffecterStatesHandler(
Sampa Misraaea5dde2020-08-31 08:33:47 -050094 entityID_, entityInstance_, stateSetId_, compSensorCnt_,
Varsha Kaverappa3fbd39e2020-09-28 01:40:22 -050095 setEffecterStateField, effecterId);
Sampa Misraaea5dde2020-08-31 08:33:47 -050096
97 ASSERT_EQ(rc, PLDM_PLATFORM_INVALID_STATE_VALUE);
98
99 entityID_ = 34;
100 stateSetId_ = 99;
101 entityInstance_ = 0;
Varsha Kaverappa3fbd39e2020-09-28 01:40:22 -0500102 rc = oemPlatformHandler->OemSetStateEffecterStatesHandler(
Sampa Misraaea5dde2020-08-31 08:33:47 -0500103 entityID_, entityInstance_, stateSetId_, compSensorCnt_,
Varsha Kaverappa3fbd39e2020-09-28 01:40:22 -0500104 setEffecterStateField, effecterId);
Sampa Misraaea5dde2020-08-31 08:33:47 -0500105 ASSERT_EQ(rc, PLDM_PLATFORM_SET_EFFECTER_UNSUPPORTED_SENSORSTATE);
106}
Varsha Kaverappabb585b22020-09-10 06:15:42 -0500107
108TEST(EncodeCodeUpdateEvent, testGoodRequest)
109{
110 size_t sensorEventSize = PLDM_SENSOR_EVENT_DATA_MIN_LENGTH + 1;
111 std::vector<uint8_t> sensorEventDataVec{};
112 sensorEventDataVec.resize(sensorEventSize);
113
114 auto eventData = reinterpret_cast<struct pldm_sensor_event_data*>(
115 sensorEventDataVec.data());
116 eventData->sensor_id = 0xA;
117 eventData->sensor_event_class_type = PLDM_SENSOR_OP_STATE;
118
119 auto opStateSensorEventData =
120 reinterpret_cast<struct pldm_sensor_event_sensor_op_state*>(
121 sensorEventDataVec.data());
122 opStateSensorEventData->present_op_state = uint8_t(CodeUpdateState::START);
123 opStateSensorEventData->previous_op_state = uint8_t(CodeUpdateState::END);
124
125 std::vector<uint8_t> requestMsg(sizeof(pldm_msg_hdr) +
126 PLDM_PLATFORM_EVENT_MESSAGE_MIN_REQ_BYTES +
127 sensorEventDataVec.size());
128
129 auto rc =
130 encodeEventMsg(PLDM_SENSOR_EVENT, sensorEventDataVec, requestMsg, 0x1);
131
132 EXPECT_EQ(rc, PLDM_SUCCESS);
133}
134
135TEST(EncodeCodeUpdate, testBadRequest)
136{
137 std::vector<uint8_t> requestMsg;
138 std::vector<uint8_t> sensorEventDataVec{};
139
140 auto rc =
141 encodeEventMsg(PLDM_SENSOR_EVENT, sensorEventDataVec, requestMsg, 0x1);
142
143 EXPECT_EQ(rc, PLDM_ERROR_INVALID_DATA);
144}
Varsha Kaverappa3ca29df2020-09-27 12:39:22 -0500145
146TEST(clearDirPath, testClearDirPath)
147{
148 char dirPath[] = "/tmp/testClearDir/";
149 fs::path dir(dirPath);
150 fs::create_directories(dir);
151 struct stat buffer;
152 ASSERT_EQ(stat(dirPath, &buffer), 0);
153 char filePath[] = "/tmp/testClearDir/file.txt";
154 std::ofstream file(filePath);
155 ASSERT_EQ(stat(filePath, &buffer), 0);
156
157 auto mockDbusHandler = std::make_unique<MockdBusHandler>();
158 std::unique_ptr<CodeUpdate> mockCodeUpdate =
159 std::make_unique<MockCodeUpdate>(mockDbusHandler.get());
160
161 mockCodeUpdate->clearDirPath(dirPath);
162 ASSERT_EQ(stat(filePath, &buffer), -1);
163 ASSERT_EQ(stat(dirPath, &buffer), 0);
164}