176833cb5SWludzik, Jozef #include "dbus_environment.hpp"
276833cb5SWludzik, Jozef #include "helpers.hpp"
3a4e67616SCezary Zwolak #include "mocks/json_storage_mock.hpp"
476833cb5SWludzik, Jozef #include "mocks/trigger_manager_mock.hpp"
576833cb5SWludzik, Jozef #include "params/trigger_params.hpp"
676833cb5SWludzik, Jozef #include "trigger.hpp"
74416fce6SCezary Zwolak #include "utils/conversion_trigger.hpp"
876833cb5SWludzik, Jozef #include "utils/set_exception.hpp"
94416fce6SCezary Zwolak #include "utils/transform.hpp"
104416fce6SCezary Zwolak #include "utils/tstring.hpp"
114416fce6SCezary Zwolak 
124416fce6SCezary Zwolak #include <boost/range/combine.hpp>
1376833cb5SWludzik, Jozef 
1476833cb5SWludzik, Jozef using namespace testing;
1576833cb5SWludzik, Jozef using namespace std::literals::string_literals;
1676833cb5SWludzik, Jozef 
17a4e67616SCezary Zwolak static constexpr size_t expectedTriggerVersion = 0;
18a4e67616SCezary Zwolak 
1976833cb5SWludzik, Jozef class TestTrigger : public Test
2076833cb5SWludzik, Jozef {
2176833cb5SWludzik, Jozef   public:
2276833cb5SWludzik, Jozef     TriggerParams triggerParams;
234416fce6SCezary Zwolak     TriggerParams triggerDiscreteParams =
244416fce6SCezary Zwolak         TriggerParams()
254416fce6SCezary Zwolak             .name("Trigger2")
264416fce6SCezary Zwolak             .isDiscrete(true)
274416fce6SCezary Zwolak             .thresholdParams(std::vector<discrete::LabeledThresholdParam>{
284416fce6SCezary Zwolak                 discrete::LabeledThresholdParam{
294416fce6SCezary Zwolak                     "userId", discrete::Severity::warning,
30*9f346790SSzymon Dompke                     std::chrono::milliseconds(10).count(), "15.2"},
314416fce6SCezary Zwolak                 discrete::LabeledThresholdParam{
324416fce6SCezary Zwolak                     "userId_2", discrete::Severity::critical,
33*9f346790SSzymon Dompke                     std::chrono::milliseconds(5).count(), "32.7"},
344416fce6SCezary Zwolak             });
3576833cb5SWludzik, Jozef 
3676833cb5SWludzik, Jozef     std::unique_ptr<TriggerManagerMock> triggerManagerMockPtr =
3776833cb5SWludzik, Jozef         std::make_unique<NiceMock<TriggerManagerMock>>();
38a4e67616SCezary Zwolak     testing::NiceMock<StorageMock> storageMock;
3976833cb5SWludzik, Jozef     std::unique_ptr<Trigger> sut;
4076833cb5SWludzik, Jozef 
4176833cb5SWludzik, Jozef     void SetUp() override
4276833cb5SWludzik, Jozef     {
43a4e67616SCezary Zwolak         sut = makeTrigger(triggerParams);
44a4e67616SCezary Zwolak     }
45a4e67616SCezary Zwolak 
464416fce6SCezary Zwolak     static std::vector<LabeledSensorInfo>
474416fce6SCezary Zwolak         convertToLabeledSensor(const SensorsInfo& sensorsInfo)
484416fce6SCezary Zwolak     {
494416fce6SCezary Zwolak         return utils::transform(sensorsInfo, [](const auto& sensorInfo) {
504416fce6SCezary Zwolak             const auto& [sensorPath, sensorMetadata] = sensorInfo;
514416fce6SCezary Zwolak             return LabeledSensorInfo("service1", sensorPath, sensorMetadata);
524416fce6SCezary Zwolak         });
534416fce6SCezary Zwolak     }
544416fce6SCezary Zwolak 
55a4e67616SCezary Zwolak     std::unique_ptr<Trigger> makeTrigger(const TriggerParams& params)
56a4e67616SCezary Zwolak     {
57a4e67616SCezary Zwolak         return std::make_unique<Trigger>(
5876833cb5SWludzik, Jozef             DbusEnvironment::getIoc(), DbusEnvironment::getObjServer(),
59a4e67616SCezary Zwolak             params.name(), params.isDiscrete(), params.logToJournal(),
604416fce6SCezary Zwolak             params.logToRedfish(), params.updateReport(), params.reportNames(),
614416fce6SCezary Zwolak             params.sensors(), params.thresholdParams(),
621477fe6aSWludzik, Jozef             std::vector<std::shared_ptr<interfaces::Threshold>>{},
63a4e67616SCezary Zwolak             *triggerManagerMockPtr, storageMock);
64a4e67616SCezary Zwolak     }
65a4e67616SCezary Zwolak 
66a4e67616SCezary Zwolak     static interfaces::JsonStorage::FilePath to_file_path(std::string name)
67a4e67616SCezary Zwolak     {
68a4e67616SCezary Zwolak         return interfaces::JsonStorage::FilePath(
69a4e67616SCezary Zwolak             std::to_string(std::hash<std::string>{}(name)));
7076833cb5SWludzik, Jozef     }
7176833cb5SWludzik, Jozef 
7276833cb5SWludzik, Jozef     template <class T>
7376833cb5SWludzik, Jozef     static T getProperty(const std::string& path, const std::string& property)
7476833cb5SWludzik, Jozef     {
750e7ae5dbSEd Tanous         auto propertyPromise = std::promise<T>();
760e7ae5dbSEd Tanous         auto propertyFuture = propertyPromise.get_future();
7776833cb5SWludzik, Jozef         sdbusplus::asio::getProperty<T>(
7876833cb5SWludzik, Jozef             *DbusEnvironment::getBus(), DbusEnvironment::serviceName(), path,
7976833cb5SWludzik, Jozef             Trigger::triggerIfaceName, property,
800e7ae5dbSEd Tanous             [&propertyPromise](const boost::system::error_code& ec, T t) {
810e7ae5dbSEd Tanous                 if (ec)
820e7ae5dbSEd Tanous                 {
8376833cb5SWludzik, Jozef                     utils::setException(propertyPromise, "GetProperty failed");
840e7ae5dbSEd Tanous                     return;
850e7ae5dbSEd Tanous                 }
860e7ae5dbSEd Tanous                 propertyPromise.set_value(t);
870e7ae5dbSEd Tanous             });
880e7ae5dbSEd Tanous         return DbusEnvironment::waitForFuture(std::move(propertyFuture));
8976833cb5SWludzik, Jozef     }
9076833cb5SWludzik, Jozef 
91a4e67616SCezary Zwolak     template <class T>
92a4e67616SCezary Zwolak     static boost::system::error_code setProperty(const std::string& path,
93a4e67616SCezary Zwolak                                                  const std::string& property,
94a4e67616SCezary Zwolak                                                  const T& newValue)
95a4e67616SCezary Zwolak     {
96a4e67616SCezary Zwolak         auto setPromise = std::promise<boost::system::error_code>();
97a4e67616SCezary Zwolak         auto setFuture = setPromise.get_future();
98a4e67616SCezary Zwolak 
99a4e67616SCezary Zwolak         sdbusplus::asio::setProperty(
100a4e67616SCezary Zwolak             *DbusEnvironment::getBus(), DbusEnvironment::serviceName(), path,
101a4e67616SCezary Zwolak             Trigger::triggerIfaceName, property, std::move(newValue),
102a4e67616SCezary Zwolak             [setPromise =
103a4e67616SCezary Zwolak                  std::move(setPromise)](boost::system::error_code ec) mutable {
104a4e67616SCezary Zwolak                 setPromise.set_value(ec);
105a4e67616SCezary Zwolak             });
106a4e67616SCezary Zwolak         return DbusEnvironment::waitForFuture(std::move(setFuture));
107a4e67616SCezary Zwolak     }
108a4e67616SCezary Zwolak 
10976833cb5SWludzik, Jozef     boost::system::error_code deleteTrigger(const std::string& path)
11076833cb5SWludzik, Jozef     {
11176833cb5SWludzik, Jozef         std::promise<boost::system::error_code> methodPromise;
11276833cb5SWludzik, Jozef         DbusEnvironment::getBus()->async_method_call(
11376833cb5SWludzik, Jozef             [&methodPromise](boost::system::error_code ec) {
11476833cb5SWludzik, Jozef                 methodPromise.set_value(ec);
11576833cb5SWludzik, Jozef             },
11676833cb5SWludzik, Jozef             DbusEnvironment::serviceName(), path, Trigger::deleteIfaceName,
11776833cb5SWludzik, Jozef             "Delete");
11876833cb5SWludzik, Jozef         return DbusEnvironment::waitForFuture(methodPromise.get_future());
11976833cb5SWludzik, Jozef     }
12076833cb5SWludzik, Jozef };
12176833cb5SWludzik, Jozef 
12276833cb5SWludzik, Jozef TEST_F(TestTrigger, checkIfPropertiesAreSet)
12376833cb5SWludzik, Jozef {
124a4e67616SCezary Zwolak     EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), Eq(true));
12576833cb5SWludzik, Jozef     EXPECT_THAT(getProperty<bool>(sut->getPath(), "Discrete"),
12676833cb5SWludzik, Jozef                 Eq(triggerParams.isDiscrete()));
12776833cb5SWludzik, Jozef     EXPECT_THAT(getProperty<bool>(sut->getPath(), "LogToJournal"),
12876833cb5SWludzik, Jozef                 Eq(triggerParams.logToJournal()));
12976833cb5SWludzik, Jozef     EXPECT_THAT(getProperty<bool>(sut->getPath(), "LogToRedfish"),
13076833cb5SWludzik, Jozef                 Eq(triggerParams.logToRedfish()));
13176833cb5SWludzik, Jozef     EXPECT_THAT(getProperty<bool>(sut->getPath(), "UpdateReport"),
13276833cb5SWludzik, Jozef                 Eq(triggerParams.updateReport()));
1334416fce6SCezary Zwolak     EXPECT_THAT((getProperty<SensorsInfo>(sut->getPath(), "Sensors")),
1344416fce6SCezary Zwolak                 Eq(utils::fromLabeledSensorsInfo(triggerParams.sensors())));
13576833cb5SWludzik, Jozef     EXPECT_THAT(
13676833cb5SWludzik, Jozef         getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
13776833cb5SWludzik, Jozef         Eq(triggerParams.reportNames()));
13876833cb5SWludzik, Jozef     EXPECT_THAT(
13976833cb5SWludzik, Jozef         getProperty<TriggerThresholdParams>(sut->getPath(), "Thresholds"),
1404416fce6SCezary Zwolak         Eq(std::visit(utils::FromLabeledThresholdParamConversion(),
1414416fce6SCezary Zwolak                       triggerParams.thresholdParams())));
1424416fce6SCezary Zwolak }
1434416fce6SCezary Zwolak 
1444416fce6SCezary Zwolak TEST_F(TestTrigger, checkIfNumericCoversionsAreGood)
1454416fce6SCezary Zwolak {
1464416fce6SCezary Zwolak     const auto& labeledParamsBase =
1474416fce6SCezary Zwolak         std::get<std::vector<numeric::LabeledThresholdParam>>(
1484416fce6SCezary Zwolak             triggerParams.thresholdParams());
1494416fce6SCezary Zwolak     const auto paramsToCheck =
1504416fce6SCezary Zwolak         std::visit(utils::FromLabeledThresholdParamConversion(),
1514416fce6SCezary Zwolak                    triggerParams.thresholdParams());
1524416fce6SCezary Zwolak     const auto labeledParamsToCheck =
1534416fce6SCezary Zwolak         std::get<std::vector<numeric::LabeledThresholdParam>>(std::visit(
1544416fce6SCezary Zwolak             utils::ToLabeledThresholdParamConversion(), paramsToCheck));
1554416fce6SCezary Zwolak 
1564416fce6SCezary Zwolak     for (const auto& [tocheck, base] :
1574416fce6SCezary Zwolak          boost::combine(labeledParamsToCheck, labeledParamsBase))
1584416fce6SCezary Zwolak     {
1594416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::Type>(),
1604416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::Type>()));
1614416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::Direction>(),
1624416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::Direction>()));
1634416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::DwellTime>(),
1644416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::DwellTime>()));
1654416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::ThresholdValue>(),
1664416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::ThresholdValue>()));
1674416fce6SCezary Zwolak     }
1684416fce6SCezary Zwolak }
1694416fce6SCezary Zwolak 
1704416fce6SCezary Zwolak TEST_F(TestTrigger, checkIfDiscreteCoversionsAreGood)
1714416fce6SCezary Zwolak {
1724416fce6SCezary Zwolak     const auto& labeledParamsBase =
1734416fce6SCezary Zwolak         std::get<std::vector<discrete::LabeledThresholdParam>>(
1744416fce6SCezary Zwolak             triggerDiscreteParams.thresholdParams());
1754416fce6SCezary Zwolak     const auto paramsToCheck =
1764416fce6SCezary Zwolak         std::visit(utils::FromLabeledThresholdParamConversion(),
1774416fce6SCezary Zwolak                    triggerDiscreteParams.thresholdParams());
1784416fce6SCezary Zwolak     const auto labeledParamsToCheck =
1794416fce6SCezary Zwolak         std::get<std::vector<discrete::LabeledThresholdParam>>(std::visit(
1804416fce6SCezary Zwolak             utils::ToLabeledThresholdParamConversion(), paramsToCheck));
1814416fce6SCezary Zwolak 
1824416fce6SCezary Zwolak     for (const auto& [tocheck, base] :
1834416fce6SCezary Zwolak          boost::combine(labeledParamsToCheck, labeledParamsBase))
1844416fce6SCezary Zwolak     {
1854416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::UserId>(),
1864416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::UserId>()));
1874416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::Severity>(),
1884416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::Severity>()));
1894416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::DwellTime>(),
1904416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::DwellTime>()));
1914416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::ThresholdValue>(),
1924416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::ThresholdValue>()));
1934416fce6SCezary Zwolak     }
19476833cb5SWludzik, Jozef }
19576833cb5SWludzik, Jozef 
19676833cb5SWludzik, Jozef TEST_F(TestTrigger, deleteTrigger)
19776833cb5SWludzik, Jozef {
198a4e67616SCezary Zwolak     EXPECT_CALL(storageMock, remove(to_file_path(sut->getName())));
19976833cb5SWludzik, Jozef     EXPECT_CALL(*triggerManagerMockPtr, removeTrigger(sut.get()));
20076833cb5SWludzik, Jozef     auto ec = deleteTrigger(sut->getPath());
20176833cb5SWludzik, Jozef     EXPECT_THAT(ec, Eq(boost::system::errc::success));
20276833cb5SWludzik, Jozef }
20376833cb5SWludzik, Jozef 
20476833cb5SWludzik, Jozef TEST_F(TestTrigger, deletingNonExistingTriggerReturnInvalidRequestDescriptor)
20576833cb5SWludzik, Jozef {
20676833cb5SWludzik, Jozef     auto ec = deleteTrigger(Trigger::triggerDir + "NonExisting"s);
20776833cb5SWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(EBADR));
20876833cb5SWludzik, Jozef }
209a4e67616SCezary Zwolak 
2104416fce6SCezary Zwolak TEST_F(TestTrigger, settingPersistencyToFalseRemovesTriggerFromStorage)
211a4e67616SCezary Zwolak {
212a4e67616SCezary Zwolak     EXPECT_CALL(storageMock, remove(to_file_path(sut->getName())));
213a4e67616SCezary Zwolak 
214a4e67616SCezary Zwolak     bool persistent = false;
2154416fce6SCezary Zwolak     EXPECT_THAT(setProperty(sut->getPath(), "Persistent", persistent),
216a4e67616SCezary Zwolak                 Eq(boost::system::errc::success));
217a4e67616SCezary Zwolak     EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"),
218a4e67616SCezary Zwolak                 Eq(persistent));
219a4e67616SCezary Zwolak }
220a4e67616SCezary Zwolak 
221a4e67616SCezary Zwolak class TestTriggerErrors : public TestTrigger
222a4e67616SCezary Zwolak {
223a4e67616SCezary Zwolak   public:
224a4e67616SCezary Zwolak     void SetUp() override
225a4e67616SCezary Zwolak     {}
226a4e67616SCezary Zwolak 
227a4e67616SCezary Zwolak     nlohmann::json storedConfiguration;
228a4e67616SCezary Zwolak };
229a4e67616SCezary Zwolak 
2304416fce6SCezary Zwolak TEST_F(TestTriggerErrors, exceptionDuringTriggerStoreDisablesPersistency)
231a4e67616SCezary Zwolak {
232a4e67616SCezary Zwolak     EXPECT_CALL(storageMock, store(_, _))
233a4e67616SCezary Zwolak         .WillOnce(Throw(std::runtime_error("Generic error!")));
234a4e67616SCezary Zwolak 
235a4e67616SCezary Zwolak     sut = makeTrigger(triggerParams);
236a4e67616SCezary Zwolak 
237a4e67616SCezary Zwolak     EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), Eq(false));
238a4e67616SCezary Zwolak }
239a4e67616SCezary Zwolak 
240a4e67616SCezary Zwolak TEST_F(TestTriggerErrors, creatingTriggerThrowsExceptionWhenNameIsInvalid)
241a4e67616SCezary Zwolak {
242a4e67616SCezary Zwolak     EXPECT_CALL(storageMock, store(_, _)).Times(0);
243a4e67616SCezary Zwolak 
244a4e67616SCezary Zwolak     EXPECT_THROW(makeTrigger(triggerParams.name("inv?lidName")),
245a4e67616SCezary Zwolak                  sdbusplus::exception::SdBusError);
246a4e67616SCezary Zwolak }
247a4e67616SCezary Zwolak 
248a4e67616SCezary Zwolak class TestTriggerStore : public TestTrigger
249a4e67616SCezary Zwolak {
250a4e67616SCezary Zwolak   public:
2514416fce6SCezary Zwolak     nlohmann::json storedConfiguration;
2524416fce6SCezary Zwolak     nlohmann::json storedDiscreteConfiguration;
2534416fce6SCezary Zwolak     std::unique_ptr<Trigger> sutDiscrete;
2544416fce6SCezary Zwolak 
255a4e67616SCezary Zwolak     void SetUp() override
256a4e67616SCezary Zwolak     {
257a4e67616SCezary Zwolak         ON_CALL(storageMock, store(_, _))
258a4e67616SCezary Zwolak             .WillByDefault(SaveArg<1>(&storedConfiguration));
259a4e67616SCezary Zwolak         sut = makeTrigger(triggerParams);
260a4e67616SCezary Zwolak 
2614416fce6SCezary Zwolak         ON_CALL(storageMock, store(_, _))
2624416fce6SCezary Zwolak             .WillByDefault(SaveArg<1>(&storedDiscreteConfiguration));
2634416fce6SCezary Zwolak         sutDiscrete = makeTrigger(triggerDiscreteParams);
2644416fce6SCezary Zwolak     }
265a4e67616SCezary Zwolak };
266a4e67616SCezary Zwolak 
267a4e67616SCezary Zwolak TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerVersion)
268a4e67616SCezary Zwolak {
269a4e67616SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("Version"), Eq(expectedTriggerVersion));
270a4e67616SCezary Zwolak }
271a4e67616SCezary Zwolak 
272a4e67616SCezary Zwolak TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerName)
273a4e67616SCezary Zwolak {
274a4e67616SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("Name"), Eq(triggerParams.name()));
275a4e67616SCezary Zwolak }
276a4e67616SCezary Zwolak 
277a4e67616SCezary Zwolak TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerIsDiscrete)
278a4e67616SCezary Zwolak {
279a4e67616SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("IsDiscrete"),
280a4e67616SCezary Zwolak                 Eq(triggerParams.isDiscrete()));
281a4e67616SCezary Zwolak }
282a4e67616SCezary Zwolak 
283a4e67616SCezary Zwolak TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerLogToJournal)
284a4e67616SCezary Zwolak {
285a4e67616SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("LogToJournal"),
286a4e67616SCezary Zwolak                 Eq(triggerParams.logToRedfish()));
287a4e67616SCezary Zwolak }
288a4e67616SCezary Zwolak 
289a4e67616SCezary Zwolak TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerLogToRedfish)
290a4e67616SCezary Zwolak {
291a4e67616SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("LogToRedfish"),
292a4e67616SCezary Zwolak                 Eq(triggerParams.logToRedfish()));
293a4e67616SCezary Zwolak }
294a4e67616SCezary Zwolak 
295a4e67616SCezary Zwolak TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerUpdateReport)
296a4e67616SCezary Zwolak {
297a4e67616SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("UpdateReport"),
298a4e67616SCezary Zwolak                 Eq(triggerParams.updateReport()));
299a4e67616SCezary Zwolak }
300a4e67616SCezary Zwolak 
301a4e67616SCezary Zwolak TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerReportNames)
302a4e67616SCezary Zwolak {
303a4e67616SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("ReportNames"),
304a4e67616SCezary Zwolak                 Eq(triggerParams.reportNames()));
305a4e67616SCezary Zwolak }
306a4e67616SCezary Zwolak 
307a4e67616SCezary Zwolak TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerSensors)
308a4e67616SCezary Zwolak {
309a4e67616SCezary Zwolak     nlohmann::json expectedItem;
3104416fce6SCezary Zwolak     expectedItem["service"] = "service1";
311a4e67616SCezary Zwolak     expectedItem["sensorPath"] =
312a4e67616SCezary Zwolak         "/xyz/openbmc_project/sensors/temperature/BMC_Temp";
3134416fce6SCezary Zwolak     expectedItem["sensorMetadata"] = "metadata1";
314a4e67616SCezary Zwolak 
315a4e67616SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("Sensors"), ElementsAre(expectedItem));
316a4e67616SCezary Zwolak }
317a4e67616SCezary Zwolak 
318a4e67616SCezary Zwolak TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerThresholdParams)
319a4e67616SCezary Zwolak {
320a4e67616SCezary Zwolak     nlohmann::json expectedItem0;
321a4e67616SCezary Zwolak     expectedItem0["type"] = 0;
322a4e67616SCezary Zwolak     expectedItem0["dwellTime"] = 10;
323a4e67616SCezary Zwolak     expectedItem0["direction"] = 1;
3244416fce6SCezary Zwolak     expectedItem0["thresholdValue"] = 0.5;
325a4e67616SCezary Zwolak 
326a4e67616SCezary Zwolak     nlohmann::json expectedItem1;
327a4e67616SCezary Zwolak     expectedItem1["type"] = 3;
328a4e67616SCezary Zwolak     expectedItem1["dwellTime"] = 10;
329a4e67616SCezary Zwolak     expectedItem1["direction"] = 2;
3304416fce6SCezary Zwolak     expectedItem1["thresholdValue"] = 90.2;
331a4e67616SCezary Zwolak 
3324416fce6SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("ThresholdParamsDiscriminator"), Eq(0));
333a4e67616SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("ThresholdParams"),
334a4e67616SCezary Zwolak                 ElementsAre(expectedItem0, expectedItem1));
335a4e67616SCezary Zwolak }
3364416fce6SCezary Zwolak 
3374416fce6SCezary Zwolak TEST_F(TestTriggerStore,
3384416fce6SCezary Zwolak        settingPersistencyToTrueStoresDiscreteTriggerThresholdParams)
3394416fce6SCezary Zwolak {
3404416fce6SCezary Zwolak     nlohmann::json expectedItem0;
3414416fce6SCezary Zwolak     expectedItem0["userId"] = "userId";
3424416fce6SCezary Zwolak     expectedItem0["severity"] = discrete::Severity::warning;
3434416fce6SCezary Zwolak     expectedItem0["dwellTime"] = 10;
344*9f346790SSzymon Dompke     expectedItem0["thresholdValue"] = "15.2";
3454416fce6SCezary Zwolak 
3464416fce6SCezary Zwolak     nlohmann::json expectedItem1;
3474416fce6SCezary Zwolak     expectedItem1["userId"] = "userId_2";
3484416fce6SCezary Zwolak     expectedItem1["severity"] = discrete::Severity::critical;
3494416fce6SCezary Zwolak     expectedItem1["dwellTime"] = 5;
350*9f346790SSzymon Dompke     expectedItem1["thresholdValue"] = "32.7";
3514416fce6SCezary Zwolak 
3524416fce6SCezary Zwolak     ASSERT_THAT(storedDiscreteConfiguration.at("ThresholdParamsDiscriminator"),
3534416fce6SCezary Zwolak                 Eq(1));
3544416fce6SCezary Zwolak     ASSERT_THAT(storedDiscreteConfiguration.at("ThresholdParams"),
3554416fce6SCezary Zwolak                 ElementsAre(expectedItem0, expectedItem1));
3564416fce6SCezary Zwolak }
357