176833cb5SWludzik, Jozef #include "dbus_environment.hpp"
276833cb5SWludzik, Jozef #include "helpers.hpp"
3a4e67616SCezary Zwolak #include "mocks/json_storage_mock.hpp"
4*94f71c51SSzymon Dompke #include "mocks/sensor_mock.hpp"
5*94f71c51SSzymon Dompke #include "mocks/threshold_mock.hpp"
6*94f71c51SSzymon Dompke #include "mocks/trigger_factory_mock.hpp"
776833cb5SWludzik, Jozef #include "mocks/trigger_manager_mock.hpp"
876833cb5SWludzik, Jozef #include "params/trigger_params.hpp"
976833cb5SWludzik, Jozef #include "trigger.hpp"
10e28aa53dSSzymon Dompke #include "trigger_manager.hpp"
114416fce6SCezary Zwolak #include "utils/conversion_trigger.hpp"
124416fce6SCezary Zwolak #include "utils/transform.hpp"
134416fce6SCezary Zwolak #include "utils/tstring.hpp"
144416fce6SCezary Zwolak 
154416fce6SCezary Zwolak #include <boost/range/combine.hpp>
1676833cb5SWludzik, Jozef 
1776833cb5SWludzik, Jozef using namespace testing;
1876833cb5SWludzik, Jozef using namespace std::literals::string_literals;
1976833cb5SWludzik, Jozef 
20*94f71c51SSzymon Dompke static constexpr size_t expectedTriggerVersion = 1;
21a4e67616SCezary Zwolak 
2276833cb5SWludzik, Jozef class TestTrigger : public Test
2376833cb5SWludzik, Jozef {
2476833cb5SWludzik, Jozef   public:
2576833cb5SWludzik, Jozef     TriggerParams triggerParams;
264416fce6SCezary Zwolak     TriggerParams triggerDiscreteParams =
274416fce6SCezary Zwolak         TriggerParams()
28e28aa53dSSzymon Dompke             .id("DiscreteTrigger")
29e28aa53dSSzymon Dompke             .name("My Discrete Trigger")
304416fce6SCezary Zwolak             .thresholdParams(std::vector<discrete::LabeledThresholdParam>{
314416fce6SCezary Zwolak                 discrete::LabeledThresholdParam{
324416fce6SCezary Zwolak                     "userId", discrete::Severity::warning,
33dcc4e193SKrzysztof Grobelny                     Milliseconds(10).count(), "15.2"},
344416fce6SCezary Zwolak                 discrete::LabeledThresholdParam{
354416fce6SCezary Zwolak                     "userId_2", discrete::Severity::critical,
36dcc4e193SKrzysztof Grobelny                     Milliseconds(5).count(), "32.7"},
374416fce6SCezary Zwolak             });
3876833cb5SWludzik, Jozef 
3976833cb5SWludzik, Jozef     std::unique_ptr<TriggerManagerMock> triggerManagerMockPtr =
4076833cb5SWludzik, Jozef         std::make_unique<NiceMock<TriggerManagerMock>>();
41*94f71c51SSzymon Dompke     std::unique_ptr<TriggerFactoryMock> triggerFactoryMockPtr =
42*94f71c51SSzymon Dompke         std::make_unique<NiceMock<TriggerFactoryMock>>();
43a4e67616SCezary Zwolak     testing::NiceMock<StorageMock> storageMock;
44*94f71c51SSzymon Dompke     std::vector<std::shared_ptr<interfaces::Threshold>> thresholdMocks;
4576833cb5SWludzik, Jozef     std::unique_ptr<Trigger> sut;
4676833cb5SWludzik, Jozef 
4776833cb5SWludzik, Jozef     void SetUp() override
4876833cb5SWludzik, Jozef     {
49a4e67616SCezary Zwolak         sut = makeTrigger(triggerParams);
50a4e67616SCezary Zwolak     }
51a4e67616SCezary Zwolak 
524416fce6SCezary Zwolak     static std::vector<LabeledSensorInfo>
534416fce6SCezary Zwolak         convertToLabeledSensor(const SensorsInfo& sensorsInfo)
544416fce6SCezary Zwolak     {
554416fce6SCezary Zwolak         return utils::transform(sensorsInfo, [](const auto& sensorInfo) {
564416fce6SCezary Zwolak             const auto& [sensorPath, sensorMetadata] = sensorInfo;
574416fce6SCezary Zwolak             return LabeledSensorInfo("service1", sensorPath, sensorMetadata);
584416fce6SCezary Zwolak         });
594416fce6SCezary Zwolak     }
604416fce6SCezary Zwolak 
61a4e67616SCezary Zwolak     std::unique_ptr<Trigger> makeTrigger(const TriggerParams& params)
62a4e67616SCezary Zwolak     {
63*94f71c51SSzymon Dompke         thresholdMocks =
64*94f71c51SSzymon Dompke             ThresholdMock::makeThresholds(params.thresholdParams());
65*94f71c51SSzymon Dompke 
66a4e67616SCezary Zwolak         return std::make_unique<Trigger>(
6776833cb5SWludzik, Jozef             DbusEnvironment::getIoc(), DbusEnvironment::getObjServer(),
68e28aa53dSSzymon Dompke             params.id(), params.name(), params.triggerActions(),
69*94f71c51SSzymon Dompke             std::make_shared<std::vector<std::string>>(
70*94f71c51SSzymon Dompke                 params.reportIds().begin(), params.reportIds().end()),
71*94f71c51SSzymon Dompke             std::vector<std::shared_ptr<interfaces::Threshold>>(thresholdMocks),
72*94f71c51SSzymon Dompke             *triggerManagerMockPtr, storageMock, *triggerFactoryMockPtr,
73*94f71c51SSzymon Dompke             SensorMock::makeSensorMocks(params.sensors()));
74a4e67616SCezary Zwolak     }
75a4e67616SCezary Zwolak 
76a4e67616SCezary Zwolak     static interfaces::JsonStorage::FilePath to_file_path(std::string name)
77a4e67616SCezary Zwolak     {
78a4e67616SCezary Zwolak         return interfaces::JsonStorage::FilePath(
79a4e67616SCezary Zwolak             std::to_string(std::hash<std::string>{}(name)));
8076833cb5SWludzik, Jozef     }
8176833cb5SWludzik, Jozef 
8276833cb5SWludzik, Jozef     template <class T>
8376833cb5SWludzik, Jozef     static T getProperty(const std::string& path, const std::string& property)
8476833cb5SWludzik, Jozef     {
85e28aa53dSSzymon Dompke         return DbusEnvironment::getProperty<T>(path, Trigger::triggerIfaceName,
86e28aa53dSSzymon Dompke                                                property);
8776833cb5SWludzik, Jozef     }
8876833cb5SWludzik, Jozef 
89a4e67616SCezary Zwolak     template <class T>
90a4e67616SCezary Zwolak     static boost::system::error_code setProperty(const std::string& path,
91a4e67616SCezary Zwolak                                                  const std::string& property,
92a4e67616SCezary Zwolak                                                  const T& newValue)
93a4e67616SCezary Zwolak     {
94e28aa53dSSzymon Dompke         return DbusEnvironment::setProperty<T>(path, Trigger::triggerIfaceName,
95e28aa53dSSzymon Dompke                                                property, newValue);
96a4e67616SCezary Zwolak     }
97a4e67616SCezary Zwolak 
9876833cb5SWludzik, Jozef     boost::system::error_code deleteTrigger(const std::string& path)
9976833cb5SWludzik, Jozef     {
10076833cb5SWludzik, Jozef         std::promise<boost::system::error_code> methodPromise;
10176833cb5SWludzik, Jozef         DbusEnvironment::getBus()->async_method_call(
10276833cb5SWludzik, Jozef             [&methodPromise](boost::system::error_code ec) {
10376833cb5SWludzik, Jozef                 methodPromise.set_value(ec);
10476833cb5SWludzik, Jozef             },
10576833cb5SWludzik, Jozef             DbusEnvironment::serviceName(), path, Trigger::deleteIfaceName,
10676833cb5SWludzik, Jozef             "Delete");
10776833cb5SWludzik, Jozef         return DbusEnvironment::waitForFuture(methodPromise.get_future());
10876833cb5SWludzik, Jozef     }
10976833cb5SWludzik, Jozef };
11076833cb5SWludzik, Jozef 
11176833cb5SWludzik, Jozef TEST_F(TestTrigger, checkIfPropertiesAreSet)
11276833cb5SWludzik, Jozef {
113e28aa53dSSzymon Dompke     EXPECT_THAT(getProperty<std::string>(sut->getPath(), "Name"),
114e28aa53dSSzymon Dompke                 Eq(triggerParams.name()));
115a4e67616SCezary Zwolak     EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), Eq(true));
1162001301aSSzymon Dompke     EXPECT_THAT(
1172001301aSSzymon Dompke         getProperty<std::vector<std::string>>(sut->getPath(), "TriggerActions"),
118*94f71c51SSzymon Dompke         Eq(utils::transform(
119*94f71c51SSzymon Dompke             triggerParams.triggerActions(),
120*94f71c51SSzymon Dompke             [](const auto& action) { return actionToString(action); })));
1214416fce6SCezary Zwolak     EXPECT_THAT((getProperty<SensorsInfo>(sut->getPath(), "Sensors")),
1224416fce6SCezary Zwolak                 Eq(utils::fromLabeledSensorsInfo(triggerParams.sensors())));
12376833cb5SWludzik, Jozef     EXPECT_THAT(
12476833cb5SWludzik, Jozef         getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
125b8cc78ddSKrzysztof Grobelny         Eq(triggerParams.reportIds()));
12676833cb5SWludzik, Jozef     EXPECT_THAT(
127*94f71c51SSzymon Dompke         getProperty<bool>(sut->getPath(), "Discrete"),
128*94f71c51SSzymon Dompke         Eq(isTriggerThresholdDiscrete(triggerParams.thresholdParams())));
129*94f71c51SSzymon Dompke     EXPECT_THAT(
13076833cb5SWludzik, Jozef         getProperty<TriggerThresholdParams>(sut->getPath(), "Thresholds"),
1314416fce6SCezary Zwolak         Eq(std::visit(utils::FromLabeledThresholdParamConversion(),
1324416fce6SCezary Zwolak                       triggerParams.thresholdParams())));
1334416fce6SCezary Zwolak }
1344416fce6SCezary Zwolak 
135e28aa53dSSzymon Dompke TEST_F(TestTrigger, setPropertyNameToCorrectValue)
136e28aa53dSSzymon Dompke {
137e28aa53dSSzymon Dompke     std::string name = "custom name 1234 %^#5";
138e28aa53dSSzymon Dompke     EXPECT_THAT(setProperty(sut->getPath(), "Name", name),
139e28aa53dSSzymon Dompke                 Eq(boost::system::errc::success));
140e28aa53dSSzymon Dompke     EXPECT_THAT(getProperty<std::string>(sut->getPath(), "Name"), Eq(name));
141e28aa53dSSzymon Dompke }
142e28aa53dSSzymon Dompke 
143*94f71c51SSzymon Dompke TEST_F(TestTrigger, setPropertyReportNames)
144*94f71c51SSzymon Dompke {
145*94f71c51SSzymon Dompke     std::vector<std::string> newNames = {"abc", "one", "two"};
146*94f71c51SSzymon Dompke     EXPECT_THAT(setProperty(sut->getPath(), "ReportNames", newNames),
147*94f71c51SSzymon Dompke                 Eq(boost::system::errc::success));
148*94f71c51SSzymon Dompke     EXPECT_THAT(
149*94f71c51SSzymon Dompke         getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"),
150*94f71c51SSzymon Dompke         Eq(newNames));
151*94f71c51SSzymon Dompke }
152*94f71c51SSzymon Dompke 
153*94f71c51SSzymon Dompke TEST_F(TestTrigger, setPropertySensors)
154*94f71c51SSzymon Dompke {
155*94f71c51SSzymon Dompke     EXPECT_CALL(*triggerFactoryMockPtr, updateSensors(_, _));
156*94f71c51SSzymon Dompke     for (const auto& threshold : thresholdMocks)
157*94f71c51SSzymon Dompke     {
158*94f71c51SSzymon Dompke         auto thresholdMockPtr =
159*94f71c51SSzymon Dompke             std::dynamic_pointer_cast<NiceMock<ThresholdMock>>(threshold);
160*94f71c51SSzymon Dompke         EXPECT_CALL(*thresholdMockPtr, updateSensors(_));
161*94f71c51SSzymon Dompke     }
162*94f71c51SSzymon Dompke     SensorsInfo newSensors({std::make_pair(
163*94f71c51SSzymon Dompke         sdbusplus::message::object_path("/abc/def"), "metadata")});
164*94f71c51SSzymon Dompke     EXPECT_THAT(setProperty(sut->getPath(), "Sensors", newSensors),
165*94f71c51SSzymon Dompke                 Eq(boost::system::errc::success));
166*94f71c51SSzymon Dompke }
167*94f71c51SSzymon Dompke 
168*94f71c51SSzymon Dompke TEST_F(TestTrigger, setPropertyThresholds)
169*94f71c51SSzymon Dompke {
170*94f71c51SSzymon Dompke     EXPECT_CALL(*triggerFactoryMockPtr, updateThresholds(_, _, _, _, _));
171*94f71c51SSzymon Dompke     TriggerThresholdParams newThresholds =
172*94f71c51SSzymon Dompke         std::vector<discrete::ThresholdParam>(
173*94f71c51SSzymon Dompke             {std::make_tuple("discrete threshold", "OK", 10, "12.3")});
174*94f71c51SSzymon Dompke     EXPECT_THAT(setProperty(sut->getPath(), "Thresholds", newThresholds),
175*94f71c51SSzymon Dompke                 Eq(boost::system::errc::success));
176*94f71c51SSzymon Dompke }
177*94f71c51SSzymon Dompke 
1784416fce6SCezary Zwolak TEST_F(TestTrigger, checkIfNumericCoversionsAreGood)
1794416fce6SCezary Zwolak {
1804416fce6SCezary Zwolak     const auto& labeledParamsBase =
1814416fce6SCezary Zwolak         std::get<std::vector<numeric::LabeledThresholdParam>>(
1824416fce6SCezary Zwolak             triggerParams.thresholdParams());
1834416fce6SCezary Zwolak     const auto paramsToCheck =
1844416fce6SCezary Zwolak         std::visit(utils::FromLabeledThresholdParamConversion(),
1854416fce6SCezary Zwolak                    triggerParams.thresholdParams());
1864416fce6SCezary Zwolak     const auto labeledParamsToCheck =
1874416fce6SCezary Zwolak         std::get<std::vector<numeric::LabeledThresholdParam>>(std::visit(
1884416fce6SCezary Zwolak             utils::ToLabeledThresholdParamConversion(), paramsToCheck));
1894416fce6SCezary Zwolak 
1904416fce6SCezary Zwolak     for (const auto& [tocheck, base] :
1914416fce6SCezary Zwolak          boost::combine(labeledParamsToCheck, labeledParamsBase))
1924416fce6SCezary Zwolak     {
1934416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::Type>(),
1944416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::Type>()));
1954416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::Direction>(),
1964416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::Direction>()));
1974416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::DwellTime>(),
1984416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::DwellTime>()));
1994416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::ThresholdValue>(),
2004416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::ThresholdValue>()));
2014416fce6SCezary Zwolak     }
2024416fce6SCezary Zwolak }
2034416fce6SCezary Zwolak 
2044416fce6SCezary Zwolak TEST_F(TestTrigger, checkIfDiscreteCoversionsAreGood)
2054416fce6SCezary Zwolak {
2064416fce6SCezary Zwolak     const auto& labeledParamsBase =
2074416fce6SCezary Zwolak         std::get<std::vector<discrete::LabeledThresholdParam>>(
2084416fce6SCezary Zwolak             triggerDiscreteParams.thresholdParams());
2094416fce6SCezary Zwolak     const auto paramsToCheck =
2104416fce6SCezary Zwolak         std::visit(utils::FromLabeledThresholdParamConversion(),
2114416fce6SCezary Zwolak                    triggerDiscreteParams.thresholdParams());
2124416fce6SCezary Zwolak     const auto labeledParamsToCheck =
2134416fce6SCezary Zwolak         std::get<std::vector<discrete::LabeledThresholdParam>>(std::visit(
2144416fce6SCezary Zwolak             utils::ToLabeledThresholdParamConversion(), paramsToCheck));
2154416fce6SCezary Zwolak 
2164416fce6SCezary Zwolak     for (const auto& [tocheck, base] :
2174416fce6SCezary Zwolak          boost::combine(labeledParamsToCheck, labeledParamsBase))
2184416fce6SCezary Zwolak     {
2194416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::UserId>(),
2204416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::UserId>()));
2214416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::Severity>(),
2224416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::Severity>()));
2234416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::DwellTime>(),
2244416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::DwellTime>()));
2254416fce6SCezary Zwolak         EXPECT_THAT(tocheck.at_label<utils::tstring::ThresholdValue>(),
2264416fce6SCezary Zwolak                     Eq(base.at_label<utils::tstring::ThresholdValue>()));
2274416fce6SCezary Zwolak     }
22876833cb5SWludzik, Jozef }
22976833cb5SWludzik, Jozef 
23076833cb5SWludzik, Jozef TEST_F(TestTrigger, deleteTrigger)
23176833cb5SWludzik, Jozef {
232e28aa53dSSzymon Dompke     EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
23376833cb5SWludzik, Jozef     EXPECT_CALL(*triggerManagerMockPtr, removeTrigger(sut.get()));
23476833cb5SWludzik, Jozef     auto ec = deleteTrigger(sut->getPath());
23576833cb5SWludzik, Jozef     EXPECT_THAT(ec, Eq(boost::system::errc::success));
23676833cb5SWludzik, Jozef }
23776833cb5SWludzik, Jozef 
23876833cb5SWludzik, Jozef TEST_F(TestTrigger, deletingNonExistingTriggerReturnInvalidRequestDescriptor)
23976833cb5SWludzik, Jozef {
24076833cb5SWludzik, Jozef     auto ec = deleteTrigger(Trigger::triggerDir + "NonExisting"s);
24176833cb5SWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(EBADR));
24276833cb5SWludzik, Jozef }
243a4e67616SCezary Zwolak 
2444416fce6SCezary Zwolak TEST_F(TestTrigger, settingPersistencyToFalseRemovesTriggerFromStorage)
245a4e67616SCezary Zwolak {
246e28aa53dSSzymon Dompke     EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
247a4e67616SCezary Zwolak 
248a4e67616SCezary Zwolak     bool persistent = false;
2494416fce6SCezary Zwolak     EXPECT_THAT(setProperty(sut->getPath(), "Persistent", persistent),
250a4e67616SCezary Zwolak                 Eq(boost::system::errc::success));
251a4e67616SCezary Zwolak     EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"),
252a4e67616SCezary Zwolak                 Eq(persistent));
253a4e67616SCezary Zwolak }
254a4e67616SCezary Zwolak 
255a4e67616SCezary Zwolak class TestTriggerErrors : public TestTrigger
256a4e67616SCezary Zwolak {
257a4e67616SCezary Zwolak   public:
258a4e67616SCezary Zwolak     void SetUp() override
259a4e67616SCezary Zwolak     {}
260a4e67616SCezary Zwolak 
261a4e67616SCezary Zwolak     nlohmann::json storedConfiguration;
262a4e67616SCezary Zwolak };
263a4e67616SCezary Zwolak 
2644416fce6SCezary Zwolak TEST_F(TestTriggerErrors, exceptionDuringTriggerStoreDisablesPersistency)
265a4e67616SCezary Zwolak {
266a4e67616SCezary Zwolak     EXPECT_CALL(storageMock, store(_, _))
267a4e67616SCezary Zwolak         .WillOnce(Throw(std::runtime_error("Generic error!")));
268a4e67616SCezary Zwolak 
269a4e67616SCezary Zwolak     sut = makeTrigger(triggerParams);
270a4e67616SCezary Zwolak 
271a4e67616SCezary Zwolak     EXPECT_THAT(getProperty<bool>(sut->getPath(), "Persistent"), Eq(false));
272a4e67616SCezary Zwolak }
273a4e67616SCezary Zwolak 
274e28aa53dSSzymon Dompke TEST_F(TestTriggerErrors, creatingTriggerThrowsExceptionWhenIdIsInvalid)
275a4e67616SCezary Zwolak {
276a4e67616SCezary Zwolak     EXPECT_CALL(storageMock, store(_, _)).Times(0);
277a4e67616SCezary Zwolak 
278e28aa53dSSzymon Dompke     EXPECT_THROW(makeTrigger(triggerParams.id("inv?lidId")),
279a4e67616SCezary Zwolak                  sdbusplus::exception::SdBusError);
280a4e67616SCezary Zwolak }
281a4e67616SCezary Zwolak 
282a4e67616SCezary Zwolak class TestTriggerStore : public TestTrigger
283a4e67616SCezary Zwolak {
284a4e67616SCezary Zwolak   public:
2854416fce6SCezary Zwolak     nlohmann::json storedConfiguration;
2864416fce6SCezary Zwolak     nlohmann::json storedDiscreteConfiguration;
2874416fce6SCezary Zwolak     std::unique_ptr<Trigger> sutDiscrete;
2884416fce6SCezary Zwolak 
289a4e67616SCezary Zwolak     void SetUp() override
290a4e67616SCezary Zwolak     {
291a4e67616SCezary Zwolak         ON_CALL(storageMock, store(_, _))
292a4e67616SCezary Zwolak             .WillByDefault(SaveArg<1>(&storedConfiguration));
293a4e67616SCezary Zwolak         sut = makeTrigger(triggerParams);
294a4e67616SCezary Zwolak 
2954416fce6SCezary Zwolak         ON_CALL(storageMock, store(_, _))
2964416fce6SCezary Zwolak             .WillByDefault(SaveArg<1>(&storedDiscreteConfiguration));
2974416fce6SCezary Zwolak         sutDiscrete = makeTrigger(triggerDiscreteParams);
2984416fce6SCezary Zwolak     }
299a4e67616SCezary Zwolak };
300a4e67616SCezary Zwolak 
301a4e67616SCezary Zwolak TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerVersion)
302a4e67616SCezary Zwolak {
303a4e67616SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("Version"), Eq(expectedTriggerVersion));
304a4e67616SCezary Zwolak }
305a4e67616SCezary Zwolak 
306e28aa53dSSzymon Dompke TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerId)
307e28aa53dSSzymon Dompke {
308e28aa53dSSzymon Dompke     ASSERT_THAT(storedConfiguration.at("Id"), Eq(triggerParams.id()));
309e28aa53dSSzymon Dompke }
310e28aa53dSSzymon Dompke 
311a4e67616SCezary Zwolak TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerName)
312a4e67616SCezary Zwolak {
313a4e67616SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("Name"), Eq(triggerParams.name()));
314a4e67616SCezary Zwolak }
315a4e67616SCezary Zwolak 
3162001301aSSzymon Dompke TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerTriggerActions)
317a4e67616SCezary Zwolak {
3182001301aSSzymon Dompke     ASSERT_THAT(storedConfiguration.at("TriggerActions"),
319*94f71c51SSzymon Dompke                 Eq(utils::transform(triggerParams.triggerActions(),
320*94f71c51SSzymon Dompke                                     [](const auto& action) {
321*94f71c51SSzymon Dompke                                         return actionToString(action);
322*94f71c51SSzymon Dompke                                     })));
323a4e67616SCezary Zwolak }
324a4e67616SCezary Zwolak 
325b8cc78ddSKrzysztof Grobelny TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerReportIds)
326a4e67616SCezary Zwolak {
327b8cc78ddSKrzysztof Grobelny     ASSERT_THAT(storedConfiguration.at("ReportIds"),
328b8cc78ddSKrzysztof Grobelny                 Eq(triggerParams.reportIds()));
329a4e67616SCezary Zwolak }
330a4e67616SCezary Zwolak 
331a4e67616SCezary Zwolak TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerSensors)
332a4e67616SCezary Zwolak {
333a4e67616SCezary Zwolak     nlohmann::json expectedItem;
3344416fce6SCezary Zwolak     expectedItem["service"] = "service1";
335*94f71c51SSzymon Dompke     expectedItem["path"] = "/xyz/openbmc_project/sensors/temperature/BMC_Temp";
336b8cc78ddSKrzysztof Grobelny     expectedItem["metadata"] = "metadata1";
337a4e67616SCezary Zwolak 
338a4e67616SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("Sensors"), ElementsAre(expectedItem));
339a4e67616SCezary Zwolak }
340a4e67616SCezary Zwolak 
341a4e67616SCezary Zwolak TEST_F(TestTriggerStore, settingPersistencyToTrueStoresTriggerThresholdParams)
342a4e67616SCezary Zwolak {
343a4e67616SCezary Zwolak     nlohmann::json expectedItem0;
344a4e67616SCezary Zwolak     expectedItem0["type"] = 0;
345a4e67616SCezary Zwolak     expectedItem0["dwellTime"] = 10;
346a4e67616SCezary Zwolak     expectedItem0["direction"] = 1;
3474416fce6SCezary Zwolak     expectedItem0["thresholdValue"] = 0.5;
348a4e67616SCezary Zwolak 
349a4e67616SCezary Zwolak     nlohmann::json expectedItem1;
350a4e67616SCezary Zwolak     expectedItem1["type"] = 3;
351a4e67616SCezary Zwolak     expectedItem1["dwellTime"] = 10;
352a4e67616SCezary Zwolak     expectedItem1["direction"] = 2;
3534416fce6SCezary Zwolak     expectedItem1["thresholdValue"] = 90.2;
354a4e67616SCezary Zwolak 
3554416fce6SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("ThresholdParamsDiscriminator"), Eq(0));
356a4e67616SCezary Zwolak     ASSERT_THAT(storedConfiguration.at("ThresholdParams"),
357a4e67616SCezary Zwolak                 ElementsAre(expectedItem0, expectedItem1));
358a4e67616SCezary Zwolak }
3594416fce6SCezary Zwolak 
3604416fce6SCezary Zwolak TEST_F(TestTriggerStore,
3614416fce6SCezary Zwolak        settingPersistencyToTrueStoresDiscreteTriggerThresholdParams)
3624416fce6SCezary Zwolak {
3634416fce6SCezary Zwolak     nlohmann::json expectedItem0;
3644416fce6SCezary Zwolak     expectedItem0["userId"] = "userId";
3654416fce6SCezary Zwolak     expectedItem0["severity"] = discrete::Severity::warning;
3664416fce6SCezary Zwolak     expectedItem0["dwellTime"] = 10;
3679f346790SSzymon Dompke     expectedItem0["thresholdValue"] = "15.2";
3684416fce6SCezary Zwolak 
3694416fce6SCezary Zwolak     nlohmann::json expectedItem1;
3704416fce6SCezary Zwolak     expectedItem1["userId"] = "userId_2";
3714416fce6SCezary Zwolak     expectedItem1["severity"] = discrete::Severity::critical;
3724416fce6SCezary Zwolak     expectedItem1["dwellTime"] = 5;
3739f346790SSzymon Dompke     expectedItem1["thresholdValue"] = "32.7";
3744416fce6SCezary Zwolak 
3754416fce6SCezary Zwolak     ASSERT_THAT(storedDiscreteConfiguration.at("ThresholdParamsDiscriminator"),
3764416fce6SCezary Zwolak                 Eq(1));
3774416fce6SCezary Zwolak     ASSERT_THAT(storedDiscreteConfiguration.at("ThresholdParams"),
3784416fce6SCezary Zwolak                 ElementsAre(expectedItem0, expectedItem1));
3794416fce6SCezary Zwolak }
380