blob: cfb08e9fa2f85a518a2c60fbc55d0153f4bd1665 [file] [log] [blame]
Wludzik, Jozef76833cb2020-12-21 14:42:41 +01001#include "dbus_environment.hpp"
2#include "helpers.hpp"
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +01003#include "messages/collect_trigger_id.hpp"
4#include "messages/trigger_presence_changed_ind.hpp"
Cezary Zwolaka4e67612021-02-18 13:16:16 +01005#include "mocks/json_storage_mock.hpp"
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +01006#include "mocks/report_manager_mock.hpp"
Szymon Dompke94f71c52021-12-10 07:16:33 +01007#include "mocks/sensor_mock.hpp"
8#include "mocks/threshold_mock.hpp"
9#include "mocks/trigger_factory_mock.hpp"
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010010#include "mocks/trigger_manager_mock.hpp"
11#include "params/trigger_params.hpp"
12#include "trigger.hpp"
Szymon Dompkee28aa532021-10-27 12:33:12 +020013#include "trigger_manager.hpp"
Cezary Zwolak4416fce2021-03-17 03:21:06 +010014#include "utils/conversion_trigger.hpp"
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +010015#include "utils/messanger.hpp"
Cezary Zwolak4416fce2021-03-17 03:21:06 +010016#include "utils/transform.hpp"
17#include "utils/tstring.hpp"
18
19#include <boost/range/combine.hpp>
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010020
21using namespace testing;
22using namespace std::literals::string_literals;
23
Szymon Dompke94f71c52021-12-10 07:16:33 +010024static constexpr size_t expectedTriggerVersion = 1;
Cezary Zwolaka4e67612021-02-18 13:16:16 +010025
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010026class TestTrigger : public Test
27{
28 public:
29 TriggerParams triggerParams;
Cezary Zwolak4416fce2021-03-17 03:21:06 +010030 TriggerParams triggerDiscreteParams =
31 TriggerParams()
Szymon Dompkee28aa532021-10-27 12:33:12 +020032 .id("DiscreteTrigger")
33 .name("My Discrete Trigger")
Cezary Zwolak4416fce2021-03-17 03:21:06 +010034 .thresholdParams(std::vector<discrete::LabeledThresholdParam>{
35 discrete::LabeledThresholdParam{
36 "userId", discrete::Severity::warning,
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000037 Milliseconds(10).count(), "15.2"},
Cezary Zwolak4416fce2021-03-17 03:21:06 +010038 discrete::LabeledThresholdParam{
39 "userId_2", discrete::Severity::critical,
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000040 Milliseconds(5).count(), "32.7"},
Cezary Zwolak4416fce2021-03-17 03:21:06 +010041 });
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010042
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +010043 std::unique_ptr<ReportManagerMock> reportManagerMockPtr =
44 std::make_unique<NiceMock<ReportManagerMock>>();
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010045 std::unique_ptr<TriggerManagerMock> triggerManagerMockPtr =
46 std::make_unique<NiceMock<TriggerManagerMock>>();
Szymon Dompke94f71c52021-12-10 07:16:33 +010047 std::unique_ptr<TriggerFactoryMock> triggerFactoryMockPtr =
48 std::make_unique<NiceMock<TriggerFactoryMock>>();
Cezary Zwolaka4e67612021-02-18 13:16:16 +010049 testing::NiceMock<StorageMock> storageMock;
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +010050 NiceMock<MockFunction<void(const messages::TriggerPresenceChangedInd)>>
51 triggerPresenceChanged;
Szymon Dompke94f71c52021-12-10 07:16:33 +010052 std::vector<std::shared_ptr<interfaces::Threshold>> thresholdMocks;
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +010053 utils::Messanger messanger;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010054 std::unique_ptr<Trigger> sut;
55
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +010056 TestTrigger() : messanger(DbusEnvironment::getIoc())
57 {
58 messanger.on_receive<messages::TriggerPresenceChangedInd>(
59 [this](const auto& msg) { triggerPresenceChanged.Call(msg); });
60 }
61
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010062 void SetUp() override
63 {
Cezary Zwolaka4e67612021-02-18 13:16:16 +010064 sut = makeTrigger(triggerParams);
65 }
66
Cezary Zwolak4416fce2021-03-17 03:21:06 +010067 static std::vector<LabeledSensorInfo>
68 convertToLabeledSensor(const SensorsInfo& sensorsInfo)
69 {
70 return utils::transform(sensorsInfo, [](const auto& sensorInfo) {
71 const auto& [sensorPath, sensorMetadata] = sensorInfo;
72 return LabeledSensorInfo("service1", sensorPath, sensorMetadata);
73 });
74 }
75
Cezary Zwolaka4e67612021-02-18 13:16:16 +010076 std::unique_ptr<Trigger> makeTrigger(const TriggerParams& params)
77 {
Szymon Dompke94f71c52021-12-10 07:16:33 +010078 thresholdMocks =
79 ThresholdMock::makeThresholds(params.thresholdParams());
80
Cezary Zwolaka4e67612021-02-18 13:16:16 +010081 return std::make_unique<Trigger>(
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010082 DbusEnvironment::getIoc(), DbusEnvironment::getObjServer(),
Szymon Dompkee28aa532021-10-27 12:33:12 +020083 params.id(), params.name(), params.triggerActions(),
Szymon Dompke94f71c52021-12-10 07:16:33 +010084 std::make_shared<std::vector<std::string>>(
85 params.reportIds().begin(), params.reportIds().end()),
86 std::vector<std::shared_ptr<interfaces::Threshold>>(thresholdMocks),
87 *triggerManagerMockPtr, storageMock, *triggerFactoryMockPtr,
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +010088 SensorMock::makeSensorMocks(params.sensors()));
Cezary Zwolaka4e67612021-02-18 13:16:16 +010089 }
90
91 static interfaces::JsonStorage::FilePath to_file_path(std::string name)
92 {
93 return interfaces::JsonStorage::FilePath(
94 std::to_string(std::hash<std::string>{}(name)));
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010095 }
96
97 template <class T>
98 static T getProperty(const std::string& path, const std::string& property)
99 {
Szymon Dompkee28aa532021-10-27 12:33:12 +0200100 return DbusEnvironment::getProperty<T>(path, Trigger::triggerIfaceName,
101 property);
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100102 }
103
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100104 template <class T>
105 static boost::system::error_code setProperty(const std::string& path,
106 const std::string& property,
107 const T& newValue)
108 {
Szymon Dompkee28aa532021-10-27 12:33:12 +0200109 return DbusEnvironment::setProperty<T>(path, Trigger::triggerIfaceName,
110 property, newValue);
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100111 }
112
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100113 boost::system::error_code deleteTrigger(const std::string& path)
114 {
115 std::promise<boost::system::error_code> methodPromise;
116 DbusEnvironment::getBus()->async_method_call(
117 [&methodPromise](boost::system::error_code ec) {
118 methodPromise.set_value(ec);
119 },
120 DbusEnvironment::serviceName(), path, Trigger::deleteIfaceName,
121 "Delete");
122 return DbusEnvironment::waitForFuture(methodPromise.get_future());
123 }
124};
125
126TEST_F(TestTrigger, checkIfPropertiesAreSet)
127{
Szymon Dompkee28aa532021-10-27 12:33:12 +0200128 EXPECT_THAT(getProperty<std::string>(sut->getPath(), "Name"),
129 Eq(triggerParams.name()));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100130 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), Eq(true));
Szymon Dompke20013012021-07-23 09:54:20 +0200131 EXPECT_THAT(
132 getProperty<std::vector<std::string>>(sut->getPath(), "TriggerActions"),
Szymon Dompke94f71c52021-12-10 07:16:33 +0100133 Eq(utils::transform(
134 triggerParams.triggerActions(),
135 [](const auto& action) { return actionToString(action); })));
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100136 EXPECT_THAT((getProperty<SensorsInfo>(sut->getPath(), "Sensors")),
137 Eq(utils::fromLabeledSensorsInfo(triggerParams.sensors())));
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100138 EXPECT_THAT(
139 getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +0100140 Eq(triggerParams.reportIds()));
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100141 EXPECT_THAT(
Szymon Dompke94f71c52021-12-10 07:16:33 +0100142 getProperty<bool>(sut->getPath(), "Discrete"),
143 Eq(isTriggerThresholdDiscrete(triggerParams.thresholdParams())));
144 EXPECT_THAT(
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100145 getProperty<TriggerThresholdParams>(sut->getPath(), "Thresholds"),
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100146 Eq(std::visit(utils::FromLabeledThresholdParamConversion(),
147 triggerParams.thresholdParams())));
148}
149
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100150TEST_F(TestTrigger, checkBasicGetters)
151{
152 EXPECT_THAT(sut->getId(), Eq(triggerParams.id()));
153 EXPECT_THAT(sut->getPath(), Eq(Trigger::triggerDir + triggerParams.id()));
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100154}
155
Szymon Dompkee28aa532021-10-27 12:33:12 +0200156TEST_F(TestTrigger, setPropertyNameToCorrectValue)
157{
158 std::string name = "custom name 1234 %^#5";
159 EXPECT_THAT(setProperty(sut->getPath(), "Name", name),
160 Eq(boost::system::errc::success));
161 EXPECT_THAT(getProperty<std::string>(sut->getPath(), "Name"), Eq(name));
162}
163
Szymon Dompke94f71c52021-12-10 07:16:33 +0100164TEST_F(TestTrigger, setPropertyReportNames)
165{
166 std::vector<std::string> newNames = {"abc", "one", "two"};
167 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newNames),
168 Eq(boost::system::errc::success));
169 EXPECT_THAT(
170 getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
171 Eq(newNames));
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100172}
173
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100174TEST_F(TestTrigger, sendsUpdateWhenReportNamesChanges)
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100175{
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100176 const std::vector<std::string> newPropertyVal = {"abc", "one", "two"};
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100177
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100178 EXPECT_CALL(triggerPresenceChanged,
179 Call(FieldsAre(messages::Presence::Exist, triggerParams.id(),
180 UnorderedElementsAreArray(newPropertyVal))));
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100181
182 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
183 Eq(boost::system::errc::success));
184}
185
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100186TEST_F(TestTrigger, sendsUpdateWhenReportNamesChangesToSameValue)
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100187{
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100188 const std::vector<std::string> newPropertyVal = triggerParams.reportIds();
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100189
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100190 EXPECT_CALL(
191 triggerPresenceChanged,
192 Call(FieldsAre(messages::Presence::Exist, triggerParams.id(),
193 UnorderedElementsAreArray(triggerParams.reportIds()))));
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100194
195 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
196 Eq(boost::system::errc::success));
197}
198
199TEST_F(TestTrigger,
200 DISABLED_settingPropertyReportNamesThrowsExceptionWhenDuplicateReportIds)
201{
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100202 std::vector<std::string> newPropertyVal{"report1", "report2", "report1"};
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100203
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100204 EXPECT_CALL(triggerPresenceChanged, Call(_)).Times(0);
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100205
206 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
207 Eq(boost::system::errc::invalid_argument));
Szymon Dompke94f71c52021-12-10 07:16:33 +0100208}
209
210TEST_F(TestTrigger, setPropertySensors)
211{
212 EXPECT_CALL(*triggerFactoryMockPtr, updateSensors(_, _));
213 for (const auto& threshold : thresholdMocks)
214 {
215 auto thresholdMockPtr =
216 std::dynamic_pointer_cast<NiceMock<ThresholdMock>>(threshold);
217 EXPECT_CALL(*thresholdMockPtr, updateSensors(_));
218 }
219 SensorsInfo newSensors({std::make_pair(
220 sdbusplus::message::object_path("/abc/def"), "metadata")});
221 EXPECT_THAT(setProperty(sut->getPath(), "Sensors", newSensors),
222 Eq(boost::system::errc::success));
223}
224
225TEST_F(TestTrigger, setPropertyThresholds)
226{
227 EXPECT_CALL(*triggerFactoryMockPtr, updateThresholds(_, _, _, _, _));
228 TriggerThresholdParams newThresholds =
229 std::vector<discrete::ThresholdParam>(
230 {std::make_tuple("discrete threshold", "OK", 10, "12.3")});
231 EXPECT_THAT(setProperty(sut->getPath(), "Thresholds", newThresholds),
232 Eq(boost::system::errc::success));
233}
234
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100235TEST_F(TestTrigger, checkIfNumericCoversionsAreGood)
236{
237 const auto& labeledParamsBase =
238 std::get<std::vector<numeric::LabeledThresholdParam>>(
239 triggerParams.thresholdParams());
240 const auto paramsToCheck =
241 std::visit(utils::FromLabeledThresholdParamConversion(),
242 triggerParams.thresholdParams());
243 const auto labeledParamsToCheck =
244 std::get<std::vector<numeric::LabeledThresholdParam>>(std::visit(
245 utils::ToLabeledThresholdParamConversion(), paramsToCheck));
246
247 for (const auto& [tocheck, base] :
248 boost::combine(labeledParamsToCheck, labeledParamsBase))
249 {
250 EXPECT_THAT(tocheck.at_label<utils::tstring::Type>(),
251 Eq(base.at_label<utils::tstring::Type>()));
252 EXPECT_THAT(tocheck.at_label<utils::tstring::Direction>(),
253 Eq(base.at_label<utils::tstring::Direction>()));
254 EXPECT_THAT(tocheck.at_label<utils::tstring::DwellTime>(),
255 Eq(base.at_label<utils::tstring::DwellTime>()));
256 EXPECT_THAT(tocheck.at_label<utils::tstring::ThresholdValue>(),
257 Eq(base.at_label<utils::tstring::ThresholdValue>()));
258 }
259}
260
261TEST_F(TestTrigger, checkIfDiscreteCoversionsAreGood)
262{
263 const auto& labeledParamsBase =
264 std::get<std::vector<discrete::LabeledThresholdParam>>(
265 triggerDiscreteParams.thresholdParams());
266 const auto paramsToCheck =
267 std::visit(utils::FromLabeledThresholdParamConversion(),
268 triggerDiscreteParams.thresholdParams());
269 const auto labeledParamsToCheck =
270 std::get<std::vector<discrete::LabeledThresholdParam>>(std::visit(
271 utils::ToLabeledThresholdParamConversion(), paramsToCheck));
272
273 for (const auto& [tocheck, base] :
274 boost::combine(labeledParamsToCheck, labeledParamsBase))
275 {
276 EXPECT_THAT(tocheck.at_label<utils::tstring::UserId>(),
277 Eq(base.at_label<utils::tstring::UserId>()));
278 EXPECT_THAT(tocheck.at_label<utils::tstring::Severity>(),
279 Eq(base.at_label<utils::tstring::Severity>()));
280 EXPECT_THAT(tocheck.at_label<utils::tstring::DwellTime>(),
281 Eq(base.at_label<utils::tstring::DwellTime>()));
282 EXPECT_THAT(tocheck.at_label<utils::tstring::ThresholdValue>(),
283 Eq(base.at_label<utils::tstring::ThresholdValue>()));
284 }
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100285}
286
287TEST_F(TestTrigger, deleteTrigger)
288{
Szymon Dompkee28aa532021-10-27 12:33:12 +0200289 EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100290 EXPECT_CALL(*triggerManagerMockPtr, removeTrigger(sut.get()));
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100291
292 auto ec = deleteTrigger(sut->getPath());
293 EXPECT_THAT(ec, Eq(boost::system::errc::success));
294}
295
296TEST_F(TestTrigger, sendUpdateWhenTriggerIsDeleted)
297{
298 EXPECT_CALL(triggerPresenceChanged,
299 Call(FieldsAre(messages::Presence::Removed, triggerParams.id(),
300 UnorderedElementsAre())));
301
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100302 auto ec = deleteTrigger(sut->getPath());
303 EXPECT_THAT(ec, Eq(boost::system::errc::success));
304}
305
306TEST_F(TestTrigger, deletingNonExistingTriggerReturnInvalidRequestDescriptor)
307{
308 auto ec = deleteTrigger(Trigger::triggerDir + "NonExisting"s);
309 EXPECT_THAT(ec.value(), Eq(EBADR));
310}
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100311
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100312TEST_F(TestTrigger, settingPersistencyToFalseRemovesTriggerFromStorage)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100313{
Szymon Dompkee28aa532021-10-27 12:33:12 +0200314 EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100315
316 bool persistent = false;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100317 EXPECT_THAT(setProperty(sut->getPath(), "Persistent", persistent),
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100318 Eq(boost::system::errc::success));
319 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"),
320 Eq(persistent));
321}
322
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100323class TestTriggerInitialization : public TestTrigger
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100324{
325 public:
326 void SetUp() override
327 {}
328
329 nlohmann::json storedConfiguration;
330};
331
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100332TEST_F(TestTriggerInitialization,
333 exceptionDuringTriggerStoreDisablesPersistency)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100334{
335 EXPECT_CALL(storageMock, store(_, _))
336 .WillOnce(Throw(std::runtime_error("Generic error!")));
337
338 sut = makeTrigger(triggerParams);
339
340 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), Eq(false));
341}
342
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100343TEST_F(TestTriggerInitialization, creatingTriggerThrowsExceptionWhenIdIsInvalid)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100344{
345 EXPECT_CALL(storageMock, store(_, _)).Times(0);
346
Szymon Dompkee28aa532021-10-27 12:33:12 +0200347 EXPECT_THROW(makeTrigger(triggerParams.id("inv?lidId")),
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100348 sdbusplus::exception::SdBusError);
349}
350
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100351TEST_F(TestTriggerInitialization, creatingTriggerUpdatesTriggersIdsInReports)
352{
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100353 EXPECT_CALL(
354 triggerPresenceChanged,
355 Call(FieldsAre(messages::Presence::Exist, triggerParams.id(),
356 UnorderedElementsAreArray(triggerParams.reportIds()))));
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100357
358 sut = makeTrigger(triggerParams);
359}
360
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100361class TestTriggerStore : public TestTrigger
362{
363 public:
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100364 nlohmann::json storedConfiguration;
365 nlohmann::json storedDiscreteConfiguration;
366 std::unique_ptr<Trigger> sutDiscrete;
367
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100368 void SetUp() override
369 {
370 ON_CALL(storageMock, store(_, _))
371 .WillByDefault(SaveArg<1>(&storedConfiguration));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100372 sut = makeTrigger(triggerParams);
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100373
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100374 ON_CALL(storageMock, store(_, _))
375 .WillByDefault(SaveArg<1>(&storedDiscreteConfiguration));
376 sutDiscrete = makeTrigger(triggerDiscreteParams);
377 }
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100378};
379
380TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerVersion)
381{
382 ASSERT_THAT(storedConfiguration.at("Version"), Eq(expectedTriggerVersion));
383}
384
Szymon Dompkee28aa532021-10-27 12:33:12 +0200385TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerId)
386{
387 ASSERT_THAT(storedConfiguration.at("Id"), Eq(triggerParams.id()));
388}
389
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100390TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerName)
391{
392 ASSERT_THAT(storedConfiguration.at("Name"), Eq(triggerParams.name()));
393}
394
Szymon Dompke20013012021-07-23 09:54:20 +0200395TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerTriggerActions)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100396{
Szymon Dompke20013012021-07-23 09:54:20 +0200397 ASSERT_THAT(storedConfiguration.at("TriggerActions"),
Szymon Dompke94f71c52021-12-10 07:16:33 +0100398 Eq(utils::transform(triggerParams.triggerActions(),
399 [](const auto& action) {
400 return actionToString(action);
401 })));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100402}
403
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +0100404TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerReportIds)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100405{
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +0100406 ASSERT_THAT(storedConfiguration.at("ReportIds"),
407 Eq(triggerParams.reportIds()));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100408}
409
410TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerSensors)
411{
412 nlohmann::json expectedItem;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100413 expectedItem["service"] = "service1";
Szymon Dompke94f71c52021-12-10 07:16:33 +0100414 expectedItem["path"] = "/xyz/openbmc_project/sensors/temperature/BMC_Temp";
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +0100415 expectedItem["metadata"] = "metadata1";
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100416
417 ASSERT_THAT(storedConfiguration.at("Sensors"), ElementsAre(expectedItem));
418}
419
420TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerThresholdParams)
421{
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100422 nlohmann::json expectedItem0;
423 expectedItem0["type"] = 0;
424 expectedItem0["dwellTime"] = 10;
425 expectedItem0["direction"] = 1;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100426 expectedItem0["thresholdValue"] = 0.5;
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100427
428 nlohmann::json expectedItem1;
429 expectedItem1["type"] = 3;
430 expectedItem1["dwellTime"] = 10;
431 expectedItem1["direction"] = 2;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100432 expectedItem1["thresholdValue"] = 90.2;
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100433
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100434 ASSERT_THAT(storedConfiguration.at("ThresholdParamsDiscriminator"), Eq(0));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100435 ASSERT_THAT(storedConfiguration.at("ThresholdParams"),
436 ElementsAre(expectedItem0, expectedItem1));
437}
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100438
439TEST_F(TestTriggerStore,
440 settingPersistencyToTrueStoresDiscreteTriggerThresholdParams)
441{
442 nlohmann::json expectedItem0;
443 expectedItem0["userId"] = "userId";
444 expectedItem0["severity"] = discrete::Severity::warning;
445 expectedItem0["dwellTime"] = 10;
Szymon Dompke9f346792021-07-14 21:07:11 +0200446 expectedItem0["thresholdValue"] = "15.2";
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100447
448 nlohmann::json expectedItem1;
449 expectedItem1["userId"] = "userId_2";
450 expectedItem1["severity"] = discrete::Severity::critical;
451 expectedItem1["dwellTime"] = 5;
Szymon Dompke9f346792021-07-14 21:07:11 +0200452 expectedItem1["thresholdValue"] = "32.7";
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100453
454 ASSERT_THAT(storedDiscreteConfiguration.at("ThresholdParamsDiscriminator"),
455 Eq(1));
456 ASSERT_THAT(storedDiscreteConfiguration.at("ThresholdParams"),
457 ElementsAre(expectedItem0, expectedItem1));
458}