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 { 39dcc4e193SKrzysztof Grobelny EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _)) 40dcc4e193SKrzysztof Grobelny .Times(AnyNumber()); 41dcc4e193SKrzysztof 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, 63dcc4e193SKrzysztof Grobelny ReportManager::reportManagerIfaceName, "AddReportFutureVersion", 64e2362796SWludzik, Jozef params.reportName(), params.reportingType(), 65e2362796SWludzik, Jozef params.emitReadingUpdate(), params.logToMetricReportCollection(), 66dcc4e193SKrzysztof Grobelny params.interval().count(), 67dcc4e193SKrzysztof 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, 80dcc4e193SKrzysztof Grobelny [&propertyPromise](const boost::system::error_code& ec, T t) { 810e7ae5dbSEd Tanous if (ec) 820e7ae5dbSEd Tanous { 83dcc4e193SKrzysztof 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"), 105dcc4e193SKrzysztof 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 { 116dcc4e193SKrzysztof Grobelny EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _)); 117dcc4e193SKrzysztof 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); 130dcc4e193SKrzysztof 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 { 140dcc4e193SKrzysztof 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 { 154dcc4e193SKrzysztof 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 { 167dcc4e193SKrzysztof 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 { 181dcc4e193SKrzysztof 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 { 194dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock)) 195bc766b4dSWludzik, Jozef .Times(0); 196bc766b4dSWludzik, Jozef 197dcc4e193SKrzysztof Grobelny auto metricParams = reportParams.metricParameters(); 198bc766b4dSWludzik, Jozef for (size_t i = 0; i < ReportManager::maxReadingParams + 1; i++) 199bc766b4dSWludzik, Jozef { 200dcc4e193SKrzysztof Grobelny metricParams.push_back(metricParams.front()); 201bc766b4dSWludzik, Jozef } 202dcc4e193SKrzysztof 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 { 212dcc4e193SKrzysztof 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; 235dcc4e193SKrzysztof Grobelny EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _)); 236dcc4e193SKrzysztof 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; 263dcc4e193SKrzysztof Grobelny EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _)); 264dcc4e193SKrzysztof 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 { 278dcc4e193SKrzysztof 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 { 288dcc4e193SKrzysztof 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 { 312dcc4e193SKrzysztof Grobelny reportParams.metricParameters( 313dcc4e193SKrzysztof Grobelny std::vector<LabeledMetricParameters>{{LabeledMetricParameters{ 314dcc4e193SKrzysztof Grobelny {LabeledSensorParameters{"Service", 315dcc4e193SKrzysztof Grobelny "/xyz/openbmc_project/sensors/power/p1"}}, 316dcc4e193SKrzysztof Grobelny operationType, 317e8fc5751SKrzysztof Grobelny "MetricId1", 318dcc4e193SKrzysztof Grobelny "Metadata1", 319dcc4e193SKrzysztof Grobelny CollectionTimeScope::point, 320dcc4e193SKrzysztof Grobelny CollectionDuration(Milliseconds(0u))}}}); 321e8fc5751SKrzysztof Grobelny 322dcc4e193SKrzysztof 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 { 339dcc4e193SKrzysztof Grobelny EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _)).Times(0); 340dcc4e193SKrzysztof 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{ 355*7e098e93SLukasz Kazmierczak {"Enabled", reportParams.enabled()}, 356e2362796SWludzik, Jozef {"Version", Report::reportVersion}, 357e2362796SWludzik, Jozef {"Name", reportParams.reportName()}, 358e2362796SWludzik, Jozef {"ReportingType", reportParams.reportingType()}, 359e2362796SWludzik, Jozef {"EmitsReadingsUpdate", reportParams.emitReadingUpdate()}, 360e2362796SWludzik, Jozef {"LogToMetricReportsCollection", 361e2362796SWludzik, Jozef reportParams.logToMetricReportCollection()}, 362e2362796SWludzik, Jozef {"Interval", reportParams.interval().count()}, 363dcc4e193SKrzysztof Grobelny {"ReadingParameters", reportParams.metricParameters()}}; 364e2362796SWludzik, Jozef }; 365e2362796SWludzik, Jozef 366e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage, reportManagerCtorAddReportFromStorage) 367e2362796SWludzik, Jozef { 368dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(reportParams, _, Ref(storageMock)); 369e2362796SWludzik, Jozef 370e2362796SWludzik, Jozef makeReportManager(); 371e2362796SWludzik, Jozef } 372e2362796SWludzik, Jozef 373e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage, 374e2362796SWludzik, Jozef reportManagerCtorRemoveFileIfVersionDoesNotMatch) 375e2362796SWludzik, Jozef { 376e2362796SWludzik, Jozef data["Version"] = Report::reportVersion - 1; 377e2362796SWludzik, Jozef 378e2362796SWludzik, Jozef EXPECT_CALL(storageMock, remove(FilePath("report1"))); 379e2362796SWludzik, Jozef 380e2362796SWludzik, Jozef makeReportManager(); 381e2362796SWludzik, Jozef } 382e2362796SWludzik, Jozef 383e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage, 384e2362796SWludzik, Jozef reportManagerCtorRemoveFileIfIntervalHasWrongType) 385e2362796SWludzik, Jozef { 386e2362796SWludzik, Jozef data["Interval"] = "1000"; 387e2362796SWludzik, Jozef 388e2362796SWludzik, Jozef EXPECT_CALL(storageMock, remove(FilePath("report1"))); 389e2362796SWludzik, Jozef 390e2362796SWludzik, Jozef makeReportManager(); 391e2362796SWludzik, Jozef } 392