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