xref: /openbmc/telemetry/tests/src/test_report_manager.cpp (revision dcc4e1936173a93251a02066432bc2bcbc386240)
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     {
39*dcc4e193SKrzysztof Grobelny         EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _))
40*dcc4e193SKrzysztof Grobelny             .Times(AnyNumber());
41*dcc4e193SKrzysztof Grobelny 
42e2362796SWludzik, Jozef         sut = std::make_unique<ReportManager>(std::move(reportFactoryMockPtr),
43e2362796SWludzik, Jozef                                               std::move(storageMockPtr),
44e2362796SWludzik, Jozef                                               DbusEnvironment::getObjServer());
45e2362796SWludzik, Jozef     }
46e2362796SWludzik, Jozef 
472f9f9b87SWludzik, Jozef     void TearDown() override
482f9f9b87SWludzik, Jozef     {
492f9f9b87SWludzik, Jozef         DbusEnvironment::synchronizeIoc();
502f9f9b87SWludzik, Jozef     }
512f9f9b87SWludzik, Jozef 
522f9f9b87SWludzik, Jozef     std::pair<boost::system::error_code, std::string>
53e2362796SWludzik, Jozef         addReport(const ReportParams& params)
542f9f9b87SWludzik, Jozef     {
552f9f9b87SWludzik, Jozef         std::promise<std::pair<boost::system::error_code, std::string>>
562f9f9b87SWludzik, Jozef             addReportPromise;
572f9f9b87SWludzik, Jozef         DbusEnvironment::getBus()->async_method_call(
582f9f9b87SWludzik, Jozef             [&addReportPromise](boost::system::error_code ec,
592f9f9b87SWludzik, Jozef                                 const std::string& path) {
602f9f9b87SWludzik, Jozef                 addReportPromise.set_value({ec, path});
612f9f9b87SWludzik, Jozef             },
622f9f9b87SWludzik, Jozef             DbusEnvironment::serviceName(), ReportManager::reportManagerPath,
63*dcc4e193SKrzysztof Grobelny             ReportManager::reportManagerIfaceName, "AddReportFutureVersion",
64e2362796SWludzik, Jozef             params.reportName(), params.reportingType(),
65e2362796SWludzik, Jozef             params.emitReadingUpdate(), params.logToMetricReportCollection(),
66*dcc4e193SKrzysztof Grobelny             params.interval().count(),
67*dcc4e193SKrzysztof Grobelny             toReadingParameters(params.metricParameters()));
68f32f6fefSKrzysztof Grobelny         return DbusEnvironment::waitForFuture(addReportPromise.get_future());
692f9f9b87SWludzik, Jozef     }
702f9f9b87SWludzik, Jozef 
712f9f9b87SWludzik, Jozef     template <class T>
722f9f9b87SWludzik, Jozef     static T getProperty(std::string property)
732f9f9b87SWludzik, Jozef     {
740e7ae5dbSEd Tanous         auto propertyPromise = std::promise<T>();
750e7ae5dbSEd Tanous         auto propertyFuture = propertyPromise.get_future();
762f9f9b87SWludzik, Jozef         sdbusplus::asio::getProperty<T>(
772f9f9b87SWludzik, Jozef             *DbusEnvironment::getBus(), DbusEnvironment::serviceName(),
782f9f9b87SWludzik, Jozef             ReportManager::reportManagerPath,
792f9f9b87SWludzik, Jozef             ReportManager::reportManagerIfaceName, property,
80*dcc4e193SKrzysztof Grobelny             [&propertyPromise](const boost::system::error_code& ec, T t) {
810e7ae5dbSEd Tanous                 if (ec)
820e7ae5dbSEd Tanous                 {
83*dcc4e193SKrzysztof Grobelny                     utils::setException(propertyPromise, "Get property failed");
840e7ae5dbSEd Tanous                     return;
850e7ae5dbSEd Tanous                 }
860e7ae5dbSEd Tanous                 propertyPromise.set_value(t);
870e7ae5dbSEd Tanous             });
880e7ae5dbSEd Tanous         return DbusEnvironment::waitForFuture(std::move(propertyFuture));
892f9f9b87SWludzik, Jozef     }
9032859b63SKarol Niczyj 
9132859b63SKarol Niczyj     static std::string prepareReportNameWithLength(size_t length)
9232859b63SKarol Niczyj     {
9332859b63SKarol Niczyj         std::stringstream reportNameStream;
9432859b63SKarol Niczyj         for (size_t i = 0; i < length; ++i)
9532859b63SKarol Niczyj         {
9632859b63SKarol Niczyj             reportNameStream << "z";
9732859b63SKarol Niczyj         }
9832859b63SKarol Niczyj         return reportNameStream.str();
9932859b63SKarol Niczyj     }
1002f9f9b87SWludzik, Jozef };
1012f9f9b87SWludzik, Jozef 
1022f9f9b87SWludzik, Jozef TEST_F(TestReportManager, minInterval)
1032f9f9b87SWludzik, Jozef {
1042f9f9b87SWludzik, Jozef     EXPECT_THAT(getProperty<uint64_t>("MinInterval"),
105*dcc4e193SKrzysztof Grobelny                 Eq(ReportManager::minInterval.count()));
1062f9f9b87SWludzik, Jozef }
1072f9f9b87SWludzik, Jozef 
1082f9f9b87SWludzik, Jozef TEST_F(TestReportManager, maxReports)
1092f9f9b87SWludzik, Jozef {
110503c1589SWludzik, Jozef     EXPECT_THAT(getProperty<size_t>("MaxReports"),
1112f9f9b87SWludzik, Jozef                 Eq(ReportManager::maxReports));
1122f9f9b87SWludzik, Jozef }
1132f9f9b87SWludzik, Jozef 
1142f9f9b87SWludzik, Jozef TEST_F(TestReportManager, addReport)
1152f9f9b87SWludzik, Jozef {
116*dcc4e193SKrzysztof Grobelny     EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _));
117*dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
1182f9f9b87SWludzik, Jozef         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
1192f9f9b87SWludzik, Jozef 
120e2362796SWludzik, Jozef     auto [ec, path] = addReport(reportParams);
1212f9f9b87SWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
1222f9f9b87SWludzik, Jozef     EXPECT_THAT(path, Eq(reportMock.getPath()));
1232f9f9b87SWludzik, Jozef }
1242f9f9b87SWludzik, Jozef 
12532859b63SKarol Niczyj TEST_F(TestReportManager, addReportWithMaxLengthName)
12632859b63SKarol Niczyj {
12732859b63SKarol Niczyj     std::string reportName =
12832859b63SKarol Niczyj         prepareReportNameWithLength(ReportManager::maxReportNameLength);
12932859b63SKarol Niczyj     reportParams.reportName(reportName);
130*dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock));
13132859b63SKarol Niczyj 
13232859b63SKarol Niczyj     auto [ec, path] = addReport(reportParams);
13332859b63SKarol Niczyj 
13432859b63SKarol Niczyj     EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
13532859b63SKarol Niczyj     EXPECT_THAT(path, Eq("/"s + reportName));
13632859b63SKarol Niczyj }
13732859b63SKarol Niczyj 
13832859b63SKarol Niczyj TEST_F(TestReportManager, DISABLED_failToAddReportWithTooLongName)
13932859b63SKarol Niczyj {
140*dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock))
14132859b63SKarol Niczyj         .Times(0);
14232859b63SKarol Niczyj 
14332859b63SKarol Niczyj     reportParams.reportName(
14432859b63SKarol Niczyj         prepareReportNameWithLength(ReportManager::maxReportNameLength + 1));
14532859b63SKarol Niczyj 
14632859b63SKarol Niczyj     auto [ec, path] = addReport(reportParams);
14732859b63SKarol Niczyj 
14832859b63SKarol Niczyj     EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument));
14932859b63SKarol Niczyj     EXPECT_THAT(path, Eq(std::string()));
15032859b63SKarol Niczyj }
15132859b63SKarol Niczyj 
152e2362796SWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportTwice)
1532f9f9b87SWludzik, Jozef {
154*dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
155d2238194SKrzysztof Grobelny         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
1562f9f9b87SWludzik, Jozef 
157e2362796SWludzik, Jozef     addReport(reportParams);
1582f9f9b87SWludzik, Jozef 
159e2362796SWludzik, Jozef     auto [ec, path] = addReport(reportParams);
16032859b63SKarol Niczyj 
1612f9f9b87SWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::file_exists));
1622f9f9b87SWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
1632f9f9b87SWludzik, Jozef }
1642f9f9b87SWludzik, Jozef 
165e2362796SWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWithInvalidInterval)
1662f9f9b87SWludzik, Jozef {
167*dcc4e193SKrzysztof 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);
17432859b63SKarol 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 {
181*dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock))
182bc766b4dSWludzik, Jozef         .Times(0);
183bc766b4dSWludzik, Jozef 
184bc766b4dSWludzik, Jozef     reportParams.reportingType("Invalid");
185bc766b4dSWludzik, Jozef 
186bc766b4dSWludzik, Jozef     auto [ec, path] = addReport(reportParams);
18732859b63SKarol Niczyj 
188bc766b4dSWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument));
189bc766b4dSWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
190bc766b4dSWludzik, Jozef }
191bc766b4dSWludzik, Jozef 
192bc766b4dSWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWithMoreSensorsThanExpected)
193bc766b4dSWludzik, Jozef {
194*dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock))
195bc766b4dSWludzik, Jozef         .Times(0);
196bc766b4dSWludzik, Jozef 
197*dcc4e193SKrzysztof Grobelny     auto metricParams = reportParams.metricParameters();
198bc766b4dSWludzik, Jozef     for (size_t i = 0; i < ReportManager::maxReadingParams + 1; i++)
199bc766b4dSWludzik, Jozef     {
200*dcc4e193SKrzysztof Grobelny         metricParams.push_back(metricParams.front());
201bc766b4dSWludzik, Jozef     }
202*dcc4e193SKrzysztof Grobelny     reportParams.metricParameters(std::move(metricParams));
203bc766b4dSWludzik, Jozef 
204bc766b4dSWludzik, Jozef     auto [ec, path] = addReport(reportParams);
20532859b63SKarol Niczyj 
206bc766b4dSWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::argument_list_too_long));
207bc766b4dSWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
208bc766b4dSWludzik, Jozef }
209bc766b4dSWludzik, Jozef 
210e2362796SWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWhenMaxReportIsReached)
2112f9f9b87SWludzik, Jozef {
212*dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock))
2132f9f9b87SWludzik, Jozef         .Times(ReportManager::maxReports);
2142f9f9b87SWludzik, Jozef 
2152f9f9b87SWludzik, Jozef     for (size_t i = 0; i < ReportManager::maxReports; i++)
2162f9f9b87SWludzik, Jozef     {
217e2362796SWludzik, Jozef         reportParams.reportName(reportParams.reportName() + std::to_string(i));
2182f9f9b87SWludzik, Jozef 
219e2362796SWludzik, Jozef         auto [ec, path] = addReport(reportParams);
2202f9f9b87SWludzik, Jozef         EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
2212f9f9b87SWludzik, Jozef     }
2222f9f9b87SWludzik, Jozef 
223e2362796SWludzik, Jozef     reportParams.reportName(reportParams.reportName() +
224e2362796SWludzik, Jozef                             std::to_string(ReportManager::maxReports));
225e2362796SWludzik, Jozef     auto [ec, path] = addReport(reportParams);
22632859b63SKarol Niczyj 
2272f9f9b87SWludzik, Jozef     EXPECT_THAT(ec.value(), Eq(boost::system::errc::too_many_files_open));
2282f9f9b87SWludzik, Jozef     EXPECT_THAT(path, Eq(std::string()));
2292f9f9b87SWludzik, Jozef }
2302f9f9b87SWludzik, Jozef 
2312f9f9b87SWludzik, Jozef TEST_F(TestReportManager, removeReport)
2322f9f9b87SWludzik, Jozef {
2332f9f9b87SWludzik, Jozef     {
2342f9f9b87SWludzik, Jozef         InSequence seq;
235*dcc4e193SKrzysztof Grobelny         EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _));
236*dcc4e193SKrzysztof Grobelny         reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
2372f9f9b87SWludzik, Jozef             .WillOnce(Return(ByMove(std::move(reportMockPtr))));
2382f9f9b87SWludzik, Jozef         EXPECT_CALL(reportMock, Die());
2392f9f9b87SWludzik, Jozef         EXPECT_CALL(checkPoint, Call("end"));
2402f9f9b87SWludzik, Jozef     }
2412f9f9b87SWludzik, Jozef 
242e2362796SWludzik, Jozef     addReport(reportParams);
243e2362796SWludzik, Jozef     sut->removeReport(&reportMock);
2442f9f9b87SWludzik, Jozef     checkPoint.Call("end");
2452f9f9b87SWludzik, Jozef }
2462f9f9b87SWludzik, Jozef 
2472f9f9b87SWludzik, Jozef TEST_F(TestReportManager, removingReportThatIsNotInContainerHasNoEffect)
2482f9f9b87SWludzik, Jozef {
2492f9f9b87SWludzik, Jozef     {
2502f9f9b87SWludzik, Jozef         InSequence seq;
2512f9f9b87SWludzik, Jozef         EXPECT_CALL(checkPoint, Call("end"));
2522f9f9b87SWludzik, Jozef         EXPECT_CALL(reportMock, Die());
2532f9f9b87SWludzik, Jozef     }
2542f9f9b87SWludzik, Jozef 
255e2362796SWludzik, Jozef     sut->removeReport(&reportMock);
2562f9f9b87SWludzik, Jozef     checkPoint.Call("end");
2572f9f9b87SWludzik, Jozef }
2582f9f9b87SWludzik, Jozef 
2592f9f9b87SWludzik, Jozef TEST_F(TestReportManager, removingSameReportTwiceHasNoSideEffect)
2602f9f9b87SWludzik, Jozef {
2612f9f9b87SWludzik, Jozef     {
2622f9f9b87SWludzik, Jozef         InSequence seq;
263*dcc4e193SKrzysztof Grobelny         EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _));
264*dcc4e193SKrzysztof Grobelny         reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
2652f9f9b87SWludzik, Jozef             .WillOnce(Return(ByMove(std::move(reportMockPtr))));
2662f9f9b87SWludzik, Jozef         EXPECT_CALL(reportMock, Die());
2672f9f9b87SWludzik, Jozef         EXPECT_CALL(checkPoint, Call("end"));
2682f9f9b87SWludzik, Jozef     }
2692f9f9b87SWludzik, Jozef 
270e2362796SWludzik, Jozef     addReport(reportParams);
271e2362796SWludzik, Jozef     sut->removeReport(&reportMock);
272e2362796SWludzik, Jozef     sut->removeReport(&reportMock);
2732f9f9b87SWludzik, Jozef     checkPoint.Call("end");
2742f9f9b87SWludzik, Jozef }
275e2362796SWludzik, Jozef 
276d960e1f3SWludzik, Jozef TEST_F(TestReportManager, updateReportCallsUpdateReadingsForExistReport)
277d960e1f3SWludzik, Jozef {
278*dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
279d960e1f3SWludzik, Jozef         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
280d960e1f3SWludzik, Jozef     EXPECT_CALL(reportMock, updateReadings());
281d960e1f3SWludzik, Jozef 
282d960e1f3SWludzik, Jozef     addReport(reportParams);
283d960e1f3SWludzik, Jozef     sut->updateReport(reportParams.reportName());
284d960e1f3SWludzik, Jozef }
285d960e1f3SWludzik, Jozef 
286d960e1f3SWludzik, Jozef TEST_F(TestReportManager, updateReportDoNothingIfReportDoesNotExist)
287d960e1f3SWludzik, Jozef {
288*dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
289d960e1f3SWludzik, Jozef         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
290d960e1f3SWludzik, Jozef     EXPECT_CALL(reportMock, updateReadings()).Times(0);
291d960e1f3SWludzik, Jozef 
292d960e1f3SWludzik, Jozef     addReport(reportParams);
293d960e1f3SWludzik, Jozef     sut->updateReport("NotAReport");
294d960e1f3SWludzik, Jozef }
295d960e1f3SWludzik, Jozef 
296e8fc5751SKrzysztof Grobelny class TestReportManagerWithAggregationOperationType :
297e8fc5751SKrzysztof Grobelny     public TestReportManager,
298e8fc5751SKrzysztof Grobelny     public WithParamInterface<OperationType>
299e8fc5751SKrzysztof Grobelny {
300e8fc5751SKrzysztof Grobelny   public:
301e8fc5751SKrzysztof Grobelny     OperationType operationType = GetParam();
302e8fc5751SKrzysztof Grobelny };
303e8fc5751SKrzysztof Grobelny 
304e8fc5751SKrzysztof Grobelny INSTANTIATE_TEST_SUITE_P(_, TestReportManagerWithAggregationOperationType,
305e8fc5751SKrzysztof Grobelny                          Values(OperationType::single, OperationType::max,
306e8fc5751SKrzysztof Grobelny                                 OperationType::min, OperationType::avg,
307e8fc5751SKrzysztof Grobelny                                 OperationType::sum));
308e8fc5751SKrzysztof Grobelny 
309e8fc5751SKrzysztof Grobelny TEST_P(TestReportManagerWithAggregationOperationType,
310e8fc5751SKrzysztof Grobelny        addReportWithDifferentOperationTypes)
311e8fc5751SKrzysztof Grobelny {
312*dcc4e193SKrzysztof Grobelny     reportParams.metricParameters(
313*dcc4e193SKrzysztof Grobelny         std::vector<LabeledMetricParameters>{{LabeledMetricParameters{
314*dcc4e193SKrzysztof Grobelny             {LabeledSensorParameters{"Service",
315*dcc4e193SKrzysztof Grobelny                                      "/xyz/openbmc_project/sensors/power/p1"}},
316*dcc4e193SKrzysztof Grobelny             operationType,
317e8fc5751SKrzysztof Grobelny             "MetricId1",
318*dcc4e193SKrzysztof Grobelny             "Metadata1",
319*dcc4e193SKrzysztof Grobelny             CollectionTimeScope::point,
320*dcc4e193SKrzysztof Grobelny             CollectionDuration(Milliseconds(0u))}}});
321e8fc5751SKrzysztof Grobelny 
322*dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock))
323e8fc5751SKrzysztof Grobelny         .WillOnce(Return(ByMove(std::move(reportMockPtr))));
324e8fc5751SKrzysztof Grobelny 
325e8fc5751SKrzysztof Grobelny     auto [ec, path] = addReport(reportParams);
32632859b63SKarol Niczyj 
327e8fc5751SKrzysztof Grobelny     EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
328e8fc5751SKrzysztof Grobelny     EXPECT_THAT(path, Eq("/"s + reportParams.reportName()));
329e8fc5751SKrzysztof Grobelny }
330e8fc5751SKrzysztof Grobelny 
331e2362796SWludzik, Jozef class TestReportManagerStorage : public TestReportManager
332e2362796SWludzik, Jozef {
333e2362796SWludzik, Jozef   public:
334e2362796SWludzik, Jozef     using FilePath = interfaces::JsonStorage::FilePath;
335e2362796SWludzik, Jozef     using DirectoryPath = interfaces::JsonStorage::DirectoryPath;
336e2362796SWludzik, Jozef 
337e2362796SWludzik, Jozef     void SetUp() override
338e2362796SWludzik, Jozef     {
339*dcc4e193SKrzysztof Grobelny         EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _)).Times(0);
340*dcc4e193SKrzysztof Grobelny 
341e2362796SWludzik, Jozef         ON_CALL(storageMock, list())
342e2362796SWludzik, Jozef             .WillByDefault(Return(std::vector<FilePath>{FilePath("report1")}));
343e2362796SWludzik, Jozef         ON_CALL(storageMock, load(FilePath("report1")))
3446ccfcbf5SKrzysztof Grobelny             .WillByDefault(InvokeWithoutArgs([this] { return data; }));
345e2362796SWludzik, Jozef     }
346e2362796SWludzik, Jozef 
347e2362796SWludzik, Jozef     void makeReportManager()
348e2362796SWludzik, Jozef     {
349e2362796SWludzik, Jozef         sut = std::make_unique<ReportManager>(std::move(reportFactoryMockPtr),
350e2362796SWludzik, Jozef                                               std::move(storageMockPtr),
351e2362796SWludzik, Jozef                                               DbusEnvironment::getObjServer());
352e2362796SWludzik, Jozef     }
353e2362796SWludzik, Jozef 
354e2362796SWludzik, Jozef     nlohmann::json data = nlohmann::json{
355e2362796SWludzik, Jozef         {"Version", Report::reportVersion},
356e2362796SWludzik, Jozef         {"Name", reportParams.reportName()},
357e2362796SWludzik, Jozef         {"ReportingType", reportParams.reportingType()},
358e2362796SWludzik, Jozef         {"EmitsReadingsUpdate", reportParams.emitReadingUpdate()},
359e2362796SWludzik, Jozef         {"LogToMetricReportsCollection",
360e2362796SWludzik, Jozef          reportParams.logToMetricReportCollection()},
361e2362796SWludzik, Jozef         {"Interval", reportParams.interval().count()},
362*dcc4e193SKrzysztof Grobelny         {"ReadingParameters", reportParams.metricParameters()}};
363e2362796SWludzik, Jozef };
364e2362796SWludzik, Jozef 
365e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage, reportManagerCtorAddReportFromStorage)
366e2362796SWludzik, Jozef {
367*dcc4e193SKrzysztof Grobelny     reportFactoryMock.expectMake(reportParams, _, Ref(storageMock));
368e2362796SWludzik, Jozef 
369e2362796SWludzik, Jozef     makeReportManager();
370e2362796SWludzik, Jozef }
371e2362796SWludzik, Jozef 
372e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage,
373e2362796SWludzik, Jozef        reportManagerCtorRemoveFileIfVersionDoesNotMatch)
374e2362796SWludzik, Jozef {
375e2362796SWludzik, Jozef     data["Version"] = Report::reportVersion - 1;
376e2362796SWludzik, Jozef 
377e2362796SWludzik, Jozef     EXPECT_CALL(storageMock, remove(FilePath("report1")));
378e2362796SWludzik, Jozef 
379e2362796SWludzik, Jozef     makeReportManager();
380e2362796SWludzik, Jozef }
381e2362796SWludzik, Jozef 
382e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage,
383e2362796SWludzik, Jozef        reportManagerCtorRemoveFileIfIntervalHasWrongType)
384e2362796SWludzik, Jozef {
385e2362796SWludzik, Jozef     data["Interval"] = "1000";
386e2362796SWludzik, Jozef 
387e2362796SWludzik, Jozef     EXPECT_CALL(storageMock, remove(FilePath("report1")));
388e2362796SWludzik, Jozef 
389e2362796SWludzik, Jozef     makeReportManager();
390e2362796SWludzik, Jozef }
391