blob: 9032d05e326e676d759604e0efb5ee5cd156d588 [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 Dompkeb7b7e1b2022-05-19 10:15:48 +020024static constexpr size_t expectedTriggerVersion = 2;
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
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020081 auto id = std::make_unique<const std::string>(params.id());
82
Cezary Zwolaka4e67612021-02-18 13:16:16 +010083 return std::make_unique<Trigger>(
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010084 DbusEnvironment::getIoc(), DbusEnvironment::getObjServer(),
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +020085 std::move(id), params.name(), params.triggerActions(),
Szymon Dompke94f71c52021-12-10 07:16:33 +010086 std::make_shared<std::vector<std::string>>(
87 params.reportIds().begin(), params.reportIds().end()),
88 std::vector<std::shared_ptr<interfaces::Threshold>>(thresholdMocks),
89 *triggerManagerMockPtr, storageMock, *triggerFactoryMockPtr,
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +010090 SensorMock::makeSensorMocks(params.sensors()));
Cezary Zwolaka4e67612021-02-18 13:16:16 +010091 }
92
93 static interfaces::JsonStorage::FilePath to_file_path(std::string name)
94 {
95 return interfaces::JsonStorage::FilePath(
96 std::to_string(std::hash<std::string>{}(name)));
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010097 }
98
99 template <class T>
100 static T getProperty(const std::string& path, const std::string& property)
101 {
Szymon Dompkee28aa532021-10-27 12:33:12 +0200102 return DbusEnvironment::getProperty<T>(path, Trigger::triggerIfaceName,
103 property);
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100104 }
105
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100106 template <class T>
107 static boost::system::error_code setProperty(const std::string& path,
108 const std::string& property,
109 const T& newValue)
110 {
Szymon Dompkee28aa532021-10-27 12:33:12 +0200111 return DbusEnvironment::setProperty<T>(path, Trigger::triggerIfaceName,
112 property, newValue);
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100113 }
114
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100115 boost::system::error_code deleteTrigger(const std::string& path)
116 {
117 std::promise<boost::system::error_code> methodPromise;
118 DbusEnvironment::getBus()->async_method_call(
119 [&methodPromise](boost::system::error_code ec) {
120 methodPromise.set_value(ec);
121 },
122 DbusEnvironment::serviceName(), path, Trigger::deleteIfaceName,
123 "Delete");
124 return DbusEnvironment::waitForFuture(methodPromise.get_future());
125 }
126};
127
128TEST_F(TestTrigger, checkIfPropertiesAreSet)
129{
Szymon Dompkee28aa532021-10-27 12:33:12 +0200130 EXPECT_THAT(getProperty<std::string>(sut->getPath(), "Name"),
131 Eq(triggerParams.name()));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100132 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), Eq(true));
Szymon Dompke20013012021-07-23 09:54:20 +0200133 EXPECT_THAT(
134 getProperty<std::vector<std::string>>(sut->getPath(), "TriggerActions"),
Szymon Dompke94f71c52021-12-10 07:16:33 +0100135 Eq(utils::transform(
136 triggerParams.triggerActions(),
137 [](const auto& action) { return actionToString(action); })));
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100138 EXPECT_THAT((getProperty<SensorsInfo>(sut->getPath(), "Sensors")),
139 Eq(utils::fromLabeledSensorsInfo(triggerParams.sensors())));
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100140 EXPECT_THAT(
141 getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +0100142 Eq(triggerParams.reportIds()));
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100143 EXPECT_THAT(
Szymon Dompke94f71c52021-12-10 07:16:33 +0100144 getProperty<bool>(sut->getPath(), "Discrete"),
145 Eq(isTriggerThresholdDiscrete(triggerParams.thresholdParams())));
146 EXPECT_THAT(
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100147 getProperty<TriggerThresholdParams>(sut->getPath(), "Thresholds"),
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100148 Eq(std::visit(utils::FromLabeledThresholdParamConversion(),
149 triggerParams.thresholdParams())));
150}
151
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100152TEST_F(TestTrigger, checkBasicGetters)
153{
154 EXPECT_THAT(sut->getId(), Eq(triggerParams.id()));
155 EXPECT_THAT(sut->getPath(), Eq(Trigger::triggerDir + triggerParams.id()));
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100156}
157
Szymon Dompkee28aa532021-10-27 12:33:12 +0200158TEST_F(TestTrigger, setPropertyNameToCorrectValue)
159{
160 std::string name = "custom name 1234 %^#5";
161 EXPECT_THAT(setProperty(sut->getPath(), "Name", name),
162 Eq(boost::system::errc::success));
163 EXPECT_THAT(getProperty<std::string>(sut->getPath(), "Name"), Eq(name));
164}
165
Szymon Dompke94f71c52021-12-10 07:16:33 +0100166TEST_F(TestTrigger, setPropertyReportNames)
167{
168 std::vector<std::string> newNames = {"abc", "one", "two"};
169 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newNames),
170 Eq(boost::system::errc::success));
171 EXPECT_THAT(
172 getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
173 Eq(newNames));
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100174}
175
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100176TEST_F(TestTrigger, sendsUpdateWhenReportNamesChanges)
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100177{
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100178 const std::vector<std::string> newPropertyVal = {"abc", "one", "two"};
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100179
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100180 EXPECT_CALL(triggerPresenceChanged,
181 Call(FieldsAre(messages::Presence::Exist, triggerParams.id(),
182 UnorderedElementsAreArray(newPropertyVal))));
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100183
184 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
185 Eq(boost::system::errc::success));
186}
187
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100188TEST_F(TestTrigger, sendsUpdateWhenReportNamesChangesToSameValue)
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100189{
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100190 const std::vector<std::string> newPropertyVal = triggerParams.reportIds();
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100191
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100192 EXPECT_CALL(
193 triggerPresenceChanged,
194 Call(FieldsAre(messages::Presence::Exist, triggerParams.id(),
195 UnorderedElementsAreArray(triggerParams.reportIds()))));
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100196
197 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
198 Eq(boost::system::errc::success));
199}
200
201TEST_F(TestTrigger,
202 DISABLED_settingPropertyReportNamesThrowsExceptionWhenDuplicateReportIds)
203{
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100204 std::vector<std::string> newPropertyVal{"report1", "report2", "report1"};
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100205
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100206 EXPECT_CALL(triggerPresenceChanged, Call(_)).Times(0);
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100207
208 EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newPropertyVal),
209 Eq(boost::system::errc::invalid_argument));
Szymon Dompke94f71c52021-12-10 07:16:33 +0100210}
211
212TEST_F(TestTrigger, setPropertySensors)
213{
214 EXPECT_CALL(*triggerFactoryMockPtr, updateSensors(_, _));
215 for (const auto& threshold : thresholdMocks)
216 {
217 auto thresholdMockPtr =
218 std::dynamic_pointer_cast<NiceMock<ThresholdMock>>(threshold);
219 EXPECT_CALL(*thresholdMockPtr, updateSensors(_));
220 }
221 SensorsInfo newSensors({std::make_pair(
222 sdbusplus::message::object_path("/abc/def"), "metadata")});
223 EXPECT_THAT(setProperty(sut->getPath(), "Sensors", newSensors),
224 Eq(boost::system::errc::success));
225}
226
227TEST_F(TestTrigger, setPropertyThresholds)
228{
Szymon Dompkeb7b7e1b2022-05-19 10:15:48 +0200229 EXPECT_CALL(*triggerFactoryMockPtr, updateThresholds(_, _, _, _, _, _));
Szymon Dompke94f71c52021-12-10 07:16:33 +0100230 TriggerThresholdParams newThresholds =
231 std::vector<discrete::ThresholdParam>(
232 {std::make_tuple("discrete threshold", "OK", 10, "12.3")});
233 EXPECT_THAT(setProperty(sut->getPath(), "Thresholds", newThresholds),
234 Eq(boost::system::errc::success));
235}
236
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100237TEST_F(TestTrigger, checkIfNumericCoversionsAreGood)
238{
239 const auto& labeledParamsBase =
240 std::get<std::vector<numeric::LabeledThresholdParam>>(
241 triggerParams.thresholdParams());
242 const auto paramsToCheck =
243 std::visit(utils::FromLabeledThresholdParamConversion(),
244 triggerParams.thresholdParams());
245 const auto labeledParamsToCheck =
246 std::get<std::vector<numeric::LabeledThresholdParam>>(std::visit(
247 utils::ToLabeledThresholdParamConversion(), paramsToCheck));
248
249 for (const auto& [tocheck, base] :
250 boost::combine(labeledParamsToCheck, labeledParamsBase))
251 {
252 EXPECT_THAT(tocheck.at_label<utils::tstring::Type>(),
253 Eq(base.at_label<utils::tstring::Type>()));
254 EXPECT_THAT(tocheck.at_label<utils::tstring::Direction>(),
255 Eq(base.at_label<utils::tstring::Direction>()));
256 EXPECT_THAT(tocheck.at_label<utils::tstring::DwellTime>(),
257 Eq(base.at_label<utils::tstring::DwellTime>()));
258 EXPECT_THAT(tocheck.at_label<utils::tstring::ThresholdValue>(),
259 Eq(base.at_label<utils::tstring::ThresholdValue>()));
260 }
261}
262
263TEST_F(TestTrigger, checkIfDiscreteCoversionsAreGood)
264{
265 const auto& labeledParamsBase =
266 std::get<std::vector<discrete::LabeledThresholdParam>>(
267 triggerDiscreteParams.thresholdParams());
268 const auto paramsToCheck =
269 std::visit(utils::FromLabeledThresholdParamConversion(),
270 triggerDiscreteParams.thresholdParams());
271 const auto labeledParamsToCheck =
272 std::get<std::vector<discrete::LabeledThresholdParam>>(std::visit(
273 utils::ToLabeledThresholdParamConversion(), paramsToCheck));
274
275 for (const auto& [tocheck, base] :
276 boost::combine(labeledParamsToCheck, labeledParamsBase))
277 {
278 EXPECT_THAT(tocheck.at_label<utils::tstring::UserId>(),
279 Eq(base.at_label<utils::tstring::UserId>()));
280 EXPECT_THAT(tocheck.at_label<utils::tstring::Severity>(),
281 Eq(base.at_label<utils::tstring::Severity>()));
282 EXPECT_THAT(tocheck.at_label<utils::tstring::DwellTime>(),
283 Eq(base.at_label<utils::tstring::DwellTime>()));
284 EXPECT_THAT(tocheck.at_label<utils::tstring::ThresholdValue>(),
285 Eq(base.at_label<utils::tstring::ThresholdValue>()));
286 }
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100287}
288
289TEST_F(TestTrigger, deleteTrigger)
290{
Szymon Dompkee28aa532021-10-27 12:33:12 +0200291 EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100292 EXPECT_CALL(*triggerManagerMockPtr, removeTrigger(sut.get()));
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100293
294 auto ec = deleteTrigger(sut->getPath());
295 EXPECT_THAT(ec, Eq(boost::system::errc::success));
296}
297
298TEST_F(TestTrigger, sendUpdateWhenTriggerIsDeleted)
299{
300 EXPECT_CALL(triggerPresenceChanged,
301 Call(FieldsAre(messages::Presence::Removed, triggerParams.id(),
302 UnorderedElementsAre())));
303
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100304 auto ec = deleteTrigger(sut->getPath());
305 EXPECT_THAT(ec, Eq(boost::system::errc::success));
306}
307
308TEST_F(TestTrigger, deletingNonExistingTriggerReturnInvalidRequestDescriptor)
309{
310 auto ec = deleteTrigger(Trigger::triggerDir + "NonExisting"s);
311 EXPECT_THAT(ec.value(), Eq(EBADR));
312}
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100313
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100314TEST_F(TestTrigger, settingPersistencyToFalseRemovesTriggerFromStorage)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100315{
Szymon Dompkee28aa532021-10-27 12:33:12 +0200316 EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100317
318 bool persistent = false;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100319 EXPECT_THAT(setProperty(sut->getPath(), "Persistent", persistent),
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100320 Eq(boost::system::errc::success));
321 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"),
322 Eq(persistent));
323}
324
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100325class TestTriggerInitialization : public TestTrigger
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100326{
327 public:
328 void SetUp() override
329 {}
330
331 nlohmann::json storedConfiguration;
332};
333
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100334TEST_F(TestTriggerInitialization,
335 exceptionDuringTriggerStoreDisablesPersistency)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100336{
337 EXPECT_CALL(storageMock, store(_, _))
338 .WillOnce(Throw(std::runtime_error("Generic error!")));
339
340 sut = makeTrigger(triggerParams);
341
342 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), Eq(false));
343}
344
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100345TEST_F(TestTriggerInitialization, creatingTriggerThrowsExceptionWhenIdIsInvalid)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100346{
347 EXPECT_CALL(storageMock, store(_, _)).Times(0);
348
Szymon Dompkee28aa532021-10-27 12:33:12 +0200349 EXPECT_THROW(makeTrigger(triggerParams.id("inv?lidId")),
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100350 sdbusplus::exception::SdBusError);
351}
352
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100353TEST_F(TestTriggerInitialization, creatingTriggerUpdatesTriggersIdsInReports)
354{
Krzysztof Grobelnye6d48872022-02-08 13:41:30 +0100355 EXPECT_CALL(
356 triggerPresenceChanged,
357 Call(FieldsAre(messages::Presence::Exist, triggerParams.id(),
358 UnorderedElementsAreArray(triggerParams.reportIds()))));
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100359
360 sut = makeTrigger(triggerParams);
361}
362
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100363class TestTriggerStore : public TestTrigger
364{
365 public:
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100366 nlohmann::json storedConfiguration;
367 nlohmann::json storedDiscreteConfiguration;
368 std::unique_ptr<Trigger> sutDiscrete;
369
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100370 void SetUp() override
371 {
372 ON_CALL(storageMock, store(_, _))
373 .WillByDefault(SaveArg<1>(&storedConfiguration));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100374 sut = makeTrigger(triggerParams);
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100375
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100376 ON_CALL(storageMock, store(_, _))
377 .WillByDefault(SaveArg<1>(&storedDiscreteConfiguration));
378 sutDiscrete = makeTrigger(triggerDiscreteParams);
379 }
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100380};
381
382TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerVersion)
383{
384 ASSERT_THAT(storedConfiguration.at("Version"), Eq(expectedTriggerVersion));
385}
386
Szymon Dompkee28aa532021-10-27 12:33:12 +0200387TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerId)
388{
389 ASSERT_THAT(storedConfiguration.at("Id"), Eq(triggerParams.id()));
390}
391
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100392TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerName)
393{
394 ASSERT_THAT(storedConfiguration.at("Name"), Eq(triggerParams.name()));
395}
396
Szymon Dompke20013012021-07-23 09:54:20 +0200397TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerTriggerActions)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100398{
Szymon Dompke20013012021-07-23 09:54:20 +0200399 ASSERT_THAT(storedConfiguration.at("TriggerActions"),
Szymon Dompke94f71c52021-12-10 07:16:33 +0100400 Eq(utils::transform(triggerParams.triggerActions(),
401 [](const auto& action) {
402 return actionToString(action);
403 })));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100404}
405
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +0100406TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerReportIds)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100407{
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +0100408 ASSERT_THAT(storedConfiguration.at("ReportIds"),
409 Eq(triggerParams.reportIds()));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100410}
411
412TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerSensors)
413{
414 nlohmann::json expectedItem;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100415 expectedItem["service"] = "service1";
Szymon Dompke94f71c52021-12-10 07:16:33 +0100416 expectedItem["path"] = "/xyz/openbmc_project/sensors/temperature/BMC_Temp";
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +0100417 expectedItem["metadata"] = "metadata1";
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100418
419 ASSERT_THAT(storedConfiguration.at("Sensors"), ElementsAre(expectedItem));
420}
421
422TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerThresholdParams)
423{
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100424 nlohmann::json expectedItem0;
425 expectedItem0["type"] = 0;
426 expectedItem0["dwellTime"] = 10;
427 expectedItem0["direction"] = 1;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100428 expectedItem0["thresholdValue"] = 0.5;
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100429
430 nlohmann::json expectedItem1;
431 expectedItem1["type"] = 3;
432 expectedItem1["dwellTime"] = 10;
433 expectedItem1["direction"] = 2;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100434 expectedItem1["thresholdValue"] = 90.2;
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100435
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100436 ASSERT_THAT(storedConfiguration.at("ThresholdParamsDiscriminator"), Eq(0));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100437 ASSERT_THAT(storedConfiguration.at("ThresholdParams"),
438 ElementsAre(expectedItem0, expectedItem1));
439}
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100440
441TEST_F(TestTriggerStore,
442 settingPersistencyToTrueStoresDiscreteTriggerThresholdParams)
443{
444 nlohmann::json expectedItem0;
445 expectedItem0["userId"] = "userId";
446 expectedItem0["severity"] = discrete::Severity::warning;
447 expectedItem0["dwellTime"] = 10;
Szymon Dompke9f346792021-07-14 21:07:11 +0200448 expectedItem0["thresholdValue"] = "15.2";
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100449
450 nlohmann::json expectedItem1;
451 expectedItem1["userId"] = "userId_2";
452 expectedItem1["severity"] = discrete::Severity::critical;
453 expectedItem1["dwellTime"] = 5;
Szymon Dompke9f346792021-07-14 21:07:11 +0200454 expectedItem1["thresholdValue"] = "32.7";
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100455
456 ASSERT_THAT(storedDiscreteConfiguration.at("ThresholdParamsDiscriminator"),
457 Eq(1));
458 ASSERT_THAT(storedDiscreteConfiguration.at("ThresholdParams"),
459 ElementsAre(expectedItem0, expectedItem1));
460}