xref: /openbmc/telemetry/tests/src/test_report_manager.cpp (revision 51497a0c878d939c9ed2a6ed30d12b465af4d51c)
12f9f9b87SWludzik, Jozef #include "dbus_environment.hpp"
2d2238194SKrzysztof Grobelny #include "helpers.hpp"
3e2362796SWludzik, Jozef #include "mocks/json_storage_mock.hpp"
42f9f9b87SWludzik, Jozef #include "mocks/report_factory_mock.hpp"
5e2362796SWludzik, Jozef #include "params/report_params.hpp"
6e2362796SWludzik, Jozef #include "report.hpp"
72f9f9b87SWludzik, Jozef #include "report_manager.hpp"
8e8fc5751SKrzysztof Grobelny #include "utils/conversion.hpp"
9e2362796SWludzik, Jozef #include "utils/transform.hpp"
102f9f9b87SWludzik, Jozef 
112f9f9b87SWludzik, Jozef using namespace testing;
12e8fc5751SKrzysztof Grobelny using namespace std::string_literals;
13e2362796SWludzik, Jozef using namespace std::chrono_literals;
142f9f9b87SWludzik, Jozef 
152f9f9b87SWludzik, Jozef class TestReportManager : public Test
162f9f9b87SWludzik, Jozef {
172f9f9b87SWludzik, Jozef   public:
18e2362796SWludzik, Jozef     ReportParams reportParams;
192f9f9b87SWludzik, Jozef 
202f9f9b87SWludzik, Jozef     std::unique_ptr<ReportFactoryMock> reportFactoryMockPtr =
212f9f9b87SWludzik, Jozef         std::make_unique<StrictMock<ReportFactoryMock>>();
222f9f9b87SWludzik, Jozef     ReportFactoryMock& reportFactoryMock = *reportFactoryMockPtr;
23e2362796SWludzik, Jozef 
24e2362796SWludzik, Jozef     std::unique_ptr<StorageMock> storageMockPtr =
25e2362796SWludzik, Jozef         std::make_unique<NiceMock<StorageMock>>();
26e2362796SWludzik, Jozef     StorageMock& storageMock = *storageMockPtr;
27e2362796SWludzik, Jozef 
28d2238194SKrzysztof Grobelny     std::unique_ptr<ReportMock> reportMockPtr =
29d2238194SKrzysztof Grobelny         std::make_unique<NiceMock<ReportMock>>(reportParams.reportName());
30d2238194SKrzysztof Grobelny     ReportMock& reportMock = *reportMockPtr;
31d2238194SKrzysztof Grobelny 
32e2362796SWludzik, Jozef     std::unique_ptr<ReportManager> sut;
332f9f9b87SWludzik, Jozef 
342f9f9b87SWludzik, Jozef     MockFunction<void(std::string)> checkPoint;
352f9f9b87SWludzik, Jozef 
36e2362796SWludzik, Jozef     void SetUp() override
37e2362796SWludzik, Jozef     {
38dcc4e193SKrzysztof Grobelny         EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _))
39dcc4e193SKrzysztof Grobelny             .Times(AnyNumber());
40dcc4e193SKrzysztof Grobelny 
41e2362796SWludzik, Jozef         sut = std::make_unique<ReportManager>(std::move(reportFactoryMockPtr),
42e2362796SWludzik, Jozef                                               std::move(storageMockPtr),
43e2362796SWludzik, Jozef                                               DbusEnvironment::getObjServer());
44e2362796SWludzik, Jozef     }
45e2362796SWludzik, Jozef 
462f9f9b87SWludzik, Jozef     void TearDown() override
472f9f9b87SWludzik, Jozef     {
482f9f9b87SWludzik, Jozef         DbusEnvironment::synchronizeIoc();
492f9f9b87SWludzik, Jozef     }
502f9f9b87SWludzik, Jozef 
51*51497a0cSKrzysztof Grobelny     template <class... Args>
52*51497a0cSKrzysztof Grobelny     requires(sizeof...(Args) > 1)
53*51497a0cSKrzysztof Grobelny         std::pair<boost::system::error_code, std::string> addReport(
54*51497a0cSKrzysztof Grobelny             Args&&... args)
552f9f9b87SWludzik, Jozef     {
562f9f9b87SWludzik, Jozef         std::promise<std::pair<boost::system::error_code, std::string>>
572f9f9b87SWludzik, Jozef             addReportPromise;
582f9f9b87SWludzik, Jozef         DbusEnvironment::getBus()->async_method_call(
592f9f9b87SWludzik, Jozef             [&addReportPromise](boost::system::error_code ec,
602f9f9b87SWludzik, Jozef                                 const std::string& path) {
612f9f9b87SWludzik, Jozef                 addReportPromise.set_value({ec, path});
622f9f9b87SWludzik, Jozef             },
632f9f9b87SWludzik, Jozef             DbusEnvironment::serviceName(), ReportManager::reportManagerPath,
64dcc4e193SKrzysztof Grobelny             ReportManager::reportManagerIfaceName, "AddReportFutureVersion",
65*51497a0cSKrzysztof Grobelny             std::forward<Args>(args)...);
66f32f6fefSKrzysztof Grobelny         return DbusEnvironment::waitForFuture(addReportPromise.get_future());
672f9f9b87SWludzik, Jozef     }
682f9f9b87SWludzik, Jozef 
69*51497a0cSKrzysztof Grobelny     auto addReport(const ReportParams& params)
70*51497a0cSKrzysztof Grobelny     {
71*51497a0cSKrzysztof Grobelny         return addReport(
72*51497a0cSKrzysztof Grobelny             params.reportName(), utils::enumToString(params.reportingType()),
73*51497a0cSKrzysztof Grobelny             utils::enumToString(params.reportUpdates()), params.appendLimit(),
74*51497a0cSKrzysztof Grobelny             utils::transform(
75*51497a0cSKrzysztof Grobelny                 params.reportActions(),
76*51497a0cSKrzysztof Grobelny                 [](const auto v) { return utils::enumToString(v); }),
77*51497a0cSKrzysztof Grobelny             params.interval().count(),
78*51497a0cSKrzysztof Grobelny             toReadingParameters(params.metricParameters()));
79*51497a0cSKrzysztof Grobelny     }
80*51497a0cSKrzysztof Grobelny 
812f9f9b87SWludzik, Jozef     template <class T>
82e28aa53dSSzymon Dompke     static T getProperty(const std::string& property)
832f9f9b87SWludzik, Jozef     {
84e28aa53dSSzymon Dompke         return DbusEnvironment::getProperty<T>(
852f9f9b87SWludzik, Jozef             ReportManager::reportManagerPath,
86e28aa53dSSzymon Dompke             ReportManager::reportManagerIfaceName, property);
8732859b63SKarol Niczyj     }
882f9f9b87SWludzik, Jozef };
892f9f9b87SWludzik, Jozef 
902f9f9b87SWludzik, Jozef TEST_F(TestReportManager, minInterval)
912f9f9b87SWludzik, Jozef {
922f9f9b87SWludzik, Jozef     EXPECT_THAT(getProperty<uint64_t>("MinInterval"),
93dcc4e193SKrzysztof Grobelny                 Eq(ReportManager::minInterval.count()));
942f9f9b87SWludzik, Jozef }
952f9f9b87SWludzik, Jozef 
962f9f9b87SWludzik, Jozef TEST_F(TestReportManager, maxReports)
972f9f9b87SWludzik, Jozef {
98503c1589SWludzik, Jozef     EXPECT_THAT(getProperty<size_t>("MaxReports"),
992f9f9b87SWludzik, Jozef                 Eq(ReportManager::maxReports));
1002f9f9b87SWludzik, Jozef }
1012f9f9b87SWludzik, Jozef 
1022f9f9b87SWludzik, Jozef TEST_F(TestReportManager, addReport)
1032f9f9b87SWludzik, Jozef {
104dcc4e193SKrzysztof Grobelny     EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _));
105dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
1062f9f9b87SWludzik, Jozef         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
1072f9f9b87SWludzik, Jozef 
108e2362796SWludzik, Jozef     auto [ec, path] = addReport(reportParams);
1092f9f9b87SWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
1102f9f9b87SWludzik, Jozef     EXPECT_THAT(path, Eq(reportMock.getPath()));
1112f9f9b87SWludzik, Jozef }
1122f9f9b87SWludzik, Jozef 
11332859b63SKarol Niczyj TEST_F(TestReportManager, addReportWithMaxLengthName)
11432859b63SKarol Niczyj {
115e28aa53dSSzymon Dompke     std::string reportName(ReportManager::maxReportNameLength, 'z');
11632859b63SKarol Niczyj     reportParams.reportName(reportName);
117dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock));
11832859b63SKarol Niczyj 
11932859b63SKarol Niczyj     auto [ec, path] = addReport(reportParams);
12032859b63SKarol Niczyj 
12132859b63SKarol Niczyj     EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
12232859b63SKarol Niczyj     EXPECT_THAT(path, Eq("/"s + reportName));
12332859b63SKarol Niczyj }
12432859b63SKarol Niczyj 
12532859b63SKarol Niczyj TEST_F(TestReportManager, DISABLED_failToAddReportWithTooLongName)
12632859b63SKarol Niczyj {
127dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock))
12832859b63SKarol Niczyj         .Times(0);
12932859b63SKarol Niczyj 
13032859b63SKarol Niczyj     reportParams.reportName(
131e28aa53dSSzymon Dompke         std::string(ReportManager::maxReportNameLength + 1, 'z'));
13232859b63SKarol Niczyj 
13332859b63SKarol Niczyj     auto [ec, path] = addReport(reportParams);
13432859b63SKarol Niczyj 
13532859b63SKarol Niczyj     EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument));
13632859b63SKarol Niczyj     EXPECT_THAT(path, Eq(std::string()));
13732859b63SKarol Niczyj }
13832859b63SKarol Niczyj 
139e2362796SWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportTwice)
1402f9f9b87SWludzik, Jozef {
141dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
142d2238194SKrzysztof Grobelny         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
1432f9f9b87SWludzik, Jozef 
144e2362796SWludzik, Jozef     addReport(reportParams);
1452f9f9b87SWludzik, Jozef 
146e2362796SWludzik, Jozef     auto [ec, path] = addReport(reportParams);
14732859b63SKarol Niczyj 
1482f9f9b87SWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::file_exists));
1492f9f9b87SWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
1502f9f9b87SWludzik, Jozef }
1512f9f9b87SWludzik, Jozef 
152e2362796SWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWithInvalidInterval)
1532f9f9b87SWludzik, Jozef {
154dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock))
155d2238194SKrzysztof Grobelny         .Times(0);
1562f9f9b87SWludzik, Jozef 
157*51497a0cSKrzysztof Grobelny     reportParams.reportingType(ReportingType::periodic);
158e2362796SWludzik, Jozef     reportParams.interval(reportParams.interval() - 1ms);
1592f9f9b87SWludzik, Jozef 
160e2362796SWludzik, Jozef     auto [ec, path] = addReport(reportParams);
16132859b63SKarol Niczyj 
1622f9f9b87SWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument));
1632f9f9b87SWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
1642f9f9b87SWludzik, Jozef }
1652f9f9b87SWludzik, Jozef 
166bc766b4dSWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWithInvalidReportingType)
167bc766b4dSWludzik, Jozef {
168dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock))
169bc766b4dSWludzik, Jozef         .Times(0);
170bc766b4dSWludzik, Jozef 
171*51497a0cSKrzysztof Grobelny     auto [ec, path] = addReport(
172*51497a0cSKrzysztof Grobelny         reportParams.reportName(), "InvalidReportingType",
173*51497a0cSKrzysztof Grobelny         utils::transform(reportParams.reportActions(),
174*51497a0cSKrzysztof Grobelny                          [](const auto v) { return utils::enumToString(v); }),
175*51497a0cSKrzysztof Grobelny         reportParams.interval().count(),
176*51497a0cSKrzysztof Grobelny         toReadingParameters(reportParams.metricParameters()));
17732859b63SKarol Niczyj 
178bc766b4dSWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument));
179bc766b4dSWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
180bc766b4dSWludzik, Jozef }
181bc766b4dSWludzik, Jozef 
182bc766b4dSWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWithMoreSensorsThanExpected)
183bc766b4dSWludzik, Jozef {
184dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock))
185bc766b4dSWludzik, Jozef         .Times(0);
186bc766b4dSWludzik, Jozef 
187dcc4e193SKrzysztof Grobelny     auto metricParams = reportParams.metricParameters();
188bc766b4dSWludzik, Jozef     for (size_t i = 0; i < ReportManager::maxReadingParams + 1; i++)
189bc766b4dSWludzik, Jozef     {
190dcc4e193SKrzysztof Grobelny         metricParams.push_back(metricParams.front());
191bc766b4dSWludzik, Jozef     }
192dcc4e193SKrzysztof Grobelny     reportParams.metricParameters(std::move(metricParams));
193bc766b4dSWludzik, Jozef 
194bc766b4dSWludzik, Jozef     auto [ec, path] = addReport(reportParams);
19532859b63SKarol Niczyj 
196bc766b4dSWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::argument_list_too_long));
197bc766b4dSWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
198bc766b4dSWludzik, Jozef }
199bc766b4dSWludzik, Jozef 
200e2362796SWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWhenMaxReportIsReached)
2012f9f9b87SWludzik, Jozef {
202dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock))
2032f9f9b87SWludzik, Jozef         .Times(ReportManager::maxReports);
2042f9f9b87SWludzik, Jozef 
2052f9f9b87SWludzik, Jozef     for (size_t i = 0; i < ReportManager::maxReports; i++)
2062f9f9b87SWludzik, Jozef     {
207e2362796SWludzik, Jozef         reportParams.reportName(reportParams.reportName() + std::to_string(i));
2082f9f9b87SWludzik, Jozef 
209e2362796SWludzik, Jozef         auto [ec, path] = addReport(reportParams);
2102f9f9b87SWludzik, Jozef         EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
2112f9f9b87SWludzik, Jozef     }
2122f9f9b87SWludzik, Jozef 
213e2362796SWludzik, Jozef     reportParams.reportName(reportParams.reportName() +
214e2362796SWludzik, Jozef                             std::to_string(ReportManager::maxReports));
215e2362796SWludzik, Jozef     auto [ec, path] = addReport(reportParams);
21632859b63SKarol Niczyj 
2172f9f9b87SWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::too_many_files_open));
2182f9f9b87SWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
2192f9f9b87SWludzik, Jozef }
2202f9f9b87SWludzik, Jozef 
2212f9f9b87SWludzik, Jozef TEST_F(TestReportManager, removeReport)
2222f9f9b87SWludzik, Jozef {
2232f9f9b87SWludzik, Jozef     {
2242f9f9b87SWludzik, Jozef         InSequence seq;
225dcc4e193SKrzysztof Grobelny         EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _));
226dcc4e193SKrzysztof Grobelny         reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
2272f9f9b87SWludzik, Jozef             .WillOnce(Return(ByMove(std::move(reportMockPtr))));
2282f9f9b87SWludzik, Jozef         EXPECT_CALL(reportMock, Die());
2292f9f9b87SWludzik, Jozef         EXPECT_CALL(checkPoint, Call("end"));
2302f9f9b87SWludzik, Jozef     }
2312f9f9b87SWludzik, Jozef 
232e2362796SWludzik, Jozef     addReport(reportParams);
233e2362796SWludzik, Jozef     sut->removeReport(&reportMock);
2342f9f9b87SWludzik, Jozef     checkPoint.Call("end");
2352f9f9b87SWludzik, Jozef }
2362f9f9b87SWludzik, Jozef 
2372f9f9b87SWludzik, Jozef TEST_F(TestReportManager, removingReportThatIsNotInContainerHasNoEffect)
2382f9f9b87SWludzik, Jozef {
2392f9f9b87SWludzik, Jozef     {
2402f9f9b87SWludzik, Jozef         InSequence seq;
2412f9f9b87SWludzik, Jozef         EXPECT_CALL(checkPoint, Call("end"));
2422f9f9b87SWludzik, Jozef         EXPECT_CALL(reportMock, Die());
2432f9f9b87SWludzik, Jozef     }
2442f9f9b87SWludzik, Jozef 
245e2362796SWludzik, Jozef     sut->removeReport(&reportMock);
2462f9f9b87SWludzik, Jozef     checkPoint.Call("end");
2472f9f9b87SWludzik, Jozef }
2482f9f9b87SWludzik, Jozef 
2492f9f9b87SWludzik, Jozef TEST_F(TestReportManager, removingSameReportTwiceHasNoSideEffect)
2502f9f9b87SWludzik, Jozef {
2512f9f9b87SWludzik, Jozef     {
2522f9f9b87SWludzik, Jozef         InSequence seq;
253dcc4e193SKrzysztof Grobelny         EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _));
254dcc4e193SKrzysztof Grobelny         reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
2552f9f9b87SWludzik, Jozef             .WillOnce(Return(ByMove(std::move(reportMockPtr))));
2562f9f9b87SWludzik, Jozef         EXPECT_CALL(reportMock, Die());
2572f9f9b87SWludzik, Jozef         EXPECT_CALL(checkPoint, Call("end"));
2582f9f9b87SWludzik, Jozef     }
2592f9f9b87SWludzik, Jozef 
260e2362796SWludzik, Jozef     addReport(reportParams);
261e2362796SWludzik, Jozef     sut->removeReport(&reportMock);
262e2362796SWludzik, Jozef     sut->removeReport(&reportMock);
2632f9f9b87SWludzik, Jozef     checkPoint.Call("end");
2642f9f9b87SWludzik, Jozef }
265e2362796SWludzik, Jozef 
266d960e1f3SWludzik, Jozef TEST_F(TestReportManager, updateReportCallsUpdateReadingsForExistReport)
267d960e1f3SWludzik, Jozef {
268dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
269d960e1f3SWludzik, Jozef         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
270d960e1f3SWludzik, Jozef     EXPECT_CALL(reportMock, updateReadings());
271d960e1f3SWludzik, Jozef 
272d960e1f3SWludzik, Jozef     addReport(reportParams);
273d960e1f3SWludzik, Jozef     sut->updateReport(reportParams.reportName());
274d960e1f3SWludzik, Jozef }
275d960e1f3SWludzik, Jozef 
276d960e1f3SWludzik, Jozef TEST_F(TestReportManager, updateReportDoNothingIfReportDoesNotExist)
277d960e1f3SWludzik, Jozef {
278dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
279d960e1f3SWludzik, Jozef         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
280d960e1f3SWludzik, Jozef     EXPECT_CALL(reportMock, updateReadings()).Times(0);
281d960e1f3SWludzik, Jozef 
282d960e1f3SWludzik, Jozef     addReport(reportParams);
283d960e1f3SWludzik, Jozef     sut->updateReport("NotAReport");
284d960e1f3SWludzik, Jozef }
285d960e1f3SWludzik, Jozef 
286e8fc5751SKrzysztof Grobelny class TestReportManagerWithAggregationOperationType :
287e8fc5751SKrzysztof Grobelny     public TestReportManager,
288e8fc5751SKrzysztof Grobelny     public WithParamInterface<OperationType>
289e8fc5751SKrzysztof Grobelny {
290e8fc5751SKrzysztof Grobelny   public:
291e8fc5751SKrzysztof Grobelny     OperationType operationType = GetParam();
292e8fc5751SKrzysztof Grobelny };
293e8fc5751SKrzysztof Grobelny 
294e8fc5751SKrzysztof Grobelny INSTANTIATE_TEST_SUITE_P(_, TestReportManagerWithAggregationOperationType,
295e8fc5751SKrzysztof Grobelny                          Values(OperationType::single, OperationType::max,
296e8fc5751SKrzysztof Grobelny                                 OperationType::min, OperationType::avg,
297e8fc5751SKrzysztof Grobelny                                 OperationType::sum));
298e8fc5751SKrzysztof Grobelny 
299e8fc5751SKrzysztof Grobelny TEST_P(TestReportManagerWithAggregationOperationType,
300e8fc5751SKrzysztof Grobelny        addReportWithDifferentOperationTypes)
301e8fc5751SKrzysztof Grobelny {
302dcc4e193SKrzysztof Grobelny     reportParams.metricParameters(
303dcc4e193SKrzysztof Grobelny         std::vector<LabeledMetricParameters>{{LabeledMetricParameters{
304dcc4e193SKrzysztof Grobelny             {LabeledSensorParameters{"Service",
305dcc4e193SKrzysztof Grobelny                                      "/xyz/openbmc_project/sensors/power/p1"}},
306dcc4e193SKrzysztof Grobelny             operationType,
307e8fc5751SKrzysztof Grobelny             "MetricId1",
308dcc4e193SKrzysztof Grobelny             "Metadata1",
309dcc4e193SKrzysztof Grobelny             CollectionTimeScope::point,
310dcc4e193SKrzysztof Grobelny             CollectionDuration(Milliseconds(0u))}}});
311e8fc5751SKrzysztof Grobelny 
312dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
313e8fc5751SKrzysztof Grobelny         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
314e8fc5751SKrzysztof Grobelny 
315e8fc5751SKrzysztof Grobelny     auto [ec, path] = addReport(reportParams);
31632859b63SKarol Niczyj 
317e8fc5751SKrzysztof Grobelny     EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
318e8fc5751SKrzysztof Grobelny     EXPECT_THAT(path, Eq("/"s + reportParams.reportName()));
319e8fc5751SKrzysztof Grobelny }
320e8fc5751SKrzysztof Grobelny 
321e2362796SWludzik, Jozef class TestReportManagerStorage : public TestReportManager
322e2362796SWludzik, Jozef {
323e2362796SWludzik, Jozef   public:
324e2362796SWludzik, Jozef     using FilePath = interfaces::JsonStorage::FilePath;
325e2362796SWludzik, Jozef     using DirectoryPath = interfaces::JsonStorage::DirectoryPath;
326e2362796SWludzik, Jozef 
327e2362796SWludzik, Jozef     void SetUp() override
328e2362796SWludzik, Jozef     {
329dcc4e193SKrzysztof Grobelny         EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _)).Times(0);
330dcc4e193SKrzysztof Grobelny 
331e2362796SWludzik, Jozef         ON_CALL(storageMock, list())
332e2362796SWludzik, Jozef             .WillByDefault(Return(std::vector<FilePath>{FilePath("report1")}));
333e2362796SWludzik, Jozef         ON_CALL(storageMock, load(FilePath("report1")))
3346ccfcbf5SKrzysztof Grobelny             .WillByDefault(InvokeWithoutArgs([this] { return data; }));
335e2362796SWludzik, Jozef     }
336e2362796SWludzik, Jozef 
337e2362796SWludzik, Jozef     void makeReportManager()
338e2362796SWludzik, Jozef     {
339e2362796SWludzik, Jozef         sut = std::make_unique<ReportManager>(std::move(reportFactoryMockPtr),
340e2362796SWludzik, Jozef                                               std::move(storageMockPtr),
341e2362796SWludzik, Jozef                                               DbusEnvironment::getObjServer());
342e2362796SWludzik, Jozef     }
343e2362796SWludzik, Jozef 
344e2362796SWludzik, Jozef     nlohmann::json data = nlohmann::json{
3457e098e93SLukasz Kazmierczak         {"Enabled", reportParams.enabled()},
346e2362796SWludzik, Jozef         {"Version", Report::reportVersion},
347e2362796SWludzik, Jozef         {"Name", reportParams.reportName()},
348*51497a0cSKrzysztof Grobelny         {"ReportingType", utils::toUnderlying(reportParams.reportingType())},
349*51497a0cSKrzysztof Grobelny         {"ReportActions", reportParams.reportActions()},
350e2362796SWludzik, Jozef         {"Interval", reportParams.interval().count()},
351*51497a0cSKrzysztof Grobelny         {"ReportUpdates", utils::toUnderlying(reportParams.reportUpdates())},
3523eb56865SSzymon Dompke         {"AppendLimit", reportParams.appendLimit()},
353dcc4e193SKrzysztof Grobelny         {"ReadingParameters", reportParams.metricParameters()}};
354e2362796SWludzik, Jozef };
355e2362796SWludzik, Jozef 
356e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage, reportManagerCtorAddReportFromStorage)
357e2362796SWludzik, Jozef {
358dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, _, Ref(storageMock));
359e2362796SWludzik, Jozef 
360e2362796SWludzik, Jozef     makeReportManager();
361e2362796SWludzik, Jozef }
362e2362796SWludzik, Jozef 
363e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage,
364e2362796SWludzik, Jozef        reportManagerCtorRemoveFileIfVersionDoesNotMatch)
365e2362796SWludzik, Jozef {
366e2362796SWludzik, Jozef     data["Version"] = Report::reportVersion - 1;
367e2362796SWludzik, Jozef 
368e2362796SWludzik, Jozef     EXPECT_CALL(storageMock, remove(FilePath("report1")));
369e2362796SWludzik, Jozef 
370e2362796SWludzik, Jozef     makeReportManager();
371e2362796SWludzik, Jozef }
372e2362796SWludzik, Jozef 
373e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage,
374e2362796SWludzik, Jozef        reportManagerCtorRemoveFileIfIntervalHasWrongType)
375e2362796SWludzik, Jozef {
376e2362796SWludzik, Jozef     data["Interval"] = "1000";
377e2362796SWludzik, Jozef 
378e2362796SWludzik, Jozef     EXPECT_CALL(storageMock, remove(FilePath("report1")));
379e2362796SWludzik, Jozef 
380e2362796SWludzik, Jozef     makeReportManager();
381e2362796SWludzik, Jozef }
382