| 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 |