xref: /openbmc/telemetry/tests/src/mocks/trigger_factory_mock.hpp (revision 4416fce6fb6539b4e2a6a94a8248934c2eb29820)
1 #pragma once
2 
3 #include "interfaces/trigger_factory.hpp"
4 #include "mocks/trigger_mock.hpp"
5 #include "params/trigger_params.hpp"
6 #include "trigger.hpp"
7 #include "utils/conversion_trigger.hpp"
8 
9 #include <gmock/gmock.h>
10 
11 class TriggerFactoryMock : public interfaces::TriggerFactory
12 {
13   public:
14     TriggerFactoryMock()
15     {
16         using namespace testing;
17 
18         ON_CALL(*this, make(A<const std::string&>(), _, _, _, _, _, _, _, _, _))
19             .WillByDefault(WithArgs<0>(Invoke([](const std::string& name) {
20                 return std::make_unique<NiceMock<TriggerMock>>(name);
21             })));
22     }
23 
24     MOCK_METHOD(std::unique_ptr<interfaces::Trigger>, make,
25                 (const std::string& name, bool isDiscrete, bool logToJournal,
26                  bool logToRedfish, bool updateReport,
27                  const std::vector<std::string>& reportNames,
28                  interfaces::TriggerManager& triggerManager,
29                  interfaces::JsonStorage& triggerStorage,
30                  const LabeledTriggerThresholdParams& labeledThresholdParams,
31                  const std::vector<LabeledSensorInfo>& labeledSensorsInfo),
32                 (const, override));
33 
34     MOCK_METHOD(std::vector<LabeledSensorInfo>, getLabeledSensorsInfo,
35                 (boost::asio::yield_context&, const SensorsInfo&),
36                 (const, override));
37 
38     auto& expectMake(
39         std::optional<TriggerParams> paramsOpt,
40         const testing::Matcher<interfaces::TriggerManager&>& tm,
41         const testing::Matcher<interfaces::JsonStorage&>& triggerStorage)
42     {
43         using namespace testing;
44 
45         if (paramsOpt)
46         {
47             const TriggerParams& params = *paramsOpt;
48 
49             const auto sensorInfos =
50                 utils::fromLabeledSensorsInfo(params.sensors());
51 
52             ON_CALL(*this, getLabeledSensorsInfo(_, sensorInfos))
53                 .WillByDefault(Return(params.sensors()));
54 
55             return EXPECT_CALL(
56                 *this,
57                 make(params.name(), params.isDiscrete(), params.logToJournal(),
58                      params.logToRedfish(), params.updateReport(),
59                      params.reportNames(), tm, triggerStorage,
60                      params.thresholdParams(), params.sensors()));
61         }
62         else
63         {
64             const std::vector<LabeledSensorInfo> dummy = {
65                 {"service99",
66                  "/xyz/openbmc_project/sensors/temperature/BMC_Temp99",
67                  "metadata99"}};
68 
69             ON_CALL(*this, getLabeledSensorsInfo(_, _))
70                 .WillByDefault(Return(dummy));
71 
72             return EXPECT_CALL(
73                 *this, make(_, _, _, _, _, _, tm, triggerStorage, _, dummy));
74         }
75     }
76 };
77