OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/ukm/ukm_service.h" | 5 #include "components/ukm/ukm_service.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/test/test_simple_task_runner.h" | 10 #include "base/test/test_simple_task_runner.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 prefs_.ClearPref(prefs::kUkmPersistedLogs); | 34 prefs_.ClearPref(prefs::kUkmPersistedLogs); |
35 } | 35 } |
36 | 36 |
37 int GetPersistedLogCount() { | 37 int GetPersistedLogCount() { |
38 const base::ListValue* list_value = | 38 const base::ListValue* list_value = |
39 prefs_.GetList(prefs::kUkmPersistedLogs); | 39 prefs_.GetList(prefs::kUkmPersistedLogs); |
40 return list_value->GetSize(); | 40 return list_value->GetSize(); |
41 } | 41 } |
42 | 42 |
43 Report GetPersistedReport() { | 43 Report GetPersistedReport() { |
| 44 EXPECT_GE(GetPersistedLogCount(), 1); |
44 metrics::PersistedLogs result_persisted_logs( | 45 metrics::PersistedLogs result_persisted_logs( |
45 base::MakeUnique<ukm::PersistedLogsMetricsImpl>(), &prefs_, | 46 base::MakeUnique<ukm::PersistedLogsMetricsImpl>(), &prefs_, |
46 prefs::kUkmPersistedLogs, | 47 prefs::kUkmPersistedLogs, |
47 3, // log count limit | 48 3, // log count limit |
48 1000, // byte limit | 49 1000, // byte limit |
49 0); | 50 0); |
50 | 51 |
51 result_persisted_logs.DeserializeLogs(); | 52 result_persisted_logs.DeserializeLogs(); |
52 result_persisted_logs.StageLog(); | 53 result_persisted_logs.StageLog(); |
53 | 54 |
54 std::string uncompressed_log_data; | 55 std::string uncompressed_log_data; |
55 EXPECT_TRUE(compression::GzipUncompress(result_persisted_logs.staged_log(), | 56 EXPECT_TRUE(compression::GzipUncompress(result_persisted_logs.staged_log(), |
56 &uncompressed_log_data)); | 57 &uncompressed_log_data)); |
57 | 58 |
58 Report report; | 59 Report report; |
59 EXPECT_TRUE(report.ParseFromString(uncompressed_log_data)); | 60 EXPECT_TRUE(report.ParseFromString(uncompressed_log_data)); |
60 return report; | 61 return report; |
61 } | 62 } |
62 | 63 |
| 64 std::unique_ptr<UkmSource> MakeSource(std::string url, int paint_msec) { |
| 65 auto source = base::MakeUnique<UkmSource>(); |
| 66 source->set_committed_url(GURL(url)); |
| 67 source->set_first_contentful_paint( |
| 68 base::TimeDelta::FromMilliseconds(paint_msec)); |
| 69 return source; |
| 70 } |
| 71 |
63 protected: | 72 protected: |
64 TestingPrefServiceSimple prefs_; | 73 TestingPrefServiceSimple prefs_; |
65 metrics::TestMetricsServiceClient client_; | 74 metrics::TestMetricsServiceClient client_; |
66 | 75 |
67 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; | 76 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; |
68 base::ThreadTaskRunnerHandle task_runner_handle_; | 77 base::ThreadTaskRunnerHandle task_runner_handle_; |
69 | 78 |
70 private: | 79 private: |
71 DISALLOW_COPY_AND_ASSIGN(UkmServiceTest); | 80 DISALLOW_COPY_AND_ASSIGN(UkmServiceTest); |
72 }; | 81 }; |
73 | 82 |
74 } // namespace | 83 } // namespace |
75 | 84 |
76 TEST_F(UkmServiceTest, EnableDisableSchedule) { | 85 TEST_F(UkmServiceTest, EnableDisableSchedule) { |
77 UkmService service(&prefs_, &client_); | 86 UkmService service(&prefs_, &client_); |
78 EXPECT_FALSE(task_runner_->HasPendingTask()); | 87 EXPECT_FALSE(task_runner_->HasPendingTask()); |
79 service.Initialize(); | 88 service.Initialize(); |
80 EXPECT_TRUE(task_runner_->HasPendingTask()); | 89 EXPECT_TRUE(task_runner_->HasPendingTask()); |
81 // Allow initialization to complete. | 90 // Allow initialization to complete. |
82 task_runner_->RunUntilIdle(); | 91 task_runner_->RunUntilIdle(); |
| 92 service.EnableRecording(); |
83 service.EnableReporting(); | 93 service.EnableReporting(); |
84 EXPECT_TRUE(task_runner_->HasPendingTask()); | 94 EXPECT_TRUE(task_runner_->HasPendingTask()); |
85 service.DisableReporting(); | 95 service.DisableReporting(); |
86 task_runner_->RunPendingTasks(); | 96 task_runner_->RunPendingTasks(); |
87 EXPECT_FALSE(task_runner_->HasPendingTask()); | 97 EXPECT_FALSE(task_runner_->HasPendingTask()); |
88 } | 98 } |
89 | 99 |
90 TEST_F(UkmServiceTest, PersistAndPurge) { | 100 TEST_F(UkmServiceTest, PersistAndPurge) { |
91 UkmService service(&prefs_, &client_); | 101 UkmService service(&prefs_, &client_); |
92 EXPECT_EQ(GetPersistedLogCount(), 0); | 102 EXPECT_EQ(GetPersistedLogCount(), 0); |
93 service.Initialize(); | 103 service.Initialize(); |
94 task_runner_->RunUntilIdle(); | 104 task_runner_->RunUntilIdle(); |
| 105 service.EnableRecording(); |
95 service.EnableReporting(); | 106 service.EnableReporting(); |
| 107 service.RecordSource(MakeSource("https://google.com", 300)); |
96 // Should init, generate a log, and start an upload. | 108 // Should init, generate a log, and start an upload. |
97 task_runner_->RunPendingTasks(); | 109 task_runner_->RunPendingTasks(); |
98 EXPECT_TRUE(client_.uploader()->is_uploading()); | 110 EXPECT_TRUE(client_.uploader()->is_uploading()); |
99 // Flushes the generated log to disk and generates a new one. | 111 // Flushes the generated log to disk and generates a new one. |
| 112 service.RecordSource(MakeSource("https://google.com", 300)); |
100 service.Flush(); | 113 service.Flush(); |
101 EXPECT_EQ(GetPersistedLogCount(), 2); | 114 EXPECT_EQ(GetPersistedLogCount(), 2); |
102 service.Purge(); | 115 service.Purge(); |
103 EXPECT_EQ(GetPersistedLogCount(), 0); | 116 EXPECT_EQ(GetPersistedLogCount(), 0); |
104 } | 117 } |
105 | 118 |
106 TEST_F(UkmServiceTest, SourceSerialization) { | 119 TEST_F(UkmServiceTest, SourceSerialization) { |
107 UkmService service(&prefs_, &client_); | 120 UkmService service(&prefs_, &client_); |
108 EXPECT_EQ(GetPersistedLogCount(), 0); | 121 EXPECT_EQ(GetPersistedLogCount(), 0); |
109 service.Initialize(); | 122 service.Initialize(); |
110 task_runner_->RunUntilIdle(); | 123 task_runner_->RunUntilIdle(); |
| 124 service.EnableRecording(); |
111 service.EnableReporting(); | 125 service.EnableReporting(); |
112 | 126 |
113 std::unique_ptr<UkmSource> source = base::WrapUnique(new UkmSource()); | 127 service.RecordSource(MakeSource("https://google.com", 300)); |
114 source->set_committed_url(GURL("https://google.com")); | |
115 source->set_first_contentful_paint(base::TimeDelta::FromMilliseconds(300)); | |
116 | |
117 service.RecordSource(std::move(source)); | |
118 | 128 |
119 service.Flush(); | 129 service.Flush(); |
120 EXPECT_EQ(GetPersistedLogCount(), 1); | 130 EXPECT_EQ(GetPersistedLogCount(), 1); |
121 | 131 |
122 Report proto_report = GetPersistedReport(); | 132 Report proto_report = GetPersistedReport(); |
123 EXPECT_EQ(1, proto_report.sources_size()); | 133 EXPECT_EQ(1, proto_report.sources_size()); |
124 const Source& proto_source = proto_report.sources(0); | 134 const Source& proto_source = proto_report.sources(0); |
125 | 135 |
126 EXPECT_EQ(GURL("https://google.com").spec(), proto_source.url()); | 136 EXPECT_EQ(GURL("https://google.com").spec(), proto_source.url()); |
127 EXPECT_EQ(300, proto_source.first_contentful_paint_msec()); | 137 EXPECT_EQ(300, proto_source.first_contentful_paint_msec()); |
128 } | 138 } |
129 | 139 |
130 TEST_F(UkmServiceTest, MetricsProviderTest) { | 140 TEST_F(UkmServiceTest, MetricsProviderTest) { |
131 UkmService service(&prefs_, &client_); | 141 UkmService service(&prefs_, &client_); |
132 | 142 |
133 metrics::TestMetricsProvider* provider = new metrics::TestMetricsProvider(); | 143 metrics::TestMetricsProvider* provider = new metrics::TestMetricsProvider(); |
134 service.RegisterMetricsProvider( | 144 service.RegisterMetricsProvider( |
135 std::unique_ptr<metrics::MetricsProvider>(provider)); | 145 std::unique_ptr<metrics::MetricsProvider>(provider)); |
136 | 146 |
137 service.Initialize(); | 147 service.Initialize(); |
138 | 148 |
139 // Providers have not supplied system profile information yet. | 149 // Providers have not supplied system profile information yet. |
140 EXPECT_FALSE(provider->provide_system_profile_metrics_called()); | 150 EXPECT_FALSE(provider->provide_system_profile_metrics_called()); |
141 | 151 |
142 task_runner_->RunUntilIdle(); | 152 task_runner_->RunUntilIdle(); |
| 153 service.EnableRecording(); |
143 service.EnableReporting(); | 154 service.EnableReporting(); |
144 | 155 |
145 service.RecordSource(base::WrapUnique(new UkmSource())); | 156 service.RecordSource(MakeSource("https://google.com", 300)); |
146 service.Flush(); | 157 service.Flush(); |
147 EXPECT_EQ(GetPersistedLogCount(), 1); | 158 EXPECT_EQ(GetPersistedLogCount(), 1); |
148 | 159 |
149 Report proto_report = GetPersistedReport(); | 160 Report proto_report = GetPersistedReport(); |
150 EXPECT_EQ(1, proto_report.sources_size()); | 161 EXPECT_EQ(1, proto_report.sources_size()); |
151 | 162 |
152 // Providers have now supplied system profile information. | 163 // Providers have now supplied system profile information. |
153 EXPECT_TRUE(provider->provide_system_profile_metrics_called()); | 164 EXPECT_TRUE(provider->provide_system_profile_metrics_called()); |
154 } | 165 } |
155 | 166 |
156 } // namespace ukm | 167 } // namespace ukm |
OLD | NEW |