blob: 5ad2a81f0800b8b20268b13beec84271c64ad93b [file] [log] [blame]
Wludzik, Jozef76833cb2020-12-21 14:42:41 +01001#include "dbus_environment.hpp"
2#include "helpers.hpp"
Cezary Zwolaka4e67612021-02-18 13:16:16 +01003#include "mocks/json_storage_mock.hpp"
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +01004#include "mocks/report_manager_mock.hpp"
Szymon Dompke94f71c52021-12-10 07:16:33 +01005#include "mocks/sensor_mock.hpp"
6#include "mocks/threshold_mock.hpp"
7#include "mocks/trigger_factory_mock.hpp"
Wludzik, Jozef76833cb2020-12-21 14:42:41 +01008#include "mocks/trigger_manager_mock.hpp"
9#include "params/trigger_params.hpp"
10#include "trigger.hpp"
Szymon Dompkee28aa532021-10-27 12:33:12 +020011#include "trigger_manager.hpp"
Cezary Zwolak4416fce2021-03-17 03:21:06 +010012#include "utils/conversion_trigger.hpp"
Cezary Zwolak4416fce2021-03-17 03:21:06 +010013#include "utils/transform.hpp"
14#include "utils/tstring.hpp"
15
16#include <boost/range/combine.hpp>
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010017
18using namespace testing;
19using namespace std::literals::string_literals;
20
Szymon Dompke94f71c52021-12-10 07:16:33 +010021static constexpr size_t expectedTriggerVersion = 1;
Cezary Zwolaka4e67612021-02-18 13:16:16 +010022
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010023class TestTrigger : public Test
24{
25 public:
26 TriggerParams triggerParams;
Cezary Zwolak4416fce2021-03-17 03:21:06 +010027 TriggerParams triggerDiscreteParams =
28 TriggerParams()
Szymon Dompkee28aa532021-10-27 12:33:12 +020029 .id("DiscreteTrigger")
30 .name("My Discrete Trigger")
Cezary Zwolak4416fce2021-03-17 03:21:06 +010031 .thresholdParams(std::vector<discrete::LabeledThresholdParam>{
32 discrete::LabeledThresholdParam{
33 "userId", discrete::Severity::warning,
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000034 Milliseconds(10).count(), "15.2"},
Cezary Zwolak4416fce2021-03-17 03:21:06 +010035 discrete::LabeledThresholdParam{
36 "userId_2", discrete::Severity::critical,
Krzysztof Grobelnydcc4e192021-03-08 09:09:34 +000037 Milliseconds(5).count(), "32.7"},
Cezary Zwolak4416fce2021-03-17 03:21:06 +010038 });
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010039
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +010040 std::unique_ptr<ReportManagerMock> reportManagerMockPtr =
41 std::make_unique<NiceMock<ReportManagerMock>>();
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010042 std::unique_ptr<TriggerManagerMock> triggerManagerMockPtr =
43 std::make_unique<NiceMock<TriggerManagerMock>>();
Szymon Dompke94f71c52021-12-10 07:16:33 +010044 std::unique_ptr<TriggerFactoryMock> triggerFactoryMockPtr =
45 std::make_unique<NiceMock<TriggerFactoryMock>>();
Cezary Zwolaka4e67612021-02-18 13:16:16 +010046 testing::NiceMock<StorageMock> storageMock;
Szymon Dompke94f71c52021-12-10 07:16:33 +010047 std::vector<std::shared_ptr<interfaces::Threshold>> thresholdMocks;
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010048 std::unique_ptr<Trigger> sut;
49
50 void SetUp() override
51 {
Cezary Zwolaka4e67612021-02-18 13:16:16 +010052 sut = makeTrigger(triggerParams);
53 }
54
Cezary Zwolak4416fce2021-03-17 03:21:06 +010055 static std::vector<LabeledSensorInfo>
56 convertToLabeledSensor(const SensorsInfo& sensorsInfo)
57 {
58 return utils::transform(sensorsInfo, [](const auto& sensorInfo) {
59 const auto& [sensorPath, sensorMetadata] = sensorInfo;
60 return LabeledSensorInfo("service1", sensorPath, sensorMetadata);
61 });
62 }
63
Cezary Zwolaka4e67612021-02-18 13:16:16 +010064 std::unique_ptr<Trigger> makeTrigger(const TriggerParams& params)
65 {
Szymon Dompke94f71c52021-12-10 07:16:33 +010066 thresholdMocks =
67 ThresholdMock::makeThresholds(params.thresholdParams());
68
Cezary Zwolaka4e67612021-02-18 13:16:16 +010069 return std::make_unique<Trigger>(
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010070 DbusEnvironment::getIoc(), DbusEnvironment::getObjServer(),
Szymon Dompkee28aa532021-10-27 12:33:12 +020071 params.id(), params.name(), params.triggerActions(),
Szymon Dompke94f71c52021-12-10 07:16:33 +010072 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,
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +010076 SensorMock::makeSensorMocks(params.sensors()),
77 *reportManagerMockPtr);
Cezary Zwolaka4e67612021-02-18 13:16:16 +010078 }
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)));
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010084 }
85
86 template <class T>
87 static T getProperty(const std::string& path, const std::string& property)
88 {
Szymon Dompkee28aa532021-10-27 12:33:12 +020089 return DbusEnvironment::getProperty<T>(path, Trigger::triggerIfaceName,
90 property);
Wludzik, Jozef76833cb2020-12-21 14:42:41 +010091 }
92
Cezary Zwolaka4e67612021-02-18 13:16:16 +010093 template <class T>
94 static boost::system::error_code setProperty(const std::string& path,
95 const std::string& property,
96 const T& newValue)
97 {
Szymon Dompkee28aa532021-10-27 12:33:12 +020098 return DbusEnvironment::setProperty<T>(path, Trigger::triggerIfaceName,
99 property, newValue);
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100100 }
101
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100102 boost::system::error_code deleteTrigger(const std::string& path)
103 {
104 std::promise<boost::system::error_code> methodPromise;
105 DbusEnvironment::getBus()->async_method_call(
106 [&methodPromise](boost::system::error_code ec) {
107 methodPromise.set_value(ec);
108 },
109 DbusEnvironment::serviceName(), path, Trigger::deleteIfaceName,
110 "Delete");
111 return DbusEnvironment::waitForFuture(methodPromise.get_future());
112 }
113};
114
115TEST_F(TestTrigger, checkIfPropertiesAreSet)
116{
Szymon Dompkee28aa532021-10-27 12:33:12 +0200117 EXPECT_THAT(getProperty<std::string>(sut->getPath(), "Name"),
118 Eq(triggerParams.name()));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100119 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), Eq(true));
Szymon Dompke20013012021-07-23 09:54:20 +0200120 EXPECT_THAT(
121 getProperty<std::vector<std::string>>(sut->getPath(), "TriggerActions"),
Szymon Dompke94f71c52021-12-10 07:16:33 +0100122 Eq(utils::transform(
123 triggerParams.triggerActions(),
124 [](const auto& action) { return actionToString(action); })));
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100125 EXPECT_THAT((getProperty<SensorsInfo>(sut->getPath(), "Sensors")),
126 Eq(utils::fromLabeledSensorsInfo(triggerParams.sensors())));
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100127 EXPECT_THAT(
128 getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +0100129 Eq(triggerParams.reportIds()));
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100130 EXPECT_THAT(
Szymon Dompke94f71c52021-12-10 07:16:33 +0100131 getProperty<bool>(sut->getPath(), "Discrete"),
132 Eq(isTriggerThresholdDiscrete(triggerParams.thresholdParams())));
133 EXPECT_THAT(
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100134 getProperty<TriggerThresholdParams>(sut->getPath(), "Thresholds"),
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100135 Eq(std::visit(utils::FromLabeledThresholdParamConversion(),
136 triggerParams.thresholdParams())));
137}
138
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100139TEST_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
Szymon Dompkee28aa532021-10-27 12:33:12 +0200146TEST_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
Szymon Dompke94f71c52021-12-10 07:16:33 +0100154TEST_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));
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100162 EXPECT_THAT(
163 getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
164 Eq(sut->getReportIds()));
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));
Szymon Dompke94f71c52021-12-10 07:16:33 +0100226}
227
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(_));
236 }
237 SensorsInfo newSensors({std::make_pair(
238 sdbusplus::message::object_path("/abc/def"), "metadata")});
239 EXPECT_THAT(setProperty(sut->getPath(), "Sensors", newSensors),
240 Eq(boost::system::errc::success));
241}
242
243TEST_F(TestTrigger, setPropertyThresholds)
244{
245 EXPECT_CALL(*triggerFactoryMockPtr, updateThresholds(_, _, _, _, _));
246 TriggerThresholdParams newThresholds =
247 std::vector<discrete::ThresholdParam>(
248 {std::make_tuple("discrete threshold", "OK", 10, "12.3")});
249 EXPECT_THAT(setProperty(sut->getPath(), "Thresholds", newThresholds),
250 Eq(boost::system::errc::success));
251}
252
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100253TEST_F(TestTrigger, checkIfNumericCoversionsAreGood)
254{
255 const auto& labeledParamsBase =
256 std::get<std::vector<numeric::LabeledThresholdParam>>(
257 triggerParams.thresholdParams());
258 const auto paramsToCheck =
259 std::visit(utils::FromLabeledThresholdParamConversion(),
260 triggerParams.thresholdParams());
261 const auto labeledParamsToCheck =
262 std::get<std::vector<numeric::LabeledThresholdParam>>(std::visit(
263 utils::ToLabeledThresholdParamConversion(), paramsToCheck));
264
265 for (const auto& [tocheck, base] :
266 boost::combine(labeledParamsToCheck, labeledParamsBase))
267 {
268 EXPECT_THAT(tocheck.at_label<utils::tstring::Type>(),
269 Eq(base.at_label<utils::tstring::Type>()));
270 EXPECT_THAT(tocheck.at_label<utils::tstring::Direction>(),
271 Eq(base.at_label<utils::tstring::Direction>()));
272 EXPECT_THAT(tocheck.at_label<utils::tstring::DwellTime>(),
273 Eq(base.at_label<utils::tstring::DwellTime>()));
274 EXPECT_THAT(tocheck.at_label<utils::tstring::ThresholdValue>(),
275 Eq(base.at_label<utils::tstring::ThresholdValue>()));
276 }
277}
278
279TEST_F(TestTrigger, checkIfDiscreteCoversionsAreGood)
280{
281 const auto& labeledParamsBase =
282 std::get<std::vector<discrete::LabeledThresholdParam>>(
283 triggerDiscreteParams.thresholdParams());
284 const auto paramsToCheck =
285 std::visit(utils::FromLabeledThresholdParamConversion(),
286 triggerDiscreteParams.thresholdParams());
287 const auto labeledParamsToCheck =
288 std::get<std::vector<discrete::LabeledThresholdParam>>(std::visit(
289 utils::ToLabeledThresholdParamConversion(), paramsToCheck));
290
291 for (const auto& [tocheck, base] :
292 boost::combine(labeledParamsToCheck, labeledParamsBase))
293 {
294 EXPECT_THAT(tocheck.at_label<utils::tstring::UserId>(),
295 Eq(base.at_label<utils::tstring::UserId>()));
296 EXPECT_THAT(tocheck.at_label<utils::tstring::Severity>(),
297 Eq(base.at_label<utils::tstring::Severity>()));
298 EXPECT_THAT(tocheck.at_label<utils::tstring::DwellTime>(),
299 Eq(base.at_label<utils::tstring::DwellTime>()));
300 EXPECT_THAT(tocheck.at_label<utils::tstring::ThresholdValue>(),
301 Eq(base.at_label<utils::tstring::ThresholdValue>()));
302 }
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100303}
304
305TEST_F(TestTrigger, deleteTrigger)
306{
Szymon Dompkee28aa532021-10-27 12:33:12 +0200307 EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100308 EXPECT_CALL(*triggerManagerMockPtr, removeTrigger(sut.get()));
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100309 for (const auto& reportId : triggerParams.reportIds())
310 {
311 EXPECT_CALL(
312 *reportManagerMockPtr,
313 updateTriggerIds(reportId, sut->getId(), TriggerIdUpdate::Remove));
314 }
Wludzik, Jozef76833cb2020-12-21 14:42:41 +0100315 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));
323}
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100324
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100325TEST_F(TestTrigger, settingPersistencyToFalseRemovesTriggerFromStorage)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100326{
Szymon Dompkee28aa532021-10-27 12:33:12 +0200327 EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100328
329 bool persistent = false;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100330 EXPECT_THAT(setProperty(sut->getPath(), "Persistent", persistent),
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100331 Eq(boost::system::errc::success));
332 EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"),
333 Eq(persistent));
334}
335
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100336class TestTriggerInitialization : public TestTrigger
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100337{
338 public:
339 void SetUp() override
340 {}
341
342 nlohmann::json storedConfiguration;
343};
344
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100345TEST_F(TestTriggerInitialization,
346 exceptionDuringTriggerStoreDisablesPersistency)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100347{
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
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100356TEST_F(TestTriggerInitialization, creatingTriggerThrowsExceptionWhenIdIsInvalid)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100357{
358 EXPECT_CALL(storageMock, store(_, _)).Times(0);
359
Szymon Dompkee28aa532021-10-27 12:33:12 +0200360 EXPECT_THROW(makeTrigger(triggerParams.id("inv?lidId")),
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100361 sdbusplus::exception::SdBusError);
362}
363
Szymon Dompkeb4ef22e2022-02-07 15:15:12 +0100364TEST_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
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100376class TestTriggerStore : public TestTrigger
377{
378 public:
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100379 nlohmann::json storedConfiguration;
380 nlohmann::json storedDiscreteConfiguration;
381 std::unique_ptr<Trigger> sutDiscrete;
382
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100383 void SetUp() override
384 {
385 ON_CALL(storageMock, store(_, _))
386 .WillByDefault(SaveArg<1>(&storedConfiguration));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100387 sut = makeTrigger(triggerParams);
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100388
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100389 ON_CALL(storageMock, store(_, _))
390 .WillByDefault(SaveArg<1>(&storedDiscreteConfiguration));
391 sutDiscrete = makeTrigger(triggerDiscreteParams);
392 }
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100393};
394
395TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerVersion)
396{
397 ASSERT_THAT(storedConfiguration.at("Version"), Eq(expectedTriggerVersion));
398}
399
Szymon Dompkee28aa532021-10-27 12:33:12 +0200400TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerId)
401{
402 ASSERT_THAT(storedConfiguration.at("Id"), Eq(triggerParams.id()));
403}
404
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100405TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerName)
406{
407 ASSERT_THAT(storedConfiguration.at("Name"), Eq(triggerParams.name()));
408}
409
Szymon Dompke20013012021-07-23 09:54:20 +0200410TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerTriggerActions)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100411{
Szymon Dompke20013012021-07-23 09:54:20 +0200412 ASSERT_THAT(storedConfiguration.at("TriggerActions"),
Szymon Dompke94f71c52021-12-10 07:16:33 +0100413 Eq(utils::transform(triggerParams.triggerActions(),
414 [](const auto& action) {
415 return actionToString(action);
416 })));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100417}
418
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +0100419TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerReportIds)
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100420{
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +0100421 ASSERT_THAT(storedConfiguration.at("ReportIds"),
422 Eq(triggerParams.reportIds()));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100423}
424
425TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerSensors)
426{
427 nlohmann::json expectedItem;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100428 expectedItem["service"] = "service1";
Szymon Dompke94f71c52021-12-10 07:16:33 +0100429 expectedItem["path"] = "/xyz/openbmc_project/sensors/temperature/BMC_Temp";
Krzysztof Grobelnyb8cc78d2021-11-29 15:54:53 +0100430 expectedItem["metadata"] = "metadata1";
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100431
432 ASSERT_THAT(storedConfiguration.at("Sensors"), ElementsAre(expectedItem));
433}
434
435TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerThresholdParams)
436{
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100437 nlohmann::json expectedItem0;
438 expectedItem0["type"] = 0;
439 expectedItem0["dwellTime"] = 10;
440 expectedItem0["direction"] = 1;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100441 expectedItem0["thresholdValue"] = 0.5;
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100442
443 nlohmann::json expectedItem1;
444 expectedItem1["type"] = 3;
445 expectedItem1["dwellTime"] = 10;
446 expectedItem1["direction"] = 2;
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100447 expectedItem1["thresholdValue"] = 90.2;
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100448
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100449 ASSERT_THAT(storedConfiguration.at("ThresholdParamsDiscriminator"), Eq(0));
Cezary Zwolaka4e67612021-02-18 13:16:16 +0100450 ASSERT_THAT(storedConfiguration.at("ThresholdParams"),
451 ElementsAre(expectedItem0, expectedItem1));
452}
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100453
454TEST_F(TestTriggerStore,
455 settingPersistencyToTrueStoresDiscreteTriggerThresholdParams)
456{
457 nlohmann::json expectedItem0;
458 expectedItem0["userId"] = "userId";
459 expectedItem0["severity"] = discrete::Severity::warning;
460 expectedItem0["dwellTime"] = 10;
Szymon Dompke9f346792021-07-14 21:07:11 +0200461 expectedItem0["thresholdValue"] = "15.2";
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100462
463 nlohmann::json expectedItem1;
464 expectedItem1["userId"] = "userId_2";
465 expectedItem1["severity"] = discrete::Severity::critical;
466 expectedItem1["dwellTime"] = 5;
Szymon Dompke9f346792021-07-14 21:07:11 +0200467 expectedItem1["thresholdValue"] = "32.7";
Cezary Zwolak4416fce2021-03-17 03:21:06 +0100468
469 ASSERT_THAT(storedDiscreteConfiguration.at("ThresholdParamsDiscriminator"),
470 Eq(1));
471 ASSERT_THAT(storedDiscreteConfiguration.at("ThresholdParams"),
472 ElementsAre(expectedItem0, expectedItem1));
473}