176833cb5SWludzik, Jozef #include "dbus_environment.hpp" 276833cb5SWludzik, Jozef #include "helpers.hpp" 376833cb5SWludzik, Jozef #include "mocks/trigger_manager_mock.hpp" 476833cb5SWludzik, Jozef #include "params/trigger_params.hpp" 576833cb5SWludzik, Jozef #include "trigger.hpp" 676833cb5SWludzik, Jozef #include "utils/set_exception.hpp" 776833cb5SWludzik, Jozef 876833cb5SWludzik, Jozef using namespace testing; 976833cb5SWludzik, Jozef using namespace std::literals::string_literals; 1076833cb5SWludzik, Jozef 1176833cb5SWludzik, Jozef class TestTrigger : public Test 1276833cb5SWludzik, Jozef { 1376833cb5SWludzik, Jozef public: 1476833cb5SWludzik, Jozef TriggerParams triggerParams; 1576833cb5SWludzik, Jozef 1676833cb5SWludzik, Jozef std::unique_ptr<TriggerManagerMock> triggerManagerMockPtr = 1776833cb5SWludzik, Jozef std::make_unique<NiceMock<TriggerManagerMock>>(); 1876833cb5SWludzik, Jozef std::unique_ptr<Trigger> sut; 1976833cb5SWludzik, Jozef 2076833cb5SWludzik, Jozef void SetUp() override 2176833cb5SWludzik, Jozef { 2276833cb5SWludzik, Jozef sut = std::make_unique<Trigger>( 2376833cb5SWludzik, Jozef DbusEnvironment::getIoc(), DbusEnvironment::getObjServer(), 2476833cb5SWludzik, Jozef triggerParams.name(), triggerParams.isDiscrete(), 2576833cb5SWludzik, Jozef triggerParams.logToJournal(), triggerParams.logToRedfish(), 2676833cb5SWludzik, Jozef triggerParams.updateReport(), triggerParams.sensors(), 27*1477fe6aSWludzik, Jozef triggerParams.reportNames(), triggerParams.thresholdParams(), 28*1477fe6aSWludzik, Jozef std::vector<std::shared_ptr<interfaces::Threshold>>{}, 2976833cb5SWludzik, Jozef *triggerManagerMockPtr); 3076833cb5SWludzik, Jozef } 3176833cb5SWludzik, Jozef 3276833cb5SWludzik, Jozef template <class T> 3376833cb5SWludzik, Jozef static T getProperty(const std::string& path, const std::string& property) 3476833cb5SWludzik, Jozef { 3576833cb5SWludzik, Jozef std::promise<T> propertyPromise; 3676833cb5SWludzik, Jozef sdbusplus::asio::getProperty<T>( 3776833cb5SWludzik, Jozef *DbusEnvironment::getBus(), DbusEnvironment::serviceName(), path, 3876833cb5SWludzik, Jozef Trigger::triggerIfaceName, property, 3976833cb5SWludzik, Jozef [&propertyPromise](boost::system::error_code) { 4076833cb5SWludzik, Jozef utils::setException(propertyPromise, "GetProperty failed"); 4176833cb5SWludzik, Jozef }, 4276833cb5SWludzik, Jozef [&propertyPromise](T t) { propertyPromise.set_value(t); }); 4376833cb5SWludzik, Jozef return DbusEnvironment::waitForFuture(propertyPromise.get_future()); 4476833cb5SWludzik, Jozef } 4576833cb5SWludzik, Jozef 4676833cb5SWludzik, Jozef boost::system::error_code deleteTrigger(const std::string& path) 4776833cb5SWludzik, Jozef { 4876833cb5SWludzik, Jozef std::promise<boost::system::error_code> methodPromise; 4976833cb5SWludzik, Jozef DbusEnvironment::getBus()->async_method_call( 5076833cb5SWludzik, Jozef [&methodPromise](boost::system::error_code ec) { 5176833cb5SWludzik, Jozef methodPromise.set_value(ec); 5276833cb5SWludzik, Jozef }, 5376833cb5SWludzik, Jozef DbusEnvironment::serviceName(), path, Trigger::deleteIfaceName, 5476833cb5SWludzik, Jozef "Delete"); 5576833cb5SWludzik, Jozef return DbusEnvironment::waitForFuture(methodPromise.get_future()); 5676833cb5SWludzik, Jozef } 5776833cb5SWludzik, Jozef }; 5876833cb5SWludzik, Jozef 5976833cb5SWludzik, Jozef TEST_F(TestTrigger, checkIfPropertiesAreSet) 6076833cb5SWludzik, Jozef { 6176833cb5SWludzik, Jozef EXPECT_THAT(getProperty<bool>(sut->getPath(), "Discrete"), 6276833cb5SWludzik, Jozef Eq(triggerParams.isDiscrete())); 6376833cb5SWludzik, Jozef EXPECT_THAT(getProperty<bool>(sut->getPath(), "LogToJournal"), 6476833cb5SWludzik, Jozef Eq(triggerParams.logToJournal())); 6576833cb5SWludzik, Jozef EXPECT_THAT(getProperty<bool>(sut->getPath(), "LogToRedfish"), 6676833cb5SWludzik, Jozef Eq(triggerParams.logToRedfish())); 6776833cb5SWludzik, Jozef EXPECT_THAT(getProperty<bool>(sut->getPath(), "UpdateReport"), 6876833cb5SWludzik, Jozef Eq(triggerParams.updateReport())); 6976833cb5SWludzik, Jozef EXPECT_THAT((getProperty<std::vector< 7076833cb5SWludzik, Jozef std::pair<sdbusplus::message::object_path, std::string>>>( 7176833cb5SWludzik, Jozef sut->getPath(), "Sensors")), 7276833cb5SWludzik, Jozef Eq(triggerParams.sensors())); 7376833cb5SWludzik, Jozef EXPECT_THAT( 7476833cb5SWludzik, Jozef getProperty<std::vector<std::string>>(sut->getPath(), "ReportNames"), 7576833cb5SWludzik, Jozef Eq(triggerParams.reportNames())); 7676833cb5SWludzik, Jozef EXPECT_THAT( 7776833cb5SWludzik, Jozef getProperty<TriggerThresholdParams>(sut->getPath(), "Thresholds"), 78*1477fe6aSWludzik, Jozef Eq(triggerParams.thresholdParams())); 7976833cb5SWludzik, Jozef } 8076833cb5SWludzik, Jozef 8176833cb5SWludzik, Jozef TEST_F(TestTrigger, deleteTrigger) 8276833cb5SWludzik, Jozef { 8376833cb5SWludzik, Jozef EXPECT_CALL(*triggerManagerMockPtr, removeTrigger(sut.get())); 8476833cb5SWludzik, Jozef auto ec = deleteTrigger(sut->getPath()); 8576833cb5SWludzik, Jozef EXPECT_THAT(ec, Eq(boost::system::errc::success)); 8676833cb5SWludzik, Jozef } 8776833cb5SWludzik, Jozef 8876833cb5SWludzik, Jozef TEST_F(TestTrigger, deletingNonExistingTriggerReturnInvalidRequestDescriptor) 8976833cb5SWludzik, Jozef { 9076833cb5SWludzik, Jozef auto ec = deleteTrigger(Trigger::triggerDir + "NonExisting"s); 9176833cb5SWludzik, Jozef EXPECT_THAT(ec.value(), Eq(EBADR)); 9276833cb5SWludzik, Jozef } 93