OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/metrics/metrics_log_manager.h" | 5 #include "components/metrics/metrics_log_manager.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 TestLogPrefService pref_service; | 153 TestLogPrefService pref_service; |
154 // Set up some in-progress logging in a scoped log manager simulating the | 154 // Set up some in-progress logging in a scoped log manager simulating the |
155 // leadup to quitting, then persist as would be done on quit. | 155 // leadup to quitting, then persist as would be done on quit. |
156 { | 156 { |
157 MetricsLogManager log_manager(&pref_service, 0); | 157 MetricsLogManager log_manager(&pref_service, 0); |
158 log_manager.LoadPersistedUnsentLogs(); | 158 log_manager.LoadPersistedUnsentLogs(); |
159 | 159 |
160 // Simulate a log having already been unsent from a previous session. | 160 // Simulate a log having already been unsent from a previous session. |
161 { | 161 { |
162 std::string log("proto"); | 162 std::string log("proto"); |
163 metrics::PersistedLogs ongoing_logs( | 163 PersistedLogs ongoing_logs(&pref_service, prefs::kMetricsOngoingLogs, |
164 &pref_service, prefs::kMetricsOngoingLogs, 1, 1, 0); | 164 prefs::kMetricsOngoingLogsOld, 1, 1, 0); |
165 ongoing_logs.StoreLog(&log); | 165 ongoing_logs.StoreLog(log); |
166 ongoing_logs.SerializeLogs(); | 166 ongoing_logs.SerializeLogs(); |
167 } | 167 } |
168 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 168 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
169 EXPECT_FALSE(log_manager.has_unsent_logs()); | 169 EXPECT_FALSE(log_manager.has_unsent_logs()); |
170 log_manager.LoadPersistedUnsentLogs(); | 170 log_manager.LoadPersistedUnsentLogs(); |
171 EXPECT_TRUE(log_manager.has_unsent_logs()); | 171 EXPECT_TRUE(log_manager.has_unsent_logs()); |
172 | 172 |
173 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 173 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
174 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); | 174 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); |
175 log_manager.FinishCurrentLog(); | 175 log_manager.FinishCurrentLog(); |
176 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 176 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
177 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | 177 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
178 log_manager.StageNextLogForUpload(); | 178 log_manager.StageNextLogForUpload(); |
179 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); | 179 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE); |
180 log_manager.FinishCurrentLog(); | 180 log_manager.FinishCurrentLog(); |
181 | 181 |
182 // Nothing should be written out until PersistUnsentLogs is called. | 182 // Nothing should be written out until PersistUnsentLogs is called. |
183 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); | 183 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
184 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 184 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
185 log_manager.PersistUnsentLogs(); | 185 log_manager.PersistUnsentLogs(); |
186 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); | 186 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
187 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 187 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
188 } | 188 } |
189 | 189 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 // Ensure that types are preserved when storing staged logs. | 229 // Ensure that types are preserved when storing staged logs. |
230 { | 230 { |
231 TestLogPrefService pref_service; | 231 TestLogPrefService pref_service; |
232 MetricsLogManager log_manager(&pref_service, 0); | 232 MetricsLogManager log_manager(&pref_service, 0); |
233 log_manager.LoadPersistedUnsentLogs(); | 233 log_manager.LoadPersistedUnsentLogs(); |
234 | 234 |
235 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 235 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
236 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | 236 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
237 log_manager.FinishCurrentLog(); | 237 log_manager.FinishCurrentLog(); |
238 log_manager.StageNextLogForUpload(); | 238 log_manager.StageNextLogForUpload(); |
239 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); | 239 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE); |
240 log_manager.PersistUnsentLogs(); | 240 log_manager.PersistUnsentLogs(); |
241 | 241 |
242 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); | 242 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
243 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 243 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
244 } | 244 } |
245 | 245 |
246 { | 246 { |
247 TestLogPrefService pref_service; | 247 TestLogPrefService pref_service; |
248 MetricsLogManager log_manager(&pref_service, 0); | 248 MetricsLogManager log_manager(&pref_service, 0); |
249 log_manager.LoadPersistedUnsentLogs(); | 249 log_manager.LoadPersistedUnsentLogs(); |
250 | 250 |
251 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 251 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
252 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); | 252 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); |
253 log_manager.FinishCurrentLog(); | 253 log_manager.FinishCurrentLog(); |
254 log_manager.StageNextLogForUpload(); | 254 log_manager.StageNextLogForUpload(); |
255 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); | 255 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE); |
256 log_manager.PersistUnsentLogs(); | 256 log_manager.PersistUnsentLogs(); |
257 | 257 |
258 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); | 258 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
259 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 259 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
260 } | 260 } |
261 } | 261 } |
262 | 262 |
263 TEST(MetricsLogManagerTest, LargeLogDiscarding) { | 263 TEST(MetricsLogManagerTest, LargeLogDiscarding) { |
264 TestMetricsServiceClient client; | 264 TestMetricsServiceClient client; |
265 TestLogPrefService pref_service; | 265 TestLogPrefService pref_service; |
(...skipping 22 matching lines...) Expand all Loading... |
288 TestLogPrefService pref_service; | 288 TestLogPrefService pref_service; |
289 MetricsLogManager log_manager(&pref_service, 0); | 289 MetricsLogManager log_manager(&pref_service, 0); |
290 log_manager.LoadPersistedUnsentLogs(); | 290 log_manager.LoadPersistedUnsentLogs(); |
291 | 291 |
292 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 292 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
293 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); | 293 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); |
294 log_manager.FinishCurrentLog(); | 294 log_manager.FinishCurrentLog(); |
295 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 295 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
296 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | 296 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
297 log_manager.StageNextLogForUpload(); | 297 log_manager.StageNextLogForUpload(); |
298 log_manager.StoreStagedLogAsUnsent( | 298 log_manager.StoreStagedLogAsUnsent(PersistedLogs::PROVISIONAL_STORE); |
299 metrics::PersistedLogs::PROVISIONAL_STORE); | |
300 log_manager.FinishCurrentLog(); | 299 log_manager.FinishCurrentLog(); |
301 log_manager.DiscardLastProvisionalStore(); | 300 log_manager.DiscardLastProvisionalStore(); |
302 | 301 |
303 log_manager.PersistUnsentLogs(); | 302 log_manager.PersistUnsentLogs(); |
304 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); | 303 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
305 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 304 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
306 } | 305 } |
307 } | 306 } |
308 | 307 |
309 TEST(MetricsLogManagerTest, ProvisionalStoreNoop) { | 308 TEST(MetricsLogManagerTest, ProvisionalStoreNoop) { |
310 TestMetricsServiceClient client; | 309 TestMetricsServiceClient client; |
311 | 310 |
312 // Ensure that trying to drop a sent log is a no-op, even if another log has | 311 // Ensure that trying to drop a sent log is a no-op, even if another log has |
313 // since been staged. | 312 // since been staged. |
314 { | 313 { |
315 TestLogPrefService pref_service; | 314 TestLogPrefService pref_service; |
316 MetricsLogManager log_manager(&pref_service, 0); | 315 MetricsLogManager log_manager(&pref_service, 0); |
317 log_manager.LoadPersistedUnsentLogs(); | 316 log_manager.LoadPersistedUnsentLogs(); |
318 | 317 |
319 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 318 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
320 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | 319 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
321 log_manager.FinishCurrentLog(); | 320 log_manager.FinishCurrentLog(); |
322 log_manager.StageNextLogForUpload(); | 321 log_manager.StageNextLogForUpload(); |
323 log_manager.StoreStagedLogAsUnsent( | 322 log_manager.StoreStagedLogAsUnsent(PersistedLogs::PROVISIONAL_STORE); |
324 metrics::PersistedLogs::PROVISIONAL_STORE); | |
325 log_manager.StageNextLogForUpload(); | 323 log_manager.StageNextLogForUpload(); |
326 log_manager.DiscardStagedLog(); | 324 log_manager.DiscardStagedLog(); |
327 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 325 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
328 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | 326 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
329 log_manager.FinishCurrentLog(); | 327 log_manager.FinishCurrentLog(); |
330 log_manager.StageNextLogForUpload(); | 328 log_manager.StageNextLogForUpload(); |
331 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); | 329 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE); |
332 log_manager.DiscardLastProvisionalStore(); | 330 log_manager.DiscardLastProvisionalStore(); |
333 | 331 |
334 log_manager.PersistUnsentLogs(); | 332 log_manager.PersistUnsentLogs(); |
335 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 333 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
336 } | 334 } |
337 | 335 |
338 // Ensure that trying to drop more than once is a no-op | 336 // Ensure that trying to drop more than once is a no-op |
339 { | 337 { |
340 TestLogPrefService pref_service; | 338 TestLogPrefService pref_service; |
341 MetricsLogManager log_manager(&pref_service, 0); | 339 MetricsLogManager log_manager(&pref_service, 0); |
342 log_manager.LoadPersistedUnsentLogs(); | 340 log_manager.LoadPersistedUnsentLogs(); |
343 | 341 |
344 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 342 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
345 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | 343 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
346 log_manager.FinishCurrentLog(); | 344 log_manager.FinishCurrentLog(); |
347 log_manager.StageNextLogForUpload(); | 345 log_manager.StageNextLogForUpload(); |
348 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); | 346 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE); |
349 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 347 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
350 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | 348 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
351 log_manager.FinishCurrentLog(); | 349 log_manager.FinishCurrentLog(); |
352 log_manager.StageNextLogForUpload(); | 350 log_manager.StageNextLogForUpload(); |
353 log_manager.StoreStagedLogAsUnsent( | 351 log_manager.StoreStagedLogAsUnsent(PersistedLogs::PROVISIONAL_STORE); |
354 metrics::PersistedLogs::PROVISIONAL_STORE); | |
355 log_manager.DiscardLastProvisionalStore(); | 352 log_manager.DiscardLastProvisionalStore(); |
356 log_manager.DiscardLastProvisionalStore(); | 353 log_manager.DiscardLastProvisionalStore(); |
357 | 354 |
358 log_manager.PersistUnsentLogs(); | 355 log_manager.PersistUnsentLogs(); |
359 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 356 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
360 } | 357 } |
361 } | 358 } |
362 | 359 |
363 } // namespace metrics | 360 } // namespace metrics |
OLD | NEW |