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 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
171 EXPECT_FALSE(log_manager.has_unsent_logs()); | 171 EXPECT_FALSE(log_manager.has_unsent_logs()); |
172 log_manager.LoadPersistedUnsentLogs(); | 172 log_manager.LoadPersistedUnsentLogs(); |
173 EXPECT_TRUE(log_manager.has_unsent_logs()); | 173 EXPECT_TRUE(log_manager.has_unsent_logs()); |
174 | 174 |
175 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 175 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
176 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); | 176 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); |
177 log_manager.FinishCurrentLog(); | 177 log_manager.FinishCurrentLog(); |
178 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 178 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
179 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | 179 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
180 log_manager.StageNextLogForUpload(); | 180 log_manager.StageNextLogForUpload(); |
181 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE); | |
182 log_manager.FinishCurrentLog(); | 181 log_manager.FinishCurrentLog(); |
183 | 182 |
184 // Nothing should be written out until PersistUnsentLogs is called. | 183 // Nothing should be written out until PersistUnsentLogs is called. |
185 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); | 184 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
186 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 185 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
187 log_manager.PersistUnsentLogs(); | 186 log_manager.PersistUnsentLogs(); |
188 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); | 187 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
189 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 188 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
190 } | 189 } |
191 | 190 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 // Ensure that types are preserved when storing staged logs. | 230 // Ensure that types are preserved when storing staged logs. |
232 { | 231 { |
233 TestLogPrefService pref_service; | 232 TestLogPrefService pref_service; |
234 MetricsLogManager log_manager(&pref_service, 0); | 233 MetricsLogManager log_manager(&pref_service, 0); |
235 log_manager.LoadPersistedUnsentLogs(); | 234 log_manager.LoadPersistedUnsentLogs(); |
236 | 235 |
237 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 236 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
238 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | 237 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
239 log_manager.FinishCurrentLog(); | 238 log_manager.FinishCurrentLog(); |
240 log_manager.StageNextLogForUpload(); | 239 log_manager.StageNextLogForUpload(); |
241 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE); | |
242 log_manager.PersistUnsentLogs(); | 240 log_manager.PersistUnsentLogs(); |
243 | 241 |
244 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); | 242 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
245 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 243 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
246 } | 244 } |
247 | 245 |
248 { | 246 { |
249 TestLogPrefService pref_service; | 247 TestLogPrefService pref_service; |
250 MetricsLogManager log_manager(&pref_service, 0); | 248 MetricsLogManager log_manager(&pref_service, 0); |
251 log_manager.LoadPersistedUnsentLogs(); | 249 log_manager.LoadPersistedUnsentLogs(); |
252 | 250 |
253 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 251 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
254 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); | 252 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); |
255 log_manager.FinishCurrentLog(); | 253 log_manager.FinishCurrentLog(); |
256 log_manager.StageNextLogForUpload(); | 254 log_manager.StageNextLogForUpload(); |
257 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE); | |
258 log_manager.PersistUnsentLogs(); | 255 log_manager.PersistUnsentLogs(); |
259 | 256 |
260 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); | 257 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
261 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 258 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
262 } | 259 } |
263 } | 260 } |
264 | 261 |
265 TEST(MetricsLogManagerTest, LargeLogDiscarding) { | 262 TEST(MetricsLogManagerTest, LargeLogDiscarding) { |
266 TestMetricsServiceClient client; | 263 TestMetricsServiceClient client; |
267 TestLogPrefService pref_service; | 264 TestLogPrefService pref_service; |
268 // Set the size threshold very low, to verify that it's honored. | 265 // Set the size threshold very low, to verify that it's honored. |
269 MetricsLogManager log_manager(&pref_service, 1); | 266 MetricsLogManager log_manager(&pref_service, 1); |
270 log_manager.LoadPersistedUnsentLogs(); | 267 log_manager.LoadPersistedUnsentLogs(); |
271 | 268 |
272 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 269 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
273 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); | 270 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); |
274 log_manager.FinishCurrentLog(); | 271 log_manager.FinishCurrentLog(); |
275 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 272 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
276 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | 273 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
277 log_manager.FinishCurrentLog(); | 274 log_manager.FinishCurrentLog(); |
278 | 275 |
279 // Only the ongoing log should be written out, due to the threshold. | 276 // Only the ongoing log should be written out, due to the threshold. |
280 log_manager.PersistUnsentLogs(); | 277 log_manager.PersistUnsentLogs(); |
281 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); | 278 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
282 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 279 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
283 } | 280 } |
284 | 281 |
285 TEST(MetricsLogManagerTest, ProvisionalStoreStandardFlow) { | 282 TEST(MetricsLogManagerTest, DiscardOrder) { |
| 283 // Ensure that the correct log is discarded if new logs are pushed while |
| 284 // a log is staged. |
286 TestMetricsServiceClient client; | 285 TestMetricsServiceClient client; |
287 | |
288 // Ensure that provisional store works, and discards the correct log. | |
289 { | 286 { |
290 TestLogPrefService pref_service; | 287 TestLogPrefService pref_service; |
291 MetricsLogManager log_manager(&pref_service, 0); | 288 MetricsLogManager log_manager(&pref_service, 0); |
292 log_manager.LoadPersistedUnsentLogs(); | 289 log_manager.LoadPersistedUnsentLogs(); |
293 | 290 |
294 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 291 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
295 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); | 292 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); |
296 log_manager.FinishCurrentLog(); | 293 log_manager.FinishCurrentLog(); |
297 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | 294 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
298 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | 295 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
299 log_manager.StageNextLogForUpload(); | 296 log_manager.StageNextLogForUpload(); |
300 log_manager.StoreStagedLogAsUnsent(PersistedLogs::PROVISIONAL_STORE); | |
301 log_manager.FinishCurrentLog(); | 297 log_manager.FinishCurrentLog(); |
302 log_manager.DiscardLastProvisionalStore(); | 298 log_manager.DiscardStagedLog(); |
303 | 299 |
304 log_manager.PersistUnsentLogs(); | 300 log_manager.PersistUnsentLogs(); |
305 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); | 301 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
306 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | 302 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
307 } | 303 } |
308 } | 304 } |
309 | |
310 TEST(MetricsLogManagerTest, ProvisionalStoreNoop) { | |
311 TestMetricsServiceClient client; | |
312 | |
313 // Ensure that trying to drop a sent log is a no-op, even if another log has | |
314 // since been staged. | |
315 { | |
316 TestLogPrefService pref_service; | |
317 MetricsLogManager log_manager(&pref_service, 0); | |
318 log_manager.LoadPersistedUnsentLogs(); | |
319 | |
320 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | |
321 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | |
322 log_manager.FinishCurrentLog(); | |
323 log_manager.StageNextLogForUpload(); | |
324 log_manager.StoreStagedLogAsUnsent(PersistedLogs::PROVISIONAL_STORE); | |
325 log_manager.StageNextLogForUpload(); | |
326 log_manager.DiscardStagedLog(); | |
327 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | |
328 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | |
329 log_manager.FinishCurrentLog(); | |
330 log_manager.StageNextLogForUpload(); | |
331 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE); | |
332 log_manager.DiscardLastProvisionalStore(); | |
333 | |
334 log_manager.PersistUnsentLogs(); | |
335 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | |
336 } | |
337 | |
338 // Ensure that trying to drop more than once is a no-op | |
339 { | |
340 TestLogPrefService pref_service; | |
341 MetricsLogManager log_manager(&pref_service, 0); | |
342 log_manager.LoadPersistedUnsentLogs(); | |
343 | |
344 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | |
345 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | |
346 log_manager.FinishCurrentLog(); | |
347 log_manager.StageNextLogForUpload(); | |
348 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE); | |
349 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( | |
350 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); | |
351 log_manager.FinishCurrentLog(); | |
352 log_manager.StageNextLogForUpload(); | |
353 log_manager.StoreStagedLogAsUnsent(PersistedLogs::PROVISIONAL_STORE); | |
354 log_manager.DiscardLastProvisionalStore(); | |
355 log_manager.DiscardLastProvisionalStore(); | |
356 | |
357 log_manager.PersistUnsentLogs(); | |
358 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); | |
359 } | |
360 } | |
361 | 305 |
362 } // namespace metrics | 306 } // namespace metrics |
OLD | NEW |