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