Index: components/ukm/ukm_service_unittest.cc |
diff --git a/components/ukm/ukm_service_unittest.cc b/components/ukm/ukm_service_unittest.cc |
index 2bdf94af09436423626d165f7a58dd6f0d937781..0b80e5ccee573849cf70429ec2c1e271a4460db9 100644 |
--- a/components/ukm/ukm_service_unittest.cc |
+++ b/components/ukm/ukm_service_unittest.cc |
@@ -6,10 +6,15 @@ |
#include "base/test/test_simple_task_runner.h" |
#include "base/threading/thread_task_runner_handle.h" |
+#include "components/metrics/proto/ukm/report.pb.h" |
+#include "components/metrics/proto/ukm/source.pb.h" |
#include "components/metrics/test_metrics_service_client.h" |
#include "components/prefs/testing_pref_service.h" |
+#include "components/ukm/persisted_logs_metrics_impl.h" |
#include "components/ukm/ukm_pref_names.h" |
+#include "components/ukm/ukm_source.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "third_party/zlib/google/compression_utils.h" |
namespace ukm { |
@@ -31,6 +36,26 @@ class UkmServiceTest : public testing::Test { |
return list_value->GetSize(); |
} |
+ Report GetPersistedReport() { |
+ metrics::PersistedLogs result_persisted_logs( |
+ base::MakeUnique<ukm::PersistedLogsMetricsImpl>(), &prefs_, |
+ prefs::kUkmPersistedLogs, |
+ 3, // log count limit |
+ 1000, // byte limit |
+ 0); |
+ |
+ result_persisted_logs.DeserializeLogs(); |
+ result_persisted_logs.StageLog(); |
+ |
+ std::string uncompressed_log_data; |
+ EXPECT_TRUE(compression::GzipUncompress(result_persisted_logs.staged_log(), |
+ &uncompressed_log_data)); |
+ |
+ Report report; |
+ EXPECT_TRUE(report.ParseFromString(uncompressed_log_data)); |
+ return report; |
+ } |
+ |
protected: |
TestingPrefServiceSimple prefs_; |
metrics::TestMetricsServiceClient client_; |
@@ -73,4 +98,34 @@ TEST_F(UkmServiceTest, PersistAndPurge) { |
EXPECT_EQ(GetPersistedLogCount(), 0); |
} |
+TEST_F(UkmServiceTest, SourceSerialization) { |
+ UkmService service(&prefs_, &client_); |
+ EXPECT_EQ(GetPersistedLogCount(), 0); |
+ service.Initialize(); |
+ task_runner_->RunUntilIdle(); |
+ service.EnableReporting(); |
+ |
+ std::unique_ptr<UkmSource> source = base::WrapUnique(new UkmSource()); |
+ source->set_committed_url(GURL("https://google.com")); |
+ base::Time test_time; |
+ source->set_navigation_start(test_time); |
+ source->set_first_contentful_paint(base::TimeDelta::FromMilliseconds(300)); |
+ |
+ service.RecordSource(std::move(source)); |
+ |
+ service.Flush(); |
+ EXPECT_EQ(GetPersistedLogCount(), 1); |
+ |
+ Report proto_report = GetPersistedReport(); |
+ EXPECT_EQ(1, proto_report.sources_size()); |
+ const Source& proto_source = proto_report.sources(0); |
+ |
+ EXPECT_EQ(GURL("https://google.com").spec(), proto_source.url()); |
+ base::Time navigation_time = |
+ base::Time::UnixEpoch() + |
+ base::TimeDelta::FromMilliseconds(proto_source.navigation_time_msec()); |
+ EXPECT_EQ(test_time, navigation_time); |
+ EXPECT_EQ(300, proto_source.first_contentful_paint_msec()); |
+} |
+ |
} // namespace ukm |