Add limit for report name length
Added limit for report name length, parametrized with
max-report-name-length option, because we cannot
remove reports with too long report name.
Tested:
- Confirmed that report with name length equal to 4096
cannot be generated via bmcweb (POST
redfish/v1/TelemetryService/MetricReportDefinitions
fails with code 500)
- Confirmed that report with name length equal to 4095
can be generated and removed via bmcweb
- Added unit-test that test that report with name
length equal to max-report-name-length + 1 cannot
be generated
- Added unit-test that test that report with name
length equal to max-report-name-length can
be generated
Change-Id: I6868320f831079af903f3624d1beff648059e351
Signed-off-by: Karol Niczyj <karol.niczyj@intel.com>
diff --git a/tests/src/test_report_manager.cpp b/tests/src/test_report_manager.cpp
index 519606f..4ad5479 100644
--- a/tests/src/test_report_manager.cpp
+++ b/tests/src/test_report_manager.cpp
@@ -84,6 +84,16 @@
});
return DbusEnvironment::waitForFuture(std::move(propertyFuture));
}
+
+ static std::string prepareReportNameWithLength(size_t length)
+ {
+ std::stringstream reportNameStream;
+ for (size_t i = 0; i < length; ++i)
+ {
+ reportNameStream << "z";
+ }
+ return reportNameStream.str();
+ }
};
TEST_F(TestReportManager, minInterval)
@@ -108,6 +118,35 @@
EXPECT_THAT(path, Eq(reportMock.getPath()));
}
+TEST_F(TestReportManager, addReportWithMaxLengthName)
+{
+ std::string reportName =
+ prepareReportNameWithLength(ReportManager::maxReportNameLength);
+ reportParams.reportName(reportName);
+ reportFactoryMock.expectMake(_, reportParams, Ref(*sut), Ref(storageMock));
+
+ auto [ec, path] = addReport(reportParams);
+
+ EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
+ EXPECT_THAT(path, Eq("/"s + reportName));
+}
+
+TEST_F(TestReportManager, DISABLED_failToAddReportWithTooLongName)
+{
+ reportFactoryMock.expectMake(_, std::nullopt, Ref(*sut), Ref(storageMock))
+ .Times(0);
+ reportFactoryMock.expectMake(std::nullopt, Ref(*sut), Ref(storageMock), _)
+ .Times(0);
+
+ reportParams.reportName(
+ prepareReportNameWithLength(ReportManager::maxReportNameLength + 1));
+
+ auto [ec, path] = addReport(reportParams);
+
+ EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument));
+ EXPECT_THAT(path, Eq(std::string()));
+}
+
TEST_F(TestReportManager, DISABLED_failToAddReportTwice)
{
reportFactoryMock.expectMake(_, reportParams, Ref(*sut), Ref(storageMock))
@@ -116,6 +155,7 @@
addReport(reportParams);
auto [ec, path] = addReport(reportParams);
+
EXPECT_THAT(ec.value(), Eq(boost::system::errc::file_exists));
EXPECT_THAT(path, Eq(std::string()));
}
@@ -131,6 +171,7 @@
reportParams.interval(reportParams.interval() - 1ms);
auto [ec, path] = addReport(reportParams);
+
EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument));
EXPECT_THAT(path, Eq(std::string()));
}
@@ -145,6 +186,7 @@
reportParams.reportingType("Invalid");
auto [ec, path] = addReport(reportParams);
+
EXPECT_THAT(ec.value(), Eq(boost::system::errc::invalid_argument));
EXPECT_THAT(path, Eq(std::string()));
}
@@ -164,6 +206,7 @@
reportParams.readingParameters(std::move(readingParams));
auto [ec, path] = addReport(reportParams);
+
EXPECT_THAT(ec.value(), Eq(boost::system::errc::argument_list_too_long));
EXPECT_THAT(path, Eq(std::string()));
}
@@ -184,6 +227,7 @@
reportParams.reportName(reportParams.reportName() +
std::to_string(ReportManager::maxReports));
auto [ec, path] = addReport(reportParams);
+
EXPECT_THAT(ec.value(), Eq(boost::system::errc::too_many_files_open));
EXPECT_THAT(path, Eq(std::string()));
}
@@ -280,6 +324,7 @@
.WillOnce(Return(ByMove(std::move(reportMockPtr))));
auto [ec, path] = addReport(reportParams);
+
EXPECT_THAT(ec.value(), Eq(boost::system::errc::success));
EXPECT_THAT(path, Eq("/"s + reportParams.reportName()));
}