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 = 29b8cc78ddSKrzysztof Grobelny std::make_unique<NiceMock<ReportMock>>(reportParams.reportId()); 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 5151497a0cSKrzysztof Grobelny template <class... Args> 5251497a0cSKrzysztof Grobelny requires(sizeof...(Args) > 1) 5351497a0cSKrzysztof Grobelny std::pair<boost::system::error_code, std::string> addReport( 5451497a0cSKrzysztof 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", 6551497a0cSKrzysztof Grobelny std::forward<Args>(args)...); 66f32f6fefSKrzysztof Grobelny return DbusEnvironment::waitForFuture(addReportPromise.get_future()); 672f9f9b87SWludzik, Jozef } 682f9f9b87SWludzik, Jozef 6951497a0cSKrzysztof Grobelny auto addReport(const ReportParams& params) 7051497a0cSKrzysztof Grobelny { 71b8cc78ddSKrzysztof Grobelny return addReport(params.reportId(), params.reportName(), 72b8cc78ddSKrzysztof Grobelny utils::enumToString(params.reportingType()), 73b8cc78ddSKrzysztof Grobelny utils::enumToString(params.reportUpdates()), 74b8cc78ddSKrzysztof Grobelny params.appendLimit(), 75b8cc78ddSKrzysztof Grobelny utils::transform(params.reportActions(), 76b8cc78ddSKrzysztof Grobelny [](const auto v) { 77b8cc78ddSKrzysztof Grobelny return utils::enumToString(v); 78b8cc78ddSKrzysztof Grobelny }), 7951497a0cSKrzysztof Grobelny params.interval().count(), 8051497a0cSKrzysztof Grobelny toReadingParameters(params.metricParameters())); 8151497a0cSKrzysztof Grobelny } 8251497a0cSKrzysztof Grobelny 832f9f9b87SWludzik, Jozef template <class T> 84e28aa53dSSzymon Dompke static T getProperty(const std::string& property) 852f9f9b87SWludzik, Jozef { 86e28aa53dSSzymon Dompke return DbusEnvironment::getProperty<T>( 872f9f9b87SWludzik, Jozef ReportManager::reportManagerPath, 88e28aa53dSSzymon Dompke ReportManager::reportManagerIfaceName, property); 8932859b63SKarol Niczyj } 902f9f9b87SWludzik, Jozef }; 912f9f9b87SWludzik, Jozef 922f9f9b87SWludzik, Jozef TEST_F(TestReportManager, minInterval) 932f9f9b87SWludzik, Jozef { 942f9f9b87SWludzik, Jozef EXPECT_THAT(getProperty<uint64_t>("MinInterval"), 95dcc4e193SKrzysztof Grobelny Eq(ReportManager::minInterval.count())); 962f9f9b87SWludzik, Jozef } 972f9f9b87SWludzik, Jozef 982f9f9b87SWludzik, Jozef TEST_F(TestReportManager, maxReports) 992f9f9b87SWludzik, Jozef { 100503c1589SWludzik, Jozef EXPECT_THAT(getProperty<size_t>("MaxReports"), 1012f9f9b87SWludzik, Jozef Eq(ReportManager::maxReports)); 1022f9f9b87SWludzik, Jozef } 1032f9f9b87SWludzik, Jozef 1042f9f9b87SWludzik, Jozef TEST_F(TestReportManager, addReport) 1052f9f9b87SWludzik, Jozef { 106dcc4e193SKrzysztof Grobelny EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _)); 107dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock)) 1082f9f9b87SWludzik, Jozef .WillOnce(Return(ByMove(std::move(reportMockPtr)))); 1092f9f9b87SWludzik, Jozef 110e2362796SWludzik, Jozef auto [ec, path] = addReport(reportParams); 1112f9f9b87SWludzik, Jozef EXPECT_THAT(ec.value(), Eq(boost::system::errc::success)); 1122f9f9b87SWludzik, Jozef EXPECT_THAT(path, Eq(reportMock.getPath())); 1132f9f9b87SWludzik, Jozef } 1142f9f9b87SWludzik, Jozef 115b8cc78ddSKrzysztof Grobelny TEST_F(TestReportManager, nameIsUsedToGenerateIdWhenIdIsEmptyInAddReport) 11632859b63SKarol Niczyj { 117b8cc78ddSKrzysztof Grobelny reportParams.reportId("ReportName"); 118b8cc78ddSKrzysztof Grobelny reportParams.reportName("ReportName"); 119b8cc78ddSKrzysztof Grobelny 120b8cc78ddSKrzysztof Grobelny reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock)); 121b8cc78ddSKrzysztof Grobelny 122b8cc78ddSKrzysztof Grobelny auto [ec, path] = addReport(reportParams.reportId("")); 123b8cc78ddSKrzysztof Grobelny 124b8cc78ddSKrzysztof Grobelny EXPECT_THAT(ec.value(), Eq(boost::system::errc::success)); 125b8cc78ddSKrzysztof Grobelny EXPECT_THAT(path, Eq("/ReportName")); 126b8cc78ddSKrzysztof Grobelny } 127b8cc78ddSKrzysztof Grobelny 128b8cc78ddSKrzysztof Grobelny TEST_F(TestReportManager, nameIsUsedToGenerateIdWhenIdIsNamespace) 129b8cc78ddSKrzysztof Grobelny { 130b8cc78ddSKrzysztof Grobelny reportParams.reportId("Prefix/ReportName"); 131b8cc78ddSKrzysztof Grobelny reportParams.reportName("ReportName"); 132b8cc78ddSKrzysztof Grobelny 133b8cc78ddSKrzysztof Grobelny reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock)); 134b8cc78ddSKrzysztof Grobelny 135b8cc78ddSKrzysztof Grobelny auto [ec, path] = addReport(reportParams.reportId("Prefix/")); 136b8cc78ddSKrzysztof Grobelny 137b8cc78ddSKrzysztof Grobelny EXPECT_THAT(ec.value(), Eq(boost::system::errc::success)); 138b8cc78ddSKrzysztof Grobelny EXPECT_THAT(path, Eq("/Prefix/ReportName")); 139b8cc78ddSKrzysztof Grobelny } 140b8cc78ddSKrzysztof Grobelny 141b8cc78ddSKrzysztof Grobelny TEST_F(TestReportManager, addReportWithMaxLengthId) 142b8cc78ddSKrzysztof Grobelny { 143b8cc78ddSKrzysztof Grobelny std::string reportId(ReportManager::maxReportIdLength, 'z'); 144b8cc78ddSKrzysztof Grobelny reportParams.reportId(reportId); 145dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock)); 14632859b63SKarol Niczyj 14732859b63SKarol Niczyj auto [ec, path] = addReport(reportParams); 14832859b63SKarol Niczyj 14932859b63SKarol Niczyj EXPECT_THAT(ec.value(), Eq(boost::system::errc::success)); 150b8cc78ddSKrzysztof Grobelny EXPECT_THAT(path, Eq("/"s + reportId)); 15132859b63SKarol Niczyj } 15232859b63SKarol Niczyj 15332859b63SKarol Niczyj TEST_F(TestReportManager, DISABLED_failToAddReportWithTooLongName) 15432859b63SKarol Niczyj { 155dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock)) 15632859b63SKarol Niczyj .Times(0); 15732859b63SKarol Niczyj 158b8cc78ddSKrzysztof Grobelny reportParams.reportId( 159b8cc78ddSKrzysztof Grobelny std::string(ReportManager::maxReportIdLength + 1, 'z')); 16032859b63SKarol Niczyj 16132859b63SKarol Niczyj auto [ec, path] = addReport(reportParams); 16232859b63SKarol Niczyj 16332859b63SKarol Niczyj EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument)); 16432859b63SKarol Niczyj EXPECT_THAT(path, Eq(std::string())); 16532859b63SKarol Niczyj } 16632859b63SKarol Niczyj 167e2362796SWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportTwice) 1682f9f9b87SWludzik, Jozef { 169dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock)) 170d2238194SKrzysztof Grobelny .WillOnce(Return(ByMove(std::move(reportMockPtr)))); 1712f9f9b87SWludzik, Jozef 172e2362796SWludzik, Jozef addReport(reportParams); 1732f9f9b87SWludzik, Jozef 174e2362796SWludzik, Jozef auto [ec, path] = addReport(reportParams); 17532859b63SKarol Niczyj 1762f9f9b87SWludzik, Jozef EXPECT_THAT(ec.value(), Eq(boost::system::errc::file_exists)); 1772f9f9b87SWludzik, Jozef EXPECT_THAT(path, Eq(std::string())); 1782f9f9b87SWludzik, Jozef } 1792f9f9b87SWludzik, Jozef 180e2362796SWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWithInvalidInterval) 1812f9f9b87SWludzik, Jozef { 182dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock)) 183d2238194SKrzysztof Grobelny .Times(0); 1842f9f9b87SWludzik, Jozef 18551497a0cSKrzysztof Grobelny reportParams.reportingType(ReportingType::periodic); 186e2362796SWludzik, Jozef reportParams.interval(reportParams.interval() - 1ms); 1872f9f9b87SWludzik, Jozef 188e2362796SWludzik, Jozef auto [ec, path] = addReport(reportParams); 18932859b63SKarol Niczyj 1902f9f9b87SWludzik, Jozef EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument)); 1912f9f9b87SWludzik, Jozef EXPECT_THAT(path, Eq(std::string())); 1922f9f9b87SWludzik, Jozef } 1932f9f9b87SWludzik, Jozef 194bc766b4dSWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWithInvalidReportingType) 195bc766b4dSWludzik, Jozef { 196dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock)) 197bc766b4dSWludzik, Jozef .Times(0); 198bc766b4dSWludzik, Jozef 19951497a0cSKrzysztof Grobelny auto [ec, path] = addReport( 20051497a0cSKrzysztof Grobelny reportParams.reportName(), "InvalidReportingType", 20151497a0cSKrzysztof Grobelny utils::transform(reportParams.reportActions(), 20251497a0cSKrzysztof Grobelny [](const auto v) { return utils::enumToString(v); }), 20351497a0cSKrzysztof Grobelny reportParams.interval().count(), 20451497a0cSKrzysztof Grobelny toReadingParameters(reportParams.metricParameters())); 20532859b63SKarol Niczyj 206bc766b4dSWludzik, Jozef EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument)); 207bc766b4dSWludzik, Jozef EXPECT_THAT(path, Eq(std::string())); 208bc766b4dSWludzik, Jozef } 209bc766b4dSWludzik, Jozef 210cd5b0b7eSAnkita Vilas Gawade TEST_F(TestReportManager, 211cd5b0b7eSAnkita Vilas Gawade DISABLED_failToAddReportWithMoreMetricPropertiesThanExpected) 212bc766b4dSWludzik, Jozef { 213dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock)) 214bc766b4dSWludzik, Jozef .Times(0); 215bc766b4dSWludzik, Jozef 216cd5b0b7eSAnkita Vilas Gawade reportParams.metricParameters( 217cd5b0b7eSAnkita Vilas Gawade std::vector<LabeledMetricParameters>{{LabeledMetricParameters{ 218*94f71c51SSzymon Dompke {LabeledSensorInfo{"Service", 219cd5b0b7eSAnkita Vilas Gawade "/xyz/openbmc_project/sensors/power/p1", 220cd5b0b7eSAnkita Vilas Gawade "Metadata1"}}, 221cd5b0b7eSAnkita Vilas Gawade OperationType::single, 222cd5b0b7eSAnkita Vilas Gawade "MetricId1", 223cd5b0b7eSAnkita Vilas Gawade CollectionTimeScope::point, 224cd5b0b7eSAnkita Vilas Gawade CollectionDuration(Milliseconds(0u))}}}); 225cd5b0b7eSAnkita Vilas Gawade 226dcc4e193SKrzysztof Grobelny auto metricParams = reportParams.metricParameters(); 227cd5b0b7eSAnkita Vilas Gawade auto& metricParamsVec = 228cd5b0b7eSAnkita Vilas Gawade metricParams[0].at_label<utils::tstring::SensorPath>(); 229cd5b0b7eSAnkita Vilas Gawade 230cd5b0b7eSAnkita Vilas Gawade for (size_t i = 0; i < ReportManager::maxNumberMetrics; i++) 231bc766b4dSWludzik, Jozef { 232*94f71c51SSzymon Dompke metricParamsVec.emplace_back(LabeledSensorInfo{ 233cd5b0b7eSAnkita Vilas Gawade "Service", "/xyz/openbmc_project/sensors/power/p1", "Metadata1"}); 234bc766b4dSWludzik, Jozef } 235cd5b0b7eSAnkita Vilas Gawade 236dcc4e193SKrzysztof Grobelny reportParams.metricParameters(std::move(metricParams)); 237bc766b4dSWludzik, Jozef 238bc766b4dSWludzik, Jozef auto [ec, path] = addReport(reportParams); 23932859b63SKarol Niczyj 240bc766b4dSWludzik, Jozef EXPECT_THAT(ec.value(), Eq(boost::system::errc::argument_list_too_long)); 241bc766b4dSWludzik, Jozef EXPECT_THAT(path, Eq(std::string())); 242bc766b4dSWludzik, Jozef } 243bc766b4dSWludzik, Jozef 244cd5b0b7eSAnkita Vilas Gawade TEST_F(TestReportManager, DISABLED_failToAddReportWithMoreMetricsThanExpected) 245cd5b0b7eSAnkita Vilas Gawade { 246cd5b0b7eSAnkita Vilas Gawade reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock)) 247cd5b0b7eSAnkita Vilas Gawade .Times(0); 248cd5b0b7eSAnkita Vilas Gawade 249cd5b0b7eSAnkita Vilas Gawade auto metricParams = std::vector<LabeledMetricParameters>{}; 250cd5b0b7eSAnkita Vilas Gawade 251cd5b0b7eSAnkita Vilas Gawade for (size_t i = 0; i < ReportManager::maxNumberMetrics + 1; i++) 252cd5b0b7eSAnkita Vilas Gawade { 253cd5b0b7eSAnkita Vilas Gawade metricParams.emplace_back( 254cd5b0b7eSAnkita Vilas Gawade LabeledMetricParameters{{}, 255cd5b0b7eSAnkita Vilas Gawade OperationType::single, 256cd5b0b7eSAnkita Vilas Gawade "MetricId1", 257cd5b0b7eSAnkita Vilas Gawade CollectionTimeScope::point, 258cd5b0b7eSAnkita Vilas Gawade CollectionDuration(Milliseconds(0u))}); 259cd5b0b7eSAnkita Vilas Gawade } 260cd5b0b7eSAnkita Vilas Gawade 261cd5b0b7eSAnkita Vilas Gawade reportParams.metricParameters(std::move(metricParams)); 262cd5b0b7eSAnkita Vilas Gawade 263cd5b0b7eSAnkita Vilas Gawade auto [ec, path] = addReport(reportParams); 264cd5b0b7eSAnkita Vilas Gawade 265cd5b0b7eSAnkita Vilas Gawade EXPECT_THAT(ec.value(), Eq(boost::system::errc::argument_list_too_long)); 266cd5b0b7eSAnkita Vilas Gawade EXPECT_THAT(path, Eq(std::string())); 267cd5b0b7eSAnkita Vilas Gawade } 268cd5b0b7eSAnkita Vilas Gawade 269cd5b0b7eSAnkita Vilas Gawade TEST_F(TestReportManager, DISABLED_failToAddReportWithAppendLimitGreaterThanMax) 270cd5b0b7eSAnkita Vilas Gawade { 271cd5b0b7eSAnkita Vilas Gawade reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock)) 272cd5b0b7eSAnkita Vilas Gawade .Times(0); 273cd5b0b7eSAnkita Vilas Gawade 274cd5b0b7eSAnkita Vilas Gawade reportParams.appendLimit(ReportManager::maxAppendLimit + 1); 275cd5b0b7eSAnkita Vilas Gawade 276cd5b0b7eSAnkita Vilas Gawade auto [ec, path] = addReport(reportParams); 277cd5b0b7eSAnkita Vilas Gawade 278cd5b0b7eSAnkita Vilas Gawade EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument)); 279cd5b0b7eSAnkita Vilas Gawade EXPECT_THAT(path, Eq(std::string())); 280cd5b0b7eSAnkita Vilas Gawade } 281cd5b0b7eSAnkita Vilas Gawade 282e6c417cfSKrzysztof Grobelny TEST_F(TestReportManager, addReportWithAppendLimitEqualToUint64MaxIsAllowed) 283e6c417cfSKrzysztof Grobelny { 284e6c417cfSKrzysztof Grobelny reportParams.appendLimit(std::numeric_limits<uint64_t>::max()); 285e6c417cfSKrzysztof Grobelny 286e6c417cfSKrzysztof Grobelny EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _)); 287e6c417cfSKrzysztof Grobelny reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock)) 288e6c417cfSKrzysztof Grobelny .WillOnce(Return(ByMove(std::move(reportMockPtr)))); 289e6c417cfSKrzysztof Grobelny 290e6c417cfSKrzysztof Grobelny auto [ec, path] = addReport(reportParams); 291e6c417cfSKrzysztof Grobelny EXPECT_THAT(ec.value(), Eq(boost::system::errc::success)); 292e6c417cfSKrzysztof Grobelny EXPECT_THAT(path, Eq(reportMock.getPath())); 293e6c417cfSKrzysztof Grobelny } 294e6c417cfSKrzysztof Grobelny 295e2362796SWludzik, Jozef TEST_F(TestReportManager, DISABLED_failToAddReportWhenMaxReportIsReached) 2962f9f9b87SWludzik, Jozef { 297dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock)) 2982f9f9b87SWludzik, Jozef .Times(ReportManager::maxReports); 2992f9f9b87SWludzik, Jozef 3002f9f9b87SWludzik, Jozef for (size_t i = 0; i < ReportManager::maxReports; i++) 3012f9f9b87SWludzik, Jozef { 302b8cc78ddSKrzysztof Grobelny reportParams.reportId(reportParams.reportName() + std::to_string(i)); 3032f9f9b87SWludzik, Jozef 304e2362796SWludzik, Jozef auto [ec, path] = addReport(reportParams); 3052f9f9b87SWludzik, Jozef EXPECT_THAT(ec.value(), Eq(boost::system::errc::success)); 3062f9f9b87SWludzik, Jozef } 3072f9f9b87SWludzik, Jozef 308b8cc78ddSKrzysztof Grobelny reportParams.reportId(reportParams.reportName() + 309e2362796SWludzik, Jozef std::to_string(ReportManager::maxReports)); 310e2362796SWludzik, Jozef auto [ec, path] = addReport(reportParams); 31132859b63SKarol Niczyj 3122f9f9b87SWludzik, Jozef EXPECT_THAT(ec.value(), Eq(boost::system::errc::too_many_files_open)); 3132f9f9b87SWludzik, Jozef EXPECT_THAT(path, Eq(std::string())); 3142f9f9b87SWludzik, Jozef } 3152f9f9b87SWludzik, Jozef 3162f9f9b87SWludzik, Jozef TEST_F(TestReportManager, removeReport) 3172f9f9b87SWludzik, Jozef { 3182f9f9b87SWludzik, Jozef { 3192f9f9b87SWludzik, Jozef InSequence seq; 320dcc4e193SKrzysztof Grobelny EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _)); 321dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock)) 3222f9f9b87SWludzik, Jozef .WillOnce(Return(ByMove(std::move(reportMockPtr)))); 3232f9f9b87SWludzik, Jozef EXPECT_CALL(reportMock, Die()); 3242f9f9b87SWludzik, Jozef EXPECT_CALL(checkPoint, Call("end")); 3252f9f9b87SWludzik, Jozef } 3262f9f9b87SWludzik, Jozef 327e2362796SWludzik, Jozef addReport(reportParams); 328e2362796SWludzik, Jozef sut->removeReport(&reportMock); 3292f9f9b87SWludzik, Jozef checkPoint.Call("end"); 3302f9f9b87SWludzik, Jozef } 3312f9f9b87SWludzik, Jozef 3322f9f9b87SWludzik, Jozef TEST_F(TestReportManager, removingReportThatIsNotInContainerHasNoEffect) 3332f9f9b87SWludzik, Jozef { 3342f9f9b87SWludzik, Jozef { 3352f9f9b87SWludzik, Jozef InSequence seq; 3362f9f9b87SWludzik, Jozef EXPECT_CALL(checkPoint, Call("end")); 3372f9f9b87SWludzik, Jozef EXPECT_CALL(reportMock, Die()); 3382f9f9b87SWludzik, Jozef } 3392f9f9b87SWludzik, Jozef 340e2362796SWludzik, Jozef sut->removeReport(&reportMock); 3412f9f9b87SWludzik, Jozef checkPoint.Call("end"); 3422f9f9b87SWludzik, Jozef } 3432f9f9b87SWludzik, Jozef 3442f9f9b87SWludzik, Jozef TEST_F(TestReportManager, removingSameReportTwiceHasNoSideEffect) 3452f9f9b87SWludzik, Jozef { 3462f9f9b87SWludzik, Jozef { 3472f9f9b87SWludzik, Jozef InSequence seq; 348dcc4e193SKrzysztof Grobelny EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _)); 349dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock)) 3502f9f9b87SWludzik, Jozef .WillOnce(Return(ByMove(std::move(reportMockPtr)))); 3512f9f9b87SWludzik, Jozef EXPECT_CALL(reportMock, Die()); 3522f9f9b87SWludzik, Jozef EXPECT_CALL(checkPoint, Call("end")); 3532f9f9b87SWludzik, Jozef } 3542f9f9b87SWludzik, Jozef 355e2362796SWludzik, Jozef addReport(reportParams); 356e2362796SWludzik, Jozef sut->removeReport(&reportMock); 357e2362796SWludzik, Jozef sut->removeReport(&reportMock); 3582f9f9b87SWludzik, Jozef checkPoint.Call("end"); 3592f9f9b87SWludzik, Jozef } 360e2362796SWludzik, Jozef 361d960e1f3SWludzik, Jozef TEST_F(TestReportManager, updateReportCallsUpdateReadingsForExistReport) 362d960e1f3SWludzik, Jozef { 363dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock)) 364d960e1f3SWludzik, Jozef .WillOnce(Return(ByMove(std::move(reportMockPtr)))); 365d960e1f3SWludzik, Jozef EXPECT_CALL(reportMock, updateReadings()); 366d960e1f3SWludzik, Jozef 367d960e1f3SWludzik, Jozef addReport(reportParams); 368b8cc78ddSKrzysztof Grobelny sut->updateReport(reportParams.reportId()); 369d960e1f3SWludzik, Jozef } 370d960e1f3SWludzik, Jozef 371d960e1f3SWludzik, Jozef TEST_F(TestReportManager, updateReportDoNothingIfReportDoesNotExist) 372d960e1f3SWludzik, Jozef { 373dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock)) 374d960e1f3SWludzik, Jozef .WillOnce(Return(ByMove(std::move(reportMockPtr)))); 375d960e1f3SWludzik, Jozef EXPECT_CALL(reportMock, updateReadings()).Times(0); 376d960e1f3SWludzik, Jozef 377d960e1f3SWludzik, Jozef addReport(reportParams); 378d960e1f3SWludzik, Jozef sut->updateReport("NotAReport"); 379d960e1f3SWludzik, Jozef } 380d960e1f3SWludzik, Jozef 381e8fc5751SKrzysztof Grobelny class TestReportManagerWithAggregationOperationType : 382e8fc5751SKrzysztof Grobelny public TestReportManager, 383e8fc5751SKrzysztof Grobelny public WithParamInterface<OperationType> 384e8fc5751SKrzysztof Grobelny { 385e8fc5751SKrzysztof Grobelny public: 386e8fc5751SKrzysztof Grobelny OperationType operationType = GetParam(); 387e8fc5751SKrzysztof Grobelny }; 388e8fc5751SKrzysztof Grobelny 389e8fc5751SKrzysztof Grobelny INSTANTIATE_TEST_SUITE_P(_, TestReportManagerWithAggregationOperationType, 390e8fc5751SKrzysztof Grobelny Values(OperationType::single, OperationType::max, 391e8fc5751SKrzysztof Grobelny OperationType::min, OperationType::avg, 392e8fc5751SKrzysztof Grobelny OperationType::sum)); 393e8fc5751SKrzysztof Grobelny 394e8fc5751SKrzysztof Grobelny TEST_P(TestReportManagerWithAggregationOperationType, 395e8fc5751SKrzysztof Grobelny addReportWithDifferentOperationTypes) 396e8fc5751SKrzysztof Grobelny { 397dcc4e193SKrzysztof Grobelny reportParams.metricParameters( 398dcc4e193SKrzysztof Grobelny std::vector<LabeledMetricParameters>{{LabeledMetricParameters{ 399*94f71c51SSzymon Dompke {LabeledSensorInfo{"Service", 400b8cc78ddSKrzysztof Grobelny "/xyz/openbmc_project/sensors/power/p1", 401b8cc78ddSKrzysztof Grobelny "Metadata1"}}, 402dcc4e193SKrzysztof Grobelny operationType, 403e8fc5751SKrzysztof Grobelny "MetricId1", 404dcc4e193SKrzysztof Grobelny CollectionTimeScope::point, 405dcc4e193SKrzysztof Grobelny CollectionDuration(Milliseconds(0u))}}}); 406e8fc5751SKrzysztof Grobelny 407dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(reportParams, Ref(*sut), Ref(storageMock)) 408e8fc5751SKrzysztof Grobelny .WillOnce(Return(ByMove(std::move(reportMockPtr)))); 409e8fc5751SKrzysztof Grobelny 410e8fc5751SKrzysztof Grobelny auto [ec, path] = addReport(reportParams); 41132859b63SKarol Niczyj 412e8fc5751SKrzysztof Grobelny EXPECT_THAT(ec.value(), Eq(boost::system::errc::success)); 413b8cc78ddSKrzysztof Grobelny EXPECT_THAT(path, Eq("/"s + reportParams.reportId())); 414e8fc5751SKrzysztof Grobelny } 415e8fc5751SKrzysztof Grobelny 416e2362796SWludzik, Jozef class TestReportManagerStorage : public TestReportManager 417e2362796SWludzik, Jozef { 418e2362796SWludzik, Jozef public: 419e2362796SWludzik, Jozef using FilePath = interfaces::JsonStorage::FilePath; 420e2362796SWludzik, Jozef using DirectoryPath = interfaces::JsonStorage::DirectoryPath; 421e2362796SWludzik, Jozef 422e2362796SWludzik, Jozef void SetUp() override 423e2362796SWludzik, Jozef { 424dcc4e193SKrzysztof Grobelny EXPECT_CALL(reportFactoryMock, convertMetricParams(_, _)).Times(0); 425dcc4e193SKrzysztof Grobelny 426e2362796SWludzik, Jozef ON_CALL(storageMock, list()) 427e2362796SWludzik, Jozef .WillByDefault(Return(std::vector<FilePath>{FilePath("report1")})); 428e2362796SWludzik, Jozef ON_CALL(storageMock, load(FilePath("report1"))) 4296ccfcbf5SKrzysztof Grobelny .WillByDefault(InvokeWithoutArgs([this] { return data; })); 430e2362796SWludzik, Jozef } 431e2362796SWludzik, Jozef 432e2362796SWludzik, Jozef void makeReportManager() 433e2362796SWludzik, Jozef { 434e2362796SWludzik, Jozef sut = std::make_unique<ReportManager>(std::move(reportFactoryMockPtr), 435e2362796SWludzik, Jozef std::move(storageMockPtr), 436e2362796SWludzik, Jozef DbusEnvironment::getObjServer()); 437e2362796SWludzik, Jozef } 438e2362796SWludzik, Jozef 439e2362796SWludzik, Jozef nlohmann::json data = nlohmann::json{ 4407e098e93SLukasz Kazmierczak {"Enabled", reportParams.enabled()}, 441e2362796SWludzik, Jozef {"Version", Report::reportVersion}, 442b8cc78ddSKrzysztof Grobelny {"Id", reportParams.reportId()}, 443e2362796SWludzik, Jozef {"Name", reportParams.reportName()}, 44451497a0cSKrzysztof Grobelny {"ReportingType", utils::toUnderlying(reportParams.reportingType())}, 44551497a0cSKrzysztof Grobelny {"ReportActions", reportParams.reportActions()}, 446e2362796SWludzik, Jozef {"Interval", reportParams.interval().count()}, 44751497a0cSKrzysztof Grobelny {"ReportUpdates", utils::toUnderlying(reportParams.reportUpdates())}, 4483eb56865SSzymon Dompke {"AppendLimit", reportParams.appendLimit()}, 449dcc4e193SKrzysztof Grobelny {"ReadingParameters", reportParams.metricParameters()}}; 450e2362796SWludzik, Jozef }; 451e2362796SWludzik, Jozef 452e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage, reportManagerCtorAddReportFromStorage) 453e2362796SWludzik, Jozef { 454dcc4e193SKrzysztof Grobelny reportFactoryMock.expectMake(reportParams, _, Ref(storageMock)); 455e2362796SWludzik, Jozef 456e2362796SWludzik, Jozef makeReportManager(); 457e2362796SWludzik, Jozef } 458e2362796SWludzik, Jozef 459e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage, 460e2362796SWludzik, Jozef reportManagerCtorRemoveFileIfVersionDoesNotMatch) 461e2362796SWludzik, Jozef { 462e2362796SWludzik, Jozef data["Version"] = Report::reportVersion - 1; 463e2362796SWludzik, Jozef 464e2362796SWludzik, Jozef EXPECT_CALL(storageMock, remove(FilePath("report1"))); 465e2362796SWludzik, Jozef 466e2362796SWludzik, Jozef makeReportManager(); 467e2362796SWludzik, Jozef } 468e2362796SWludzik, Jozef 469e2362796SWludzik, Jozef TEST_F(TestReportManagerStorage, 470e2362796SWludzik, Jozef reportManagerCtorRemoveFileIfIntervalHasWrongType) 471e2362796SWludzik, Jozef { 472e2362796SWludzik, Jozef data["Interval"] = "1000"; 473e2362796SWludzik, Jozef 474e2362796SWludzik, Jozef EXPECT_CALL(storageMock, remove(FilePath("report1"))); 475e2362796SWludzik, Jozef 476e2362796SWludzik, Jozef makeReportManager(); 477e2362796SWludzik, Jozef } 478