xref: /openbmc/telemetry/tests/src/test_report_manager.cpp (revision 32859b634e366a015331fb8ab62766340df9c7b8)
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"
90e7ae5dbSEd Tanous #include "utils/set_exception.hpp"
10e2362796SWludzik, Jozef #include "utils/transform.hpp"
112f9f9b87SWludzik, Jozef 
122f9f9b87SWludzik, Jozef using namespace testing;
13e8fc5751SKrzysztof Grobelny using namespace std::string_literals;
14e2362796SWludzik, Jozef using namespace std::chrono_literals;
152f9f9b87SWludzik, Jozef 
162f9f9b87SWludzik, Jozef class TestReportManager : public Test
172f9f9b87SWludzik, Jozef {
182f9f9b87SWludzik, Jozef   public:
19e2362796SWludzik, Jozef     ReportParams reportParams;
202f9f9b87SWludzik, Jozef 
212f9f9b87SWludzik, Jozef     std::unique_ptr<ReportFactoryMock> reportFactoryMockPtr =
222f9f9b87SWludzik, Jozef         std::make_unique<StrictMock<ReportFactoryMock>>();
232f9f9b87SWludzik, Jozef     ReportFactoryMock& reportFactoryMock = *reportFactoryMockPtr;
24e2362796SWludzik, Jozef 
25e2362796SWludzik, Jozef     std::unique_ptr<StorageMock> storageMockPtr =
26e2362796SWludzik, Jozef         std::make_unique<NiceMock<StorageMock>>();
27e2362796SWludzik, Jozef     StorageMock& storageMock = *storageMockPtr;
28e2362796SWludzik, Jozef 
29d2238194SKrzysztof Grobelny     std::unique_ptr<ReportMock> reportMockPtr =
30d2238194SKrzysztof Grobelny         std::make_unique<NiceMock<ReportMock>>(reportParams.reportName());
31d2238194SKrzysztof Grobelny     ReportMock& reportMock = *reportMockPtr;
32d2238194SKrzysztof Grobelny 
33e2362796SWludzik, Jozef     std::unique_ptr<ReportManager> sut;
342f9f9b87SWludzik, Jozef 
352f9f9b87SWludzik, Jozef     MockFunction<void(std::string)> checkPoint;
362f9f9b87SWludzik, Jozef 
37e2362796SWludzik, Jozef     void SetUp() override
38e2362796SWludzik, Jozef     {
39e2362796SWludzik, Jozef         sut = std::make_unique<ReportManager>(std::move(reportFactoryMockPtr),
40e2362796SWludzik, Jozef                                               std::move(storageMockPtr),
41e2362796SWludzik, Jozef                                               DbusEnvironment::getObjServer());
42e2362796SWludzik, Jozef     }
43e2362796SWludzik, Jozef 
442f9f9b87SWludzik, Jozef     void TearDown() override
452f9f9b87SWludzik, Jozef     {
462f9f9b87SWludzik, Jozef         DbusEnvironment::synchronizeIoc();
472f9f9b87SWludzik, Jozef     }
482f9f9b87SWludzik, Jozef 
492f9f9b87SWludzik, Jozef     std::pair<boost::system::error_code, std::string>
50e2362796SWludzik, Jozef         addReport(const ReportParams& params)
512f9f9b87SWludzik, Jozef     {
522f9f9b87SWludzik, Jozef         std::promise<std::pair<boost::system::error_code, std::string>>
532f9f9b87SWludzik, Jozef             addReportPromise;
542f9f9b87SWludzik, Jozef         DbusEnvironment::getBus()->async_method_call(
552f9f9b87SWludzik, Jozef             [&addReportPromise](boost::system::error_code ec,
562f9f9b87SWludzik, Jozef                                 const std::string& path) {
572f9f9b87SWludzik, Jozef                 addReportPromise.set_value({ec, path});
582f9f9b87SWludzik, Jozef             },
592f9f9b87SWludzik, Jozef             DbusEnvironment::serviceName(), ReportManager::reportManagerPath,
609f9ff90aSKrzysztof Grobelny             ReportManager::reportManagerIfaceName, "AddReport",
61e2362796SWludzik, Jozef             params.reportName(), params.reportingType(),
62e2362796SWludzik, Jozef             params.emitReadingUpdate(), params.logToMetricReportCollection(),
63e2362796SWludzik, Jozef             static_cast<uint64_t>(params.interval().count()),
64e2362796SWludzik, Jozef             params.readingParameters());
65f32f6fefSKrzysztof Grobelny         return DbusEnvironment::waitForFuture(addReportPromise.get_future());
662f9f9b87SWludzik, Jozef     }
672f9f9b87SWludzik, Jozef 
682f9f9b87SWludzik, Jozef     template <class T>
692f9f9b87SWludzik, Jozef     static T getProperty(std::string property)
702f9f9b87SWludzik, Jozef     {
710e7ae5dbSEd Tanous         auto propertyPromise = std::promise<T>();
720e7ae5dbSEd Tanous         auto propertyFuture = propertyPromise.get_future();
732f9f9b87SWludzik, Jozef         sdbusplus::asio::getProperty<T>(
742f9f9b87SWludzik, Jozef             *DbusEnvironment::getBus(), DbusEnvironment::serviceName(),
752f9f9b87SWludzik, Jozef             ReportManager::reportManagerPath,
762f9f9b87SWludzik, Jozef             ReportManager::reportManagerIfaceName, property,
779f9ff90aSKrzysztof Grobelny             [&propertyPromise](boost::system::error_code ec, T t) {
780e7ae5dbSEd Tanous                 if (ec)
790e7ae5dbSEd Tanous                 {
809f9ff90aSKrzysztof Grobelny                     utils::setException(propertyPromise, "GetProperty failed");
810e7ae5dbSEd Tanous                     return;
820e7ae5dbSEd Tanous                 }
830e7ae5dbSEd Tanous                 propertyPromise.set_value(t);
840e7ae5dbSEd Tanous             });
850e7ae5dbSEd Tanous         return DbusEnvironment::waitForFuture(std::move(propertyFuture));
862f9f9b87SWludzik, Jozef     }
87*32859b63SKarol Niczyj 
88*32859b63SKarol Niczyj     static std::string prepareReportNameWithLength(size_t length)
89*32859b63SKarol Niczyj     {
90*32859b63SKarol Niczyj         std::stringstream reportNameStream;
91*32859b63SKarol Niczyj         for (size_t i = 0; i < length; ++i)
92*32859b63SKarol Niczyj         {
93*32859b63SKarol Niczyj             reportNameStream << "z";
94*32859b63SKarol Niczyj         }
95*32859b63SKarol Niczyj         return reportNameStream.str();
96*32859b63SKarol Niczyj     }
972f9f9b87SWludzik, Jozef };
982f9f9b87SWludzik, Jozef 
992f9f9b87SWludzik, Jozef TEST_F(TestReportManager, minInterval)
1002f9f9b87SWludzik, Jozef {
1012f9f9b87SWludzik, Jozef     EXPECT_THAT(getProperty<uint64_t>("MinInterval"),
1022f9f9b87SWludzik, Jozef                 Eq(static_cast<uint64_t>(ReportManager::minInterval.count())));
1032f9f9b87SWludzik, Jozef }
1042f9f9b87SWludzik, Jozef 
1052f9f9b87SWludzik, Jozef TEST_F(TestReportManager, maxReports)
1062f9f9b87SWludzik, Jozef {
107503c1589SWludzik, Jozef     EXPECT_THAT(getProperty<size_t>("MaxReports"),
1082f9f9b87SWludzik, Jozef                 Eq(ReportManager::maxReports));
1092f9f9b87SWludzik, Jozef }
1102f9f9b87SWludzik, Jozef 
1112f9f9b87SWludzik, Jozef TEST_F(TestReportManager, addReport)
1122f9f9b87SWludzik, Jozef {
113d2238194SKrzysztof Grobelny     reportFactoryMock.expectMake(_, reportParams, Ref(*sut), Ref(storageMock))
1142f9f9b87SWludzik, Jozef         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
1152f9f9b87SWludzik, Jozef 
116e2362796SWludzik, Jozef     auto [ec, path] = addReport(reportParams);
1172f9f9b87SWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
1182f9f9b87SWludzik, Jozef     EXPECT_THAT(path, Eq(reportMock.getPath()));
1192f9f9b87SWludzik, Jozef }
1202f9f9b87SWludzik, Jozef 
121*32859b63SKarol Niczyj TEST_F(TestReportManager, addReportWithMaxLengthName)
122*32859b63SKarol Niczyj {
123*32859b63SKarol Niczyj     std::string reportName =
124*32859b63SKarol Niczyj         prepareReportNameWithLength(ReportManager::maxReportNameLength);
125*32859b63SKarol Niczyj     reportParams.reportName(reportName);
126*32859b63SKarol Niczyj     reportFactoryMock.expectMake(_, reportParams, Ref(*sut), Ref(storageMock));
127*32859b63SKarol Niczyj 
128*32859b63SKarol Niczyj     auto [ec, path] = addReport(reportParams);
129*32859b63SKarol Niczyj 
130*32859b63SKarol Niczyj     EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
131*32859b63SKarol Niczyj     EXPECT_THAT(path, Eq("/"s + reportName));
132*32859b63SKarol Niczyj }
133*32859b63SKarol Niczyj 
134*32859b63SKarol Niczyj TEST_F(TestReportManager, DISABLED_failToAddReportWithTooLongName)
135*32859b63SKarol Niczyj {
136*32859b63SKarol Niczyj     reportFactoryMock.expectMake(_, std::nullopt, Ref(*sut), Ref(storageMock))
137*32859b63SKarol Niczyj         .Times(0);
138*32859b63SKarol Niczyj     reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock), _)
139*32859b63SKarol Niczyj         .Times(0);
140*32859b63SKarol Niczyj 
141*32859b63SKarol Niczyj     reportParams.reportName(
142*32859b63SKarol Niczyj         prepareReportNameWithLength(ReportManager::maxReportNameLength + 1));
143*32859b63SKarol Niczyj 
144*32859b63SKarol Niczyj     auto [ec, path] = addReport(reportParams);
145*32859b63SKarol Niczyj 
146*32859b63SKarol Niczyj     EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument));
147*32859b63SKarol Niczyj     EXPECT_THAT(path, Eq(std::string()));
148*32859b63SKarol Niczyj }
149*32859b63SKarol Niczyj 
150e2362796SWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportTwice)
1512f9f9b87SWludzik, Jozef {
152d2238194SKrzysztof Grobelny     reportFactoryMock.expectMake(_, reportParams, Ref(*sut), Ref(storageMock))
153d2238194SKrzysztof Grobelny         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
1542f9f9b87SWludzik, Jozef 
155e2362796SWludzik, Jozef     addReport(reportParams);
1562f9f9b87SWludzik, Jozef 
157e2362796SWludzik, Jozef     auto [ec, path] = addReport(reportParams);
158*32859b63SKarol Niczyj 
1592f9f9b87SWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::file_exists));
1602f9f9b87SWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
1612f9f9b87SWludzik, Jozef }
1622f9f9b87SWludzik, Jozef 
163e2362796SWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWithInvalidInterval)
1642f9f9b87SWludzik, Jozef {
165d2238194SKrzysztof Grobelny     reportFactoryMock.expectMake(_, std::nullopt, Ref(*sut), Ref(storageMock))
166d2238194SKrzysztof Grobelny         .Times(0);
167d2238194SKrzysztof Grobelny     reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock), _)
168d2238194SKrzysztof Grobelny         .Times(0);
1692f9f9b87SWludzik, Jozef 
170bc766b4dSWludzik, Jozef     reportParams.reportingType("Periodic");
171e2362796SWludzik, Jozef     reportParams.interval(reportParams.interval() - 1ms);
1722f9f9b87SWludzik, Jozef 
173e2362796SWludzik, Jozef     auto [ec, path] = addReport(reportParams);
174*32859b63SKarol Niczyj 
1752f9f9b87SWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument));
1762f9f9b87SWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
1772f9f9b87SWludzik, Jozef }
1782f9f9b87SWludzik, Jozef 
179bc766b4dSWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWithInvalidReportingType)
180bc766b4dSWludzik, Jozef {
181bc766b4dSWludzik, Jozef     reportFactoryMock.expectMake(_, std::nullopt, Ref(*sut), Ref(storageMock))
182bc766b4dSWludzik, Jozef         .Times(0);
183bc766b4dSWludzik, Jozef     reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock), _)
184bc766b4dSWludzik, Jozef         .Times(0);
185bc766b4dSWludzik, Jozef 
186bc766b4dSWludzik, Jozef     reportParams.reportingType("Invalid");
187bc766b4dSWludzik, Jozef 
188bc766b4dSWludzik, Jozef     auto [ec, path] = addReport(reportParams);
189*32859b63SKarol Niczyj 
190bc766b4dSWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument));
191bc766b4dSWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
192bc766b4dSWludzik, Jozef }
193bc766b4dSWludzik, Jozef 
194bc766b4dSWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWithMoreSensorsThanExpected)
195bc766b4dSWludzik, Jozef {
196bc766b4dSWludzik, Jozef     reportFactoryMock.expectMake(_, std::nullopt, Ref(*sut), Ref(storageMock))
197bc766b4dSWludzik, Jozef         .Times(0);
198bc766b4dSWludzik, Jozef     reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock), _)
199bc766b4dSWludzik, Jozef         .Times(0);
200bc766b4dSWludzik, Jozef 
201bc766b4dSWludzik, Jozef     auto readingParams = reportParams.readingParameters();
202bc766b4dSWludzik, Jozef     for (size_t i = 0; i < ReportManager::maxReadingParams + 1; i++)
203bc766b4dSWludzik, Jozef     {
204bc766b4dSWludzik, Jozef         readingParams.push_back(readingParams.front());
205bc766b4dSWludzik, Jozef     }
206bc766b4dSWludzik, Jozef     reportParams.readingParameters(std::move(readingParams));
207bc766b4dSWludzik, Jozef 
208bc766b4dSWludzik, Jozef     auto [ec, path] = addReport(reportParams);
209*32859b63SKarol Niczyj 
210bc766b4dSWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::argument_list_too_long));
211bc766b4dSWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
212bc766b4dSWludzik, Jozef }
213bc766b4dSWludzik, Jozef 
214e2362796SWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWhenMaxReportIsReached)
2152f9f9b87SWludzik, Jozef {
216d2238194SKrzysztof Grobelny     reportFactoryMock.expectMake(_, std::nullopt, Ref(*sut), Ref(storageMock))
2172f9f9b87SWludzik, Jozef         .Times(ReportManager::maxReports);
2182f9f9b87SWludzik, Jozef 
2192f9f9b87SWludzik, Jozef     for (size_t i = 0; i < ReportManager::maxReports; i++)
2202f9f9b87SWludzik, Jozef     {
221e2362796SWludzik, Jozef         reportParams.reportName(reportParams.reportName() + std::to_string(i));
2222f9f9b87SWludzik, Jozef 
223e2362796SWludzik, Jozef         auto [ec, path] = addReport(reportParams);
2242f9f9b87SWludzik, Jozef         EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
2252f9f9b87SWludzik, Jozef     }
2262f9f9b87SWludzik, Jozef 
227e2362796SWludzik, Jozef     reportParams.reportName(reportParams.reportName() +
228e2362796SWludzik, Jozef                             std::to_string(ReportManager::maxReports));
229e2362796SWludzik, Jozef     auto [ec, path] = addReport(reportParams);
230*32859b63SKarol Niczyj 
2312f9f9b87SWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::too_many_files_open));
2322f9f9b87SWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
2332f9f9b87SWludzik, Jozef }
2342f9f9b87SWludzik, Jozef 
2352f9f9b87SWludzik, Jozef TEST_F(TestReportManager, removeReport)
2362f9f9b87SWludzik, Jozef {
2372f9f9b87SWludzik, Jozef     {
2382f9f9b87SWludzik, Jozef         InSequence seq;
239d2238194SKrzysztof Grobelny         reportFactoryMock
240d2238194SKrzysztof Grobelny             .expectMake(_, reportParams, Ref(*sut), Ref(storageMock))
2412f9f9b87SWludzik, Jozef             .WillOnce(Return(ByMove(std::move(reportMockPtr))));
2422f9f9b87SWludzik, Jozef         EXPECT_CALL(reportMock, Die());
2432f9f9b87SWludzik, Jozef         EXPECT_CALL(checkPoint, Call("end"));
2442f9f9b87SWludzik, Jozef     }
2452f9f9b87SWludzik, Jozef 
246e2362796SWludzik, Jozef     addReport(reportParams);
247e2362796SWludzik, Jozef     sut->removeReport(&reportMock);
2482f9f9b87SWludzik, Jozef     checkPoint.Call("end");
2492f9f9b87SWludzik, Jozef }
2502f9f9b87SWludzik, Jozef 
2512f9f9b87SWludzik, Jozef TEST_F(TestReportManager, removingReportThatIsNotInContainerHasNoEffect)
2522f9f9b87SWludzik, Jozef {
2532f9f9b87SWludzik, Jozef     {
2542f9f9b87SWludzik, Jozef         InSequence seq;
2552f9f9b87SWludzik, Jozef         EXPECT_CALL(checkPoint, Call("end"));
2562f9f9b87SWludzik, Jozef         EXPECT_CALL(reportMock, Die());
2572f9f9b87SWludzik, Jozef     }
2582f9f9b87SWludzik, Jozef 
259e2362796SWludzik, Jozef     sut->removeReport(&reportMock);
2602f9f9b87SWludzik, Jozef     checkPoint.Call("end");
2612f9f9b87SWludzik, Jozef }
2622f9f9b87SWludzik, Jozef 
2632f9f9b87SWludzik, Jozef TEST_F(TestReportManager, removingSameReportTwiceHasNoSideEffect)
2642f9f9b87SWludzik, Jozef {
2652f9f9b87SWludzik, Jozef     {
2662f9f9b87SWludzik, Jozef         InSequence seq;
267d2238194SKrzysztof Grobelny         reportFactoryMock
268d2238194SKrzysztof Grobelny             .expectMake(_, reportParams, Ref(*sut), Ref(storageMock))
2692f9f9b87SWludzik, Jozef             .WillOnce(Return(ByMove(std::move(reportMockPtr))));
2702f9f9b87SWludzik, Jozef         EXPECT_CALL(reportMock, Die());
2712f9f9b87SWludzik, Jozef         EXPECT_CALL(checkPoint, Call("end"));
2722f9f9b87SWludzik, Jozef     }
2732f9f9b87SWludzik, Jozef 
274e2362796SWludzik, Jozef     addReport(reportParams);
275e2362796SWludzik, Jozef     sut->removeReport(&reportMock);
276e2362796SWludzik, Jozef     sut->removeReport(&reportMock);
2772f9f9b87SWludzik, Jozef     checkPoint.Call("end");
2782f9f9b87SWludzik, Jozef }
279e2362796SWludzik, Jozef 
280d960e1f3SWludzik, Jozef TEST_F(TestReportManager, updateReportCallsUpdateReadingsForExistReport)
281d960e1f3SWludzik, Jozef {
282d960e1f3SWludzik, Jozef     reportFactoryMock.expectMake(_, reportParams, Ref(*sut), Ref(storageMock))
283d960e1f3SWludzik, Jozef         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
284d960e1f3SWludzik, Jozef     EXPECT_CALL(reportMock, updateReadings());
285d960e1f3SWludzik, Jozef 
286d960e1f3SWludzik, Jozef     addReport(reportParams);
287d960e1f3SWludzik, Jozef     sut->updateReport(reportParams.reportName());
288d960e1f3SWludzik, Jozef }
289d960e1f3SWludzik, Jozef 
290d960e1f3SWludzik, Jozef TEST_F(TestReportManager, updateReportDoNothingIfReportDoesNotExist)
291d960e1f3SWludzik, Jozef {
292d960e1f3SWludzik, Jozef     reportFactoryMock.expectMake(_, reportParams, Ref(*sut), Ref(storageMock))
293d960e1f3SWludzik, Jozef         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
294d960e1f3SWludzik, Jozef     EXPECT_CALL(reportMock, updateReadings()).Times(0);
295d960e1f3SWludzik, Jozef 
296d960e1f3SWludzik, Jozef     addReport(reportParams);
297d960e1f3SWludzik, Jozef     sut->updateReport("NotAReport");
298d960e1f3SWludzik, Jozef }
299d960e1f3SWludzik, Jozef 
300e8fc5751SKrzysztof Grobelny class TestReportManagerWithAggregationOperationType :
301e8fc5751SKrzysztof Grobelny     public TestReportManager,
302e8fc5751SKrzysztof Grobelny     public WithParamInterface<OperationType>
303e8fc5751SKrzysztof Grobelny {
304e8fc5751SKrzysztof Grobelny   public:
305e8fc5751SKrzysztof Grobelny     OperationType operationType = GetParam();
306e8fc5751SKrzysztof Grobelny };
307e8fc5751SKrzysztof Grobelny 
308e8fc5751SKrzysztof Grobelny INSTANTIATE_TEST_SUITE_P(_, TestReportManagerWithAggregationOperationType,
309e8fc5751SKrzysztof Grobelny                          Values(OperationType::single, OperationType::max,
310e8fc5751SKrzysztof Grobelny                                 OperationType::min, OperationType::avg,
311e8fc5751SKrzysztof Grobelny                                 OperationType::sum));
312e8fc5751SKrzysztof Grobelny 
313e8fc5751SKrzysztof Grobelny TEST_P(TestReportManagerWithAggregationOperationType,
314e8fc5751SKrzysztof Grobelny        addReportWithDifferentOperationTypes)
315e8fc5751SKrzysztof Grobelny {
316e8fc5751SKrzysztof Grobelny     reportParams.readingParameters(
317e8fc5751SKrzysztof Grobelny         {{{sdbusplus::message::object_path(
318e8fc5751SKrzysztof Grobelny               "/xyz/openbmc_project/sensors/power/p1")},
319e8fc5751SKrzysztof Grobelny           utils::enumToString(operationType),
320e8fc5751SKrzysztof Grobelny           "MetricId1",
3219f9ff90aSKrzysztof Grobelny           "Metadata1"}});
322e8fc5751SKrzysztof Grobelny 
323e8fc5751SKrzysztof Grobelny     reportFactoryMock.expectMake(_, reportParams, Ref(*sut), Ref(storageMock))
324e8fc5751SKrzysztof Grobelny         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
325e8fc5751SKrzysztof Grobelny 
326e8fc5751SKrzysztof Grobelny     auto [ec, path] = addReport(reportParams);
327*32859b63SKarol Niczyj 
328e8fc5751SKrzysztof Grobelny     EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
329e8fc5751SKrzysztof Grobelny     EXPECT_THAT(path, Eq("/"s + reportParams.reportName()));
330e8fc5751SKrzysztof Grobelny }
331e8fc5751SKrzysztof Grobelny 
332e2362796SWludzik, Jozef class TestReportManagerStorage : public TestReportManager
333e2362796SWludzik, Jozef {
334e2362796SWludzik, Jozef   public:
335e2362796SWludzik, Jozef     using FilePath = interfaces::JsonStorage::FilePath;
336e2362796SWludzik, Jozef     using DirectoryPath = interfaces::JsonStorage::DirectoryPath;
337e2362796SWludzik, Jozef 
338e2362796SWludzik, Jozef     void SetUp() override
339e2362796SWludzik, Jozef     {
340e2362796SWludzik, Jozef         ON_CALL(storageMock, list())
341e2362796SWludzik, Jozef             .WillByDefault(Return(std::vector<FilePath>{FilePath("report1")}));
342e2362796SWludzik, Jozef         ON_CALL(storageMock, load(FilePath("report1")))
3436ccfcbf5SKrzysztof Grobelny             .WillByDefault(InvokeWithoutArgs([this] { return data; }));
344e2362796SWludzik, Jozef     }
345e2362796SWludzik, Jozef 
346e2362796SWludzik, Jozef     void makeReportManager()
347e2362796SWludzik, Jozef     {
348e2362796SWludzik, Jozef         sut = std::make_unique<ReportManager>(std::move(reportFactoryMockPtr),
349e2362796SWludzik, Jozef                                               std::move(storageMockPtr),
350e2362796SWludzik, Jozef                                               DbusEnvironment::getObjServer());
351e2362796SWludzik, Jozef     }
352e2362796SWludzik, Jozef 
353d2238194SKrzysztof Grobelny     static std::vector<LabeledMetricParameters>
354d2238194SKrzysztof Grobelny         convertToLabeled(const ReadingParameters& params)
355d2238194SKrzysztof Grobelny     {
356d2238194SKrzysztof Grobelny         return utils::transform(params, [](const auto& item) {
357d2238194SKrzysztof Grobelny             return LabeledMetricParameters(
358e8fc5751SKrzysztof Grobelny                 LabeledSensorParameters("service", std::get<0>(item)),
359e8fc5751SKrzysztof Grobelny                 utils::stringToOperationType(std::get<1>(item)),
3609f9ff90aSKrzysztof Grobelny                 std::get<2>(item), std::get<3>(item));
361d2238194SKrzysztof Grobelny         });
362d2238194SKrzysztof Grobelny     }
363d2238194SKrzysztof Grobelny 
364e2362796SWludzik, Jozef     nlohmann::json data = nlohmann::json{
365e2362796SWludzik, Jozef         {"Version", Report::reportVersion},
366e2362796SWludzik, Jozef         {"Name", reportParams.reportName()},
367e2362796SWludzik, Jozef         {"ReportingType", reportParams.reportingType()},
368e2362796SWludzik, Jozef         {"EmitsReadingsUpdate", reportParams.emitReadingUpdate()},
369e2362796SWludzik, Jozef         {"LogToMetricReportsCollection",
370e2362796SWludzik, Jozef          reportParams.logToMetricReportCollection()},
371e2362796SWludzik, Jozef         {"Interval", reportParams.interval().count()},
372e2362796SWludzik, Jozef         {"ReadingParameters",
373d2238194SKrzysztof Grobelny          convertToLabeled(reportParams.readingParameters())}};
374e2362796SWludzik, Jozef };
375e2362796SWludzik, Jozef 
376e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage, reportManagerCtorAddReportFromStorage)
377e2362796SWludzik, Jozef {
378d2238194SKrzysztof Grobelny     reportFactoryMock.expectMake(
379d2238194SKrzysztof Grobelny         reportParams, _, Ref(storageMock),
380d2238194SKrzysztof Grobelny         ElementsAreArray(convertToLabeled(reportParams.readingParameters())));
381e2362796SWludzik, Jozef 
382e2362796SWludzik, Jozef     makeReportManager();
383e2362796SWludzik, Jozef }
384e2362796SWludzik, Jozef 
385e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage,
386e2362796SWludzik, Jozef        reportManagerCtorRemoveFileIfVersionDoesNotMatch)
387e2362796SWludzik, Jozef {
388e2362796SWludzik, Jozef     data["Version"] = Report::reportVersion - 1;
389e2362796SWludzik, Jozef 
390e2362796SWludzik, Jozef     EXPECT_CALL(storageMock, remove(FilePath("report1")));
391e2362796SWludzik, Jozef 
392e2362796SWludzik, Jozef     makeReportManager();
393e2362796SWludzik, Jozef }
394e2362796SWludzik, Jozef 
395e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage,
396e2362796SWludzik, Jozef        reportManagerCtorRemoveFileIfIntervalHasWrongType)
397e2362796SWludzik, Jozef {
398e2362796SWludzik, Jozef     data["Interval"] = "1000";
399e2362796SWludzik, Jozef 
400e2362796SWludzik, Jozef     EXPECT_CALL(storageMock, remove(FilePath("report1")));
401e2362796SWludzik, Jozef 
402e2362796SWludzik, Jozef     makeReportManager();
403e2362796SWludzik, Jozef }
404