Chromium Code Reviews| 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..d5001299fda8e1fe030e06abd5344434235c28db 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" |
|
Steven Holte
2017/01/24 21:55:42
Need to add to DEPS?
oystein (OOO til 10th of July)
2017/01/24 22:09:56
Done.
|
| 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,37 @@ 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(); |
| + // Should init, generate a log, and unsuccessfully attempt an upload. |
| + task_runner_->RunPendingTasks(); |
|
Steven Holte
2017/01/24 21:55:42
You probably don't need to RunPendingTasks and Pur
oystein (OOO til 10th of July)
2017/01/24 22:09:56
Done.
|
| + service.Purge(); |
| + |
| + 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 |