made MetricValues persistent
MetricValues are persistent for reportUpdates AppendStopsWhenFull and
reportingType different than OnRequest.
Tested:
- New unit tests are passing
- Confirmed MetricValues are preserved after restarting telemetry
service
Change-Id: I7e1990fb391da9debb0d7df2f1dbda86473350cc
Signed-off-by: Krzysztof Grobelny <krzysztof.grobelny@intel.com>
diff --git a/tests/meson.build b/tests/meson.build
index 5c21d88..70de004 100644
--- a/tests/meson.build
+++ b/tests/meson.build
@@ -27,6 +27,7 @@
'../src/trigger_actions.cpp',
'../src/trigger_factory.cpp',
'../src/trigger_manager.cpp',
+ '../src/types/readings.cpp',
'../src/types/report_types.cpp',
'../src/utils/conversion_trigger.cpp',
'../src/utils/generate_id.cpp',
diff --git a/tests/src/mocks/report_factory_mock.hpp b/tests/src/mocks/report_factory_mock.hpp
index d0fc14c..b14bbb7 100644
--- a/tests/src/mocks/report_factory_mock.hpp
+++ b/tests/src/mocks/report_factory_mock.hpp
@@ -41,7 +41,7 @@
WithArgs<1>(Invoke(&ReportFactoryMock::convertToLabeled)));
ON_CALL(*this,
- make(A<const std::string&>(), _, _, _, _, _, _, _, _, _, _))
+ make(A<const std::string&>(), _, _, _, _, _, _, _, _, _, _, _))
.WillByDefault(WithArgs<0>(Invoke([](const std::string& id) {
return std::make_unique<NiceMock<ReportMock>>(id);
})));
@@ -64,7 +64,7 @@
const std::vector<ReportAction>&, Milliseconds, uint64_t,
const ReportUpdates, interfaces::ReportManager&,
interfaces::JsonStorage&, std::vector<LabeledMetricParameters>,
- bool),
+ bool, Readings),
(const, override));
auto& expectMake(
@@ -77,15 +77,17 @@
{
const ReportParams& params = *paramsRef;
return EXPECT_CALL(
- *this, make(params.reportId(), params.reportName(),
- params.reportingType(), params.reportActions(),
- params.interval(), params.appendLimit(),
- params.reportUpdates(), rm, js,
- params.metricParameters(), params.enabled()));
+ *this,
+ make(params.reportId(), params.reportName(),
+ params.reportingType(), params.reportActions(),
+ params.interval(), params.appendLimit(),
+ params.reportUpdates(), rm, js, params.metricParameters(),
+ params.enabled(), params.readings()));
}
else
{
- return EXPECT_CALL(*this, make(_, _, _, _, _, _, _, rm, js, _, _));
+ return EXPECT_CALL(*this,
+ make(_, _, _, _, _, _, _, rm, js, _, _, _));
}
}
};
diff --git a/tests/src/params/report_params.hpp b/tests/src/params/report_params.hpp
index 295be36..db83b0d 100644
--- a/tests/src/params/report_params.hpp
+++ b/tests/src/params/report_params.hpp
@@ -108,6 +108,17 @@
return metricParametersProperty;
}
+ ReportParams& readings(Readings val)
+ {
+ readingsProperty = std::move(val);
+ return *this;
+ }
+
+ Readings readings() const
+ {
+ return readingsProperty;
+ }
+
private:
std::string reportIdProperty = "TestId";
std::string reportNameProperty = "TestReport";
@@ -135,4 +146,5 @@
CollectionTimeScope::point,
CollectionDuration(Milliseconds(0u))}}};
bool enabledProperty = true;
+ Readings readingsProperty = {};
};
diff --git a/tests/src/test_report.cpp b/tests/src/test_report.cpp
index 7646230..a122544 100644
--- a/tests/src/test_report.cpp
+++ b/tests/src/test_report.cpp
@@ -49,6 +49,7 @@
std::make_unique<NiceMock<ReportManagerMock>>();
std::unique_ptr<ReportFactoryMock> reportFactoryMock =
std::make_unique<NiceMock<ReportFactoryMock>>();
+ nlohmann::json storedConfiguration;
NiceMock<StorageMock> storageMock;
std::vector<std::shared_ptr<MetricMock>> metricMocks;
std::unique_ptr<ClockFake> clockFakePtr = std::make_unique<ClockFake>();
@@ -61,6 +62,8 @@
TestReport() : messanger(DbusEnvironment::getIoc())
{
clockFake.system.set(systemTimestamp);
+ ON_CALL(storageMock, store(to_file_path(ReportParams().reportId()), _))
+ .WillByDefault(SaveArg<1>(&storedConfiguration));
}
void initMetricMocks(
@@ -125,7 +128,8 @@
params.reportUpdates(), *reportManagerMock, storageMock,
utils::convContainer<std::shared_ptr<interfaces::Metric>>(
metricMocks),
- *reportFactoryMock, params.enabled(), std::move(clockFakePtr));
+ *reportFactoryMock, params.enabled(), std::move(clockFakePtr),
+ params.readings());
}
template <class T>
@@ -407,7 +411,9 @@
TEST_F(TestReport, settingPersistencyToFalseRemovesReportFromStorage)
{
- EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
+ EXPECT_CALL(storageMock, store(_, _)).Times(0);
+ EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())))
+ .Times(AtLeast(1));
bool persistency = false;
EXPECT_THAT(setProperty(sut->getPath(), "Persistency", persistency).value(),
@@ -431,7 +437,10 @@
TEST_F(TestReport, deleteReportExpectThatFileIsRemoveFromStorage)
{
- EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
+ EXPECT_CALL(storageMock, store(_, _)).Times(0);
+ EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())))
+ .Times(AtLeast(1));
+
auto ec = deleteReport(sut->getPath());
EXPECT_THAT(ec, Eq(boost::system::errc::success));
}
@@ -506,11 +515,8 @@
public TestReport,
public WithParamInterface<std::pair<std::string, nlohmann::json>>
{
- public:
void SetUp() override
{}
-
- nlohmann::json storedConfiguration;
};
INSTANTIATE_TEST_SUITE_P(
@@ -563,8 +569,7 @@
InSequence seq;
EXPECT_CALL(storageMock, remove(to_file_path(sut->getId())));
EXPECT_CALL(checkPoint, Call());
- EXPECT_CALL(storageMock, store(to_file_path(sut->getId()), _))
- .WillOnce(SaveArg<1>(&storedConfiguration));
+ EXPECT_CALL(storageMock, store(to_file_path(sut->getId()), _));
}
setProperty(sut->getPath(), "Persistency", false);
@@ -578,8 +583,8 @@
TEST_P(TestReportStore, reportIsSavedToStorageAfterCreated)
{
- EXPECT_CALL(storageMock, store(to_file_path(defaultParams().reportId()), _))
- .WillOnce(SaveArg<1>(&storedConfiguration));
+ EXPECT_CALL(storageMock,
+ store(to_file_path(defaultParams().reportId()), _));
sut = makeReport(defaultParams());
@@ -1069,11 +1074,6 @@
TEST_F(TestReportInitialization, appendLimitSetToUintMaxIsStoredCorrectly)
{
- nlohmann::json storedConfiguration;
-
- EXPECT_CALL(storageMock, store(to_file_path(ReportParams().reportId()), _))
- .WillOnce(SaveArg<1>(&storedConfiguration));
-
sut = makeReport(
ReportParams().appendLimit(std::numeric_limits<uint64_t>::max()));
@@ -1098,6 +1098,45 @@
UnorderedElementsAre("trigger1", "trigger2"));
}
+TEST_F(TestReportInitialization,
+ metricValuesAreNotStoredForReportUpdatesDifferentThanAppendStopsWhenFull)
+{
+ sut = makeReport(ReportParams()
+ .reportingType(ReportingType::periodic)
+ .interval(1h)
+ .reportUpdates(ReportUpdates::appendWrapsWhenFull)
+ .readings(Readings{{}, {{}}}));
+
+ ASSERT_THAT(storedConfiguration.find("MetricValues"),
+ Eq(storedConfiguration.end()));
+}
+
+TEST_F(TestReportInitialization, metricValuesAreNotStoredForOnRequestReport)
+{
+ sut = makeReport(ReportParams()
+ .reportingType(ReportingType::onRequest)
+ .reportUpdates(ReportUpdates::appendStopsWhenFull)
+ .readings(Readings{{}, {{}}}));
+
+ ASSERT_THAT(storedConfiguration.find("MetricValues"),
+ Eq(storedConfiguration.end()));
+}
+
+TEST_F(TestReportInitialization,
+ metricValuesAreStoredForNonOnRequestReportWithAppendStopsWhenFull)
+{
+ const auto readings = Readings{{}, {{}}};
+
+ sut = makeReport(ReportParams()
+ .reportingType(ReportingType::periodic)
+ .interval(1h)
+ .reportUpdates(ReportUpdates::appendStopsWhenFull)
+ .readings(readings));
+
+ ASSERT_THAT(storedConfiguration.at("MetricValues").get<LabeledReadings>(),
+ Eq(utils::toLabeledReadings(readings)));
+}
+
class TestReportInitializationOnChangeReport : public TestReportInitialization
{
public: