test_trigger.cpp (94f71c5190b64bb47aa34cdce4eb4cca71d36faa) test_trigger.cpp (b4ef22e4d365bde35a7fce7950033c9271c68ce7)
1#include "dbus_environment.hpp"
2#include "helpers.hpp"
3#include "mocks/json_storage_mock.hpp"
1#include "dbus_environment.hpp"
2#include "helpers.hpp"
3#include "mocks/json_storage_mock.hpp"
4#include "mocks/report_manager_mock.hpp"
4#include "mocks/sensor_mock.hpp"
5#include "mocks/threshold_mock.hpp"
6#include "mocks/trigger_factory_mock.hpp"
7#include "mocks/trigger_manager_mock.hpp"
8#include "params/trigger_params.hpp"
9#include "trigger.hpp"
10#include "trigger_manager.hpp"
11#include "utils/conversion_trigger.hpp"

--- 19 unchanged lines hidden (view full) ---

31 discrete::LabeledThresholdParam{
32 "userId", discrete::Severity::warning,
33 Milliseconds(10).count(), "15.2"},
34 discrete::LabeledThresholdParam{
35 "userId_2", discrete::Severity::critical,
36 Milliseconds(5).count(), "32.7"},
37 });
38
5#include "mocks/sensor_mock.hpp"
6#include "mocks/threshold_mock.hpp"
7#include "mocks/trigger_factory_mock.hpp"
8#include "mocks/trigger_manager_mock.hpp"
9#include "params/trigger_params.hpp"
10#include "trigger.hpp"
11#include "trigger_manager.hpp"
12#include "utils/conversion_trigger.hpp"

--- 19 unchanged lines hidden (view full) ---

32 discrete::LabeledThresholdParam{
33 "userId", discrete::Severity::warning,
34 Milliseconds(10).count(), "15.2"},
35 discrete::LabeledThresholdParam{
36 "userId_2", discrete::Severity::critical,
37 Milliseconds(5).count(), "32.7"},
38 });
39
40 std::unique_ptr<ReportManagerMock> reportManagerMockPtr =
41 std::make_unique<NiceMock<ReportManagerMock>>();
39 std::unique_ptr<TriggerManagerMock> triggerManagerMockPtr =
40 std::make_unique<NiceMock<TriggerManagerMock>>();
41 std::unique_ptr<TriggerFactoryMock> triggerFactoryMockPtr =
42 std::make_unique<NiceMock<TriggerFactoryMock>>();
43 testing::NiceMock<StorageMock> storageMock;
44 std::vector<std::shared_ptr<interfaces::Threshold>> thresholdMocks;
45 std::unique_ptr<Trigger> sut;
46

--- 18 unchanged lines hidden (view full) ---

65
66 return std::make_unique<Trigger>(
67 DbusEnvironment::getIoc(), DbusEnvironment::getObjServer(),
68 params.id(), params.name(), params.triggerActions(),
69 std::make_shared<std::vector<std::string>>(
70 params.reportIds().begin(), params.reportIds().end()),
71 std::vector<std::shared_ptr<interfaces::Threshold>>(thresholdMocks),
72 *triggerManagerMockPtr, storageMock, *triggerFactoryMockPtr,
42 std::unique_ptr<TriggerManagerMock> triggerManagerMockPtr =
43 std::make_unique<NiceMock<TriggerManagerMock>>();
44 std::unique_ptr<TriggerFactoryMock> triggerFactoryMockPtr =
45 std::make_unique<NiceMock<TriggerFactoryMock>>();
46 testing::NiceMock<StorageMock> storageMock;
47 std::vector<std::shared_ptr<interfaces::Threshold>> thresholdMocks;
48 std::unique_ptr<Trigger> sut;
49

--- 18 unchanged lines hidden (view full) ---

68
69 return std::make_unique<Trigger>(
70 DbusEnvironment::getIoc(), DbusEnvironment::getObjServer(),
71 params.id(), params.name(), params.triggerActions(),
72 std::make_shared<std::vector<std::string>>(
73 params.reportIds().begin(), params.reportIds().end()),
74 std::vector<std::shared_ptr<interfaces::Threshold>>(thresholdMocks),
75 *triggerManagerMockPtr, storageMock, *triggerFactoryMockPtr,
73 SensorMock::makeSensorMocks(params.sensors()));
76 SensorMock::makeSensorMocks(params.sensors()),
77 *reportManagerMockPtr);
74 }
75
76 static interfaces::JsonStorage::FilePath to_file_path(std::string name)
77 {
78 return interfaces::JsonStorage::FilePath(
79 std::to_string(std::hash<std::string>{}(name)));
80 }
81

--- 45 unchanged lines hidden (view full) ---

127 getProperty<bool>(sut->getPath(), "Discrete"),
128 Eq(isTriggerThresholdDiscrete(triggerParams.thresholdParams())));
129 EXPECT_THAT(
130 getProperty<TriggerThresholdParams>(sut->getPath(), "Thresholds"),
131 Eq(std::visit(utils::FromLabeledThresholdParamConversion(),
132 triggerParams.thresholdParams())));
133}
134
78 }
79
80 static interfaces::JsonStorage::FilePath to_file_path(std::string name)
81 {
82 return interfaces::JsonStorage::FilePath(
83 std::to_string(std::hash<std::string>{}(name)));
84 }
85

--- 45 unchanged lines hidden (view full) ---

131 getProperty<bool>(sut->getPath(), "Discrete"),
132 Eq(isTriggerThresholdDiscrete(triggerParams.thresholdParams())));
133 EXPECT_THAT(
134 getProperty<TriggerThresholdParams>(sut->getPath(), "Thresholds"),
135 Eq(std::visit(utils::FromLabeledThresholdParamConversion(),
136 triggerParams.thresholdParams())));
137}
138
139TEST_F(TestTrigger, checkBasicGetters)
140{
141 EXPECT_THAT(sut->getId(), Eq(triggerParams.id()));
142 EXPECT_THAT(sut->getPath(), Eq(Trigger::triggerDir + triggerParams.id()));
143 EXPECT_THAT(sut->getReportIds(), Eq(triggerParams.reportIds()));
144}
145
135TEST_F(TestTrigger, setPropertyNameToCorrectValue)
136{
137 std::string name = "custom name 1234 %^#5";
138 EXPECT_THAT(setProperty(sut->getPath(), "Name", name),
139 Eq(boost::system::errc::success));
140 EXPECT_THAT(getProperty<std::string>(sut->getPath(), "Name"), Eq(name));
141}
142
143TEST_F(TestTrigger, setPropertyReportNames)
144{
145 std::vector<std::string> newNames = {"abc", "one", "two"};
146 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newNames),
147 Eq(boost::system::errc::success));
148 EXPECT_THAT(
149 getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
150 Eq(newNames));
146TEST_F(TestTrigger, setPropertyNameToCorrectValue)
147{
148 std::string name = "custom name 1234 %^#5";
149 EXPECT_THAT(setProperty(sut->getPath(), "Name", name),
150 Eq(boost::system::errc::success));
151 EXPECT_THAT(getProperty<std::string>(sut->getPath(), "Name"), Eq(name));
152}
153
154TEST_F(TestTrigger, setPropertyReportNames)
155{
156 std::vector<std::string> newNames = {"abc", "one", "two"};
157 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newNames),
158 Eq(boost::system::errc::success));
159 EXPECT_THAT(
160 getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
161 Eq(newNames));
162 EXPECT_THAT(
163 getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
164 Eq(sut->getReportIds()));
151}
152
165}
166
167TEST_F(TestTrigger, settingPropertyReportNamesUptadesTriggerIdsInReports)
168{
169 std::vector<std::string> newPropertyVal = {"abc", "one", "two"};
170
171 for (const auto& reportId : newPropertyVal)
172 {
173 EXPECT_CALL(
174 *reportManagerMockPtr,
175 updateTriggerIds(reportId, sut->getId(), TriggerIdUpdate::Add));
176 }
177 for (const auto& reportId : triggerParams.reportIds())
178 {
179 EXPECT_CALL(
180 *reportManagerMockPtr,
181 updateTriggerIds(reportId, sut->getId(), TriggerIdUpdate::Remove));
182 }
183
184 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
185 Eq(boost::system::errc::success));
186}
187
188TEST_F(TestTrigger, settingPropertyReportNamesWillNotRemoveTriggerIdsInReports)
189{
190 std::vector<std::string> newPropertyVal = triggerParams.reportIds();
191 std::vector<std::string> newNames{"abc", "one", "two"};
192 newPropertyVal.insert(newPropertyVal.end(), newNames.begin(),
193 newNames.end());
194
195 for (const auto& reportId : newNames)
196 {
197 EXPECT_CALL(
198 *reportManagerMockPtr,
199 updateTriggerIds(reportId, sut->getId(), TriggerIdUpdate::Add));
200 }
201
202 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
203 Eq(boost::system::errc::success));
204}
205
206TEST_F(TestTrigger,
207 settingPropertyReportNamesToSameValueWillNotUpdateTriggerIdsInReports)
208{
209 std::vector<std::string> newPropertyVal = triggerParams.reportIds();
210
211 EXPECT_CALL(*reportManagerMockPtr, updateTriggerIds(_, _, _)).Times(0);
212
213 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
214 Eq(boost::system::errc::success));
215}
216
217TEST_F(TestTrigger,
218 DISABLED_settingPropertyReportNamesThrowsExceptionWhenDuplicateReportIds)
219{
220 std::vector<std::string> newPropertyVal{"trigger1", "trigger2", "trigger1"};
221
222 EXPECT_CALL(*reportManagerMockPtr, updateTriggerIds(_, _, _)).Times(0);
223
224 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
225 Eq(boost::system::errc::invalid_argument));
226}
227
153TEST_F(TestTrigger, setPropertySensors)
154{
155 EXPECT_CALL(*triggerFactoryMockPtr, updateSensors(_, _));
156 for (const auto& threshold : thresholdMocks)
157 {
158 auto thresholdMockPtr =
159 std::dynamic_pointer_cast<NiceMock<ThresholdMock>>(threshold);
160 EXPECT_CALL(*thresholdMockPtr, updateSensors(_));

--- 65 unchanged lines hidden (view full) ---

226 Eq(base.at_label<utils::tstring::ThresholdValue>()));
227 }
228}
229
230TEST_F(TestTrigger, deleteTrigger)
231{
232 EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
233 EXPECT_CALL(*triggerManagerMockPtr, removeTrigger(sut.get()));
228TEST_F(TestTrigger, setPropertySensors)
229{
230 EXPECT_CALL(*triggerFactoryMockPtr, updateSensors(_, _));
231 for (const auto& threshold : thresholdMocks)
232 {
233 auto thresholdMockPtr =
234 std::dynamic_pointer_cast<NiceMock<ThresholdMock>>(threshold);
235 EXPECT_CALL(*thresholdMockPtr, updateSensors(_));

--- 65 unchanged lines hidden (view full) ---

301 Eq(base.at_label<utils::tstring::ThresholdValue>()));
302 }
303}
304
305TEST_F(TestTrigger, deleteTrigger)
306{
307 EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
308 EXPECT_CALL(*triggerManagerMockPtr, removeTrigger(sut.get()));
309 for (const auto& reportId : triggerParams.reportIds())
310 {
311 EXPECT_CALL(
312 *reportManagerMockPtr,
313 updateTriggerIds(reportId, sut->getId(), TriggerIdUpdate::Remove));
314 }
234 auto ec = deleteTrigger(sut->getPath());
235 EXPECT_THAT(ec, Eq(boost::system::errc::success));
236}
237
238TEST_F(TestTrigger, deletingNonExistingTriggerReturnInvalidRequestDescriptor)
239{
240 auto ec = deleteTrigger(Trigger::triggerDir + "NonExisting"s);
241 EXPECT_THAT(ec.value(), Eq(EBADR));

--- 5 unchanged lines hidden (view full) ---

247
248 bool persistent = false;
249 EXPECT_THAT(setProperty(sut->getPath(), "Persistent", persistent),
250 Eq(boost::system::errc::success));
251 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"),
252 Eq(persistent));
253}
254
315 auto ec = deleteTrigger(sut->getPath());
316 EXPECT_THAT(ec, Eq(boost::system::errc::success));
317}
318
319TEST_F(TestTrigger, deletingNonExistingTriggerReturnInvalidRequestDescriptor)
320{
321 auto ec = deleteTrigger(Trigger::triggerDir + "NonExisting"s);
322 EXPECT_THAT(ec.value(), Eq(EBADR));

--- 5 unchanged lines hidden (view full) ---

328
329 bool persistent = false;
330 EXPECT_THAT(setProperty(sut->getPath(), "Persistent", persistent),
331 Eq(boost::system::errc::success));
332 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"),
333 Eq(persistent));
334}
335
255class TestTriggerErrors : public TestTrigger
336class TestTriggerInitialization : public TestTrigger
256{
257 public:
258 void SetUp() override
259 {}
260
261 nlohmann::json storedConfiguration;
262};
263
337{
338 public:
339 void SetUp() override
340 {}
341
342 nlohmann::json storedConfiguration;
343};
344
264TEST_F(TestTriggerErrors, exceptionDuringTriggerStoreDisablesPersistency)
345TEST_F(TestTriggerInitialization,
346 exceptionDuringTriggerStoreDisablesPersistency)
265{
266 EXPECT_CALL(storageMock, store(_, _))
267 .WillOnce(Throw(std::runtime_error("Generic error!")));
268
269 sut = makeTrigger(triggerParams);
270
271 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), Eq(false));
272}
273
347{
348 EXPECT_CALL(storageMock, store(_, _))
349 .WillOnce(Throw(std::runtime_error("Generic error!")));
350
351 sut = makeTrigger(triggerParams);
352
353 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), Eq(false));
354}
355
274TEST_F(TestTriggerErrors, creatingTriggerThrowsExceptionWhenIdIsInvalid)
356TEST_F(TestTriggerInitialization, creatingTriggerThrowsExceptionWhenIdIsInvalid)
275{
276 EXPECT_CALL(storageMock, store(_, _)).Times(0);
277
278 EXPECT_THROW(makeTrigger(triggerParams.id("inv?lidId")),
279 sdbusplus::exception::SdBusError);
280}
281
357{
358 EXPECT_CALL(storageMock, store(_, _)).Times(0);
359
360 EXPECT_THROW(makeTrigger(triggerParams.id("inv?lidId")),
361 sdbusplus::exception::SdBusError);
362}
363
364TEST_F(TestTriggerInitialization, creatingTriggerUpdatesTriggersIdsInReports)
365{
366 for (const auto& reportId : triggerParams.reportIds())
367 {
368 EXPECT_CALL(*reportManagerMockPtr,
369 updateTriggerIds(reportId, triggerParams.id(),
370 TriggerIdUpdate::Add));
371 }
372
373 sut = makeTrigger(triggerParams);
374}
375
282class TestTriggerStore : public TestTrigger
283{
284 public:
285 nlohmann::json storedConfiguration;
286 nlohmann::json storedDiscreteConfiguration;
287 std::unique_ptr<Trigger> sutDiscrete;
288
289 void SetUp() override

--- 90 unchanged lines hidden ---
376class TestTriggerStore : public TestTrigger
377{
378 public:
379 nlohmann::json storedConfiguration;
380 nlohmann::json storedDiscreteConfiguration;
381 std::unique_ptr<Trigger> sutDiscrete;
382
383 void SetUp() override

--- 90 unchanged lines hidden ---