xref: /openbmc/telemetry/tests/src/mocks/report_factory_mock.hpp (revision b4ef22e4d365bde35a7fce7950033c9271c68ce7)
1 #pragma once
2 
3 #include "interfaces/report_factory.hpp"
4 #include "mocks/report_mock.hpp"
5 #include "params/report_params.hpp"
6 #include "utils/transform.hpp"
7 
8 #include <gmock/gmock.h>
9 
10 class ReportFactoryMock : public interfaces::ReportFactory
11 {
12     static std::vector<LabeledMetricParameters>
13         convertToLabeled(const ReadingParameters& readingParams)
14     {
15         return utils::transform(readingParams, [](const auto& params) {
16             return LabeledMetricParameters(
17                 utils::transform(std::get<0>(params),
18                                  [](const auto& sensorData) {
19                                      return LabeledSensorInfo(
20                                          "Service", std::get<0>(sensorData),
21                                          std::get<1>(sensorData));
22                                  }),
23                 utils::toOperationType(std::get<1>(params)),
24                 std::get<2>(params),
25                 utils::toCollectionTimeScope(std::get<3>(params)),
26                 CollectionDuration(Milliseconds(std::get<4>(params))));
27         });
28     }
29 
30   public:
31     ReportFactoryMock()
32     {
33         using namespace testing;
34 
35         ON_CALL(*this, convertMetricParams(_, _))
36             .WillByDefault(
37                 WithArgs<1>(Invoke(&ReportFactoryMock::convertToLabeled)));
38 
39         ON_CALL(*this,
40                 make(A<const std::string&>(), _, _, _, _, _, _, _, _, _, _, _))
41             .WillByDefault(WithArgs<0>(Invoke([](const std::string& id) {
42                 return std::make_unique<NiceMock<ReportMock>>(id);
43             })));
44     }
45 
46     MOCK_METHOD(std::vector<LabeledMetricParameters>, convertMetricParams,
47                 (boost::asio::yield_context&, const ReadingParameters&),
48                 (const, override));
49 
50     MOCK_METHOD(std::unique_ptr<interfaces::Report>, make,
51                 (const std::string&, const std::string&, const ReportingType,
52                  const std::vector<ReportAction>&, Milliseconds, uint64_t,
53                  const ReportUpdates, interfaces::ReportManager&,
54                  interfaces::JsonStorage&, std::vector<LabeledMetricParameters>,
55                  bool, const std::vector<std::string>&),
56                 (const, override));
57 
58     auto& expectMake(
59         std::optional<std::reference_wrapper<const ReportParams>> paramsRef,
60         const testing::Matcher<interfaces::ReportManager&>& rm,
61         const testing::Matcher<interfaces::JsonStorage&>& js)
62     {
63         using testing::_;
64         if (paramsRef)
65         {
66             const ReportParams& params = *paramsRef;
67             return EXPECT_CALL(
68                 *this, make(params.reportId(), params.reportName(),
69                             params.reportingType(), params.reportActions(),
70                             params.interval(), params.appendLimit(),
71                             params.reportUpdates(), rm, js,
72                             params.metricParameters(), params.enabled(), _));
73         }
74         else
75         {
76             return EXPECT_CALL(*this,
77                                make(_, _, _, _, _, _, _, rm, js, _, _, _));
78         }
79     }
80 };
81