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