| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <string> | 5 #include <string> |
| 6 #include <utility> | 6 #include <utility> |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "chrome/common/metrics/metrics_log_base.h" | 9 #include "chrome/common/metrics/metrics_log_base.h" |
| 10 #include "chrome/common/metrics/metrics_log_manager.h" | 10 #include "chrome/common/metrics/metrics_log_manager.h" |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 62 EXPECT_FALSE(log_manager.has_staged_log()); | 62 EXPECT_FALSE(log_manager.has_staged_log()); |
| 63 | 63 |
| 64 MetricsLogBase* second_log = new MetricsLogBase("id", 0, "version"); | 64 MetricsLogBase* second_log = new MetricsLogBase("id", 0, "version"); |
| 65 log_manager.BeginLoggingWithLog(second_log, MetricsLogManager::ONGOING_LOG); | 65 log_manager.BeginLoggingWithLog(second_log, MetricsLogManager::ONGOING_LOG); |
| 66 EXPECT_EQ(second_log, log_manager.current_log()); | 66 EXPECT_EQ(second_log, log_manager.current_log()); |
| 67 | 67 |
| 68 log_manager.StageNextLogForUpload(); | 68 log_manager.StageNextLogForUpload(); |
| 69 EXPECT_TRUE(log_manager.has_staged_log()); | 69 EXPECT_TRUE(log_manager.has_staged_log()); |
| 70 EXPECT_FALSE(log_manager.staged_log_text().empty()); | 70 EXPECT_FALSE(log_manager.staged_log_text().empty()); |
| 71 | 71 |
| 72 log_manager.DiscardStagedLog(); | 72 log_manager.DiscardStagedLogXml(); |
| 73 log_manager.DiscardStagedLogProto(); |
| 73 EXPECT_EQ(second_log, log_manager.current_log()); | 74 EXPECT_EQ(second_log, log_manager.current_log()); |
| 74 EXPECT_FALSE(log_manager.has_staged_log()); | 75 EXPECT_FALSE(log_manager.has_staged_log()); |
| 75 EXPECT_FALSE(log_manager.has_unsent_logs()); | 76 EXPECT_FALSE(log_manager.has_unsent_logs()); |
| 76 EXPECT_TRUE(log_manager.staged_log_text().empty()); | 77 EXPECT_TRUE(log_manager.staged_log_text().empty()); |
| 77 | 78 |
| 78 EXPECT_FALSE(log_manager.has_unsent_logs()); | 79 EXPECT_FALSE(log_manager.has_unsent_logs()); |
| 79 } | 80 } |
| 80 | 81 |
| 81 TEST(MetricsLogManagerTest, AbandonedLog) { | 82 TEST(MetricsLogManagerTest, AbandonedLog) { |
| 82 MetricsLogManager log_manager; | 83 MetricsLogManager log_manager; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 105 log_manager.BeginLoggingWithLog(temp_log, MetricsLogManager::INITIAL_LOG); | 106 log_manager.BeginLoggingWithLog(temp_log, MetricsLogManager::INITIAL_LOG); |
| 106 EXPECT_EQ(temp_log, log_manager.current_log()); | 107 EXPECT_EQ(temp_log, log_manager.current_log()); |
| 107 log_manager.FinishCurrentLog(); | 108 log_manager.FinishCurrentLog(); |
| 108 EXPECT_EQ(NULL, log_manager.current_log()); | 109 EXPECT_EQ(NULL, log_manager.current_log()); |
| 109 | 110 |
| 110 log_manager.ResumePausedLog(); | 111 log_manager.ResumePausedLog(); |
| 111 EXPECT_EQ(ongoing_log, log_manager.current_log()); | 112 EXPECT_EQ(ongoing_log, log_manager.current_log()); |
| 112 | 113 |
| 113 EXPECT_FALSE(log_manager.has_staged_log()); | 114 EXPECT_FALSE(log_manager.has_staged_log()); |
| 114 log_manager.StageNextLogForUpload(); | 115 log_manager.StageNextLogForUpload(); |
| 115 log_manager.DiscardStagedLog(); | 116 log_manager.DiscardStagedLogXml(); |
| 117 log_manager.DiscardStagedLogProto(); |
| 116 EXPECT_FALSE(log_manager.has_unsent_logs()); | 118 EXPECT_FALSE(log_manager.has_unsent_logs()); |
| 117 } | 119 } |
| 118 | 120 |
| 119 TEST(MetricsLogManagerTest, InterjectedLogPreservesType) { | 121 TEST(MetricsLogManagerTest, InterjectedLogPreservesType) { |
| 120 MetricsLogManager log_manager; | 122 MetricsLogManager log_manager; |
| 121 | 123 |
| 122 MetricsLogBase* ongoing_log = new MetricsLogBase("id", 0, "version"); | 124 MetricsLogBase* ongoing_log = new MetricsLogBase("id", 0, "version"); |
| 123 MetricsLogBase* temp_log = new MetricsLogBase("id", 0, "version"); | 125 MetricsLogBase* temp_log = new MetricsLogBase("id", 0, "version"); |
| 124 | 126 |
| 125 log_manager.BeginLoggingWithLog(ongoing_log, MetricsLogManager::ONGOING_LOG); | 127 log_manager.BeginLoggingWithLog(ongoing_log, MetricsLogManager::ONGOING_LOG); |
| 126 log_manager.PauseCurrentLog(); | 128 log_manager.PauseCurrentLog(); |
| 127 log_manager.BeginLoggingWithLog(temp_log, MetricsLogManager::INITIAL_LOG); | 129 log_manager.BeginLoggingWithLog(temp_log, MetricsLogManager::INITIAL_LOG); |
| 128 log_manager.FinishCurrentLog(); | 130 log_manager.FinishCurrentLog(); |
| 129 log_manager.ResumePausedLog(); | 131 log_manager.ResumePausedLog(); |
| 130 log_manager.StageNextLogForUpload(); | 132 log_manager.StageNextLogForUpload(); |
| 131 log_manager.DiscardStagedLog(); | 133 log_manager.DiscardStagedLogXml(); |
| 134 log_manager.DiscardStagedLogProto(); |
| 132 | 135 |
| 133 // Verify that the remaining log (which is the original ongoing log) still | 136 // Verify that the remaining log (which is the original ongoing log) still |
| 134 // has the right type. | 137 // has the right type. |
| 135 DummyLogSerializer* serializer = new DummyLogSerializer; | 138 DummyLogSerializer* serializer = new DummyLogSerializer; |
| 136 log_manager.set_log_serializer(serializer); | 139 log_manager.set_log_serializer(serializer); |
| 137 log_manager.FinishCurrentLog(); | 140 log_manager.FinishCurrentLog(); |
| 138 log_manager.PersistUnsentLogs(); | 141 log_manager.PersistUnsentLogs(); |
| 139 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); | 142 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); |
| 140 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); | 143 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); |
| 141 } | 144 } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 | 190 |
| 188 DummyLogSerializer* serializer = new DummyLogSerializer; | 191 DummyLogSerializer* serializer = new DummyLogSerializer; |
| 189 serializer->persisted_logs_[MetricsLogManager::INITIAL_LOG] = initial_logs; | 192 serializer->persisted_logs_[MetricsLogManager::INITIAL_LOG] = initial_logs; |
| 190 serializer->persisted_logs_[MetricsLogManager::ONGOING_LOG] = ongoing_logs; | 193 serializer->persisted_logs_[MetricsLogManager::ONGOING_LOG] = ongoing_logs; |
| 191 | 194 |
| 192 log_manager.set_log_serializer(serializer); | 195 log_manager.set_log_serializer(serializer); |
| 193 log_manager.LoadPersistedUnsentLogs(); | 196 log_manager.LoadPersistedUnsentLogs(); |
| 194 EXPECT_TRUE(log_manager.has_unsent_logs()); | 197 EXPECT_TRUE(log_manager.has_unsent_logs()); |
| 195 | 198 |
| 196 log_manager.StageNextLogForUpload(); | 199 log_manager.StageNextLogForUpload(); |
| 197 log_manager.DiscardStagedLog(); | 200 log_manager.DiscardStagedLogXml(); |
| 201 log_manager.DiscardStagedLogProto(); |
| 198 // The initial log should be sent first; update the persisted storage to | 202 // The initial log should be sent first; update the persisted storage to |
| 199 // verify. | 203 // verify. |
| 200 log_manager.PersistUnsentLogs(); | 204 log_manager.PersistUnsentLogs(); |
| 201 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); | 205 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); |
| 202 EXPECT_EQ(2U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); | 206 EXPECT_EQ(2U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); |
| 203 | 207 |
| 204 // Handle the first ongoing log. | 208 // Handle the first ongoing log. |
| 205 log_manager.StageNextLogForUpload(); | 209 log_manager.StageNextLogForUpload(); |
| 206 log_manager.DiscardStagedLog(); | 210 log_manager.DiscardStagedLogXml(); |
| 211 log_manager.DiscardStagedLogProto(); |
| 207 EXPECT_TRUE(log_manager.has_unsent_logs()); | 212 EXPECT_TRUE(log_manager.has_unsent_logs()); |
| 208 | 213 |
| 209 // Handle the last log. | 214 // Handle the last log. |
| 210 log_manager.StageNextLogForUpload(); | 215 log_manager.StageNextLogForUpload(); |
| 211 log_manager.DiscardStagedLog(); | 216 log_manager.DiscardStagedLogXml(); |
| 217 log_manager.DiscardStagedLogProto(); |
| 212 EXPECT_FALSE(log_manager.has_unsent_logs()); | 218 EXPECT_FALSE(log_manager.has_unsent_logs()); |
| 213 | 219 |
| 214 // Nothing should have changed "on disk" since PersistUnsentLogs hasn't been | 220 // Nothing should have changed "on disk" since PersistUnsentLogs hasn't been |
| 215 // called again. | 221 // called again. |
| 216 EXPECT_EQ(2U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); | 222 EXPECT_EQ(2U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); |
| 217 // Persist, and make sure nothing is left. | 223 // Persist, and make sure nothing is left. |
| 218 log_manager.PersistUnsentLogs(); | 224 log_manager.PersistUnsentLogs(); |
| 219 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); | 225 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); |
| 220 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); | 226 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); |
| 221 } | 227 } |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 303 // since been staged. | 309 // since been staged. |
| 304 { | 310 { |
| 305 MetricsLogManager log_manager; | 311 MetricsLogManager log_manager; |
| 306 MetricsLogBase* log1 = new MetricsLogBase("id", 0, "version"); | 312 MetricsLogBase* log1 = new MetricsLogBase("id", 0, "version"); |
| 307 MetricsLogBase* log2 = new MetricsLogBase("id", 0, "version"); | 313 MetricsLogBase* log2 = new MetricsLogBase("id", 0, "version"); |
| 308 log_manager.BeginLoggingWithLog(log1, MetricsLogManager::ONGOING_LOG); | 314 log_manager.BeginLoggingWithLog(log1, MetricsLogManager::ONGOING_LOG); |
| 309 log_manager.FinishCurrentLog(); | 315 log_manager.FinishCurrentLog(); |
| 310 log_manager.StageNextLogForUpload(); | 316 log_manager.StageNextLogForUpload(); |
| 311 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::PROVISIONAL_STORE); | 317 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::PROVISIONAL_STORE); |
| 312 log_manager.StageNextLogForUpload(); | 318 log_manager.StageNextLogForUpload(); |
| 313 log_manager.DiscardStagedLog(); | 319 log_manager.DiscardStagedLogXml(); |
| 320 log_manager.DiscardStagedLogProto(); |
| 314 log_manager.BeginLoggingWithLog(log2, MetricsLogManager::ONGOING_LOG); | 321 log_manager.BeginLoggingWithLog(log2, MetricsLogManager::ONGOING_LOG); |
| 315 log_manager.FinishCurrentLog(); | 322 log_manager.FinishCurrentLog(); |
| 316 log_manager.StageNextLogForUpload(); | 323 log_manager.StageNextLogForUpload(); |
| 317 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::NORMAL_STORE); | 324 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::NORMAL_STORE); |
| 318 log_manager.DiscardLastProvisionalStore(); | 325 log_manager.DiscardLastProvisionalStore(); |
| 319 | 326 |
| 320 DummyLogSerializer* serializer = new DummyLogSerializer; | 327 DummyLogSerializer* serializer = new DummyLogSerializer; |
| 321 log_manager.set_log_serializer(serializer); | 328 log_manager.set_log_serializer(serializer); |
| 322 log_manager.PersistUnsentLogs(); | 329 log_manager.PersistUnsentLogs(); |
| 323 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); | 330 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 338 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::PROVISIONAL_STORE); | 345 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::PROVISIONAL_STORE); |
| 339 log_manager.DiscardLastProvisionalStore(); | 346 log_manager.DiscardLastProvisionalStore(); |
| 340 log_manager.DiscardLastProvisionalStore(); | 347 log_manager.DiscardLastProvisionalStore(); |
| 341 | 348 |
| 342 DummyLogSerializer* serializer = new DummyLogSerializer; | 349 DummyLogSerializer* serializer = new DummyLogSerializer; |
| 343 log_manager.set_log_serializer(serializer); | 350 log_manager.set_log_serializer(serializer); |
| 344 log_manager.PersistUnsentLogs(); | 351 log_manager.PersistUnsentLogs(); |
| 345 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); | 352 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); |
| 346 } | 353 } |
| 347 } | 354 } |
| 355 |
| 356 // Test that discarding just the XML log, then the protobuf log, works. |
| 357 TEST(MetricsLogManagerTest, DiscardXmlLogFirst) { |
| 358 MetricsLogManager log_manager; |
| 359 EXPECT_FALSE(log_manager.has_staged_log()); |
| 360 EXPECT_FALSE(log_manager.has_staged_log_xml()); |
| 361 EXPECT_FALSE(log_manager.has_staged_log_proto()); |
| 362 |
| 363 MetricsLogBase* initial_log = new MetricsLogBase("id", 0, "version"); |
| 364 log_manager.BeginLoggingWithLog(initial_log, MetricsLogManager::INITIAL_LOG); |
| 365 log_manager.FinishCurrentLog(); |
| 366 EXPECT_FALSE(log_manager.has_staged_log()); |
| 367 EXPECT_FALSE(log_manager.has_staged_log_xml()); |
| 368 EXPECT_FALSE(log_manager.has_staged_log_proto()); |
| 369 |
| 370 log_manager.StageNextLogForUpload(); |
| 371 EXPECT_TRUE(log_manager.has_staged_log()); |
| 372 EXPECT_TRUE(log_manager.has_staged_log_xml()); |
| 373 EXPECT_TRUE(log_manager.has_staged_log_proto()); |
| 374 EXPECT_FALSE(log_manager.staged_log_text().empty()); |
| 375 |
| 376 log_manager.DiscardStagedLogXml(); |
| 377 EXPECT_TRUE(log_manager.has_staged_log()); |
| 378 EXPECT_FALSE(log_manager.has_staged_log_xml()); |
| 379 EXPECT_TRUE(log_manager.has_staged_log_proto()); |
| 380 EXPECT_FALSE(log_manager.staged_log_text().empty()); |
| 381 |
| 382 log_manager.DiscardStagedLogProto(); |
| 383 EXPECT_FALSE(log_manager.has_staged_log()); |
| 384 EXPECT_FALSE(log_manager.has_staged_log_xml()); |
| 385 EXPECT_FALSE(log_manager.has_staged_log_proto()); |
| 386 EXPECT_TRUE(log_manager.staged_log_text().empty()); |
| 387 } |
| 388 |
| 389 // Test that discarding just the protobuf log, then the XML log, works. |
| 390 TEST(MetricsLogManagerTest, DiscardProtoLogFirst) { |
| 391 MetricsLogManager log_manager; |
| 392 EXPECT_FALSE(log_manager.has_staged_log()); |
| 393 EXPECT_FALSE(log_manager.has_staged_log_xml()); |
| 394 EXPECT_FALSE(log_manager.has_staged_log_proto()); |
| 395 |
| 396 MetricsLogBase* initial_log = new MetricsLogBase("id", 0, "version"); |
| 397 log_manager.BeginLoggingWithLog(initial_log, MetricsLogManager::INITIAL_LOG); |
| 398 log_manager.FinishCurrentLog(); |
| 399 EXPECT_FALSE(log_manager.has_staged_log()); |
| 400 EXPECT_FALSE(log_manager.has_staged_log_xml()); |
| 401 EXPECT_FALSE(log_manager.has_staged_log_proto()); |
| 402 |
| 403 log_manager.StageNextLogForUpload(); |
| 404 EXPECT_TRUE(log_manager.has_staged_log()); |
| 405 EXPECT_TRUE(log_manager.has_staged_log_xml()); |
| 406 EXPECT_TRUE(log_manager.has_staged_log_proto()); |
| 407 EXPECT_FALSE(log_manager.staged_log_text().empty()); |
| 408 |
| 409 log_manager.DiscardStagedLogProto(); |
| 410 EXPECT_TRUE(log_manager.has_staged_log()); |
| 411 EXPECT_TRUE(log_manager.has_staged_log_xml()); |
| 412 EXPECT_FALSE(log_manager.has_staged_log_proto()); |
| 413 EXPECT_FALSE(log_manager.staged_log_text().empty()); |
| 414 |
| 415 log_manager.DiscardStagedLogXml(); |
| 416 EXPECT_FALSE(log_manager.has_staged_log()); |
| 417 EXPECT_FALSE(log_manager.has_staged_log_xml()); |
| 418 EXPECT_FALSE(log_manager.has_staged_log_proto()); |
| 419 EXPECT_TRUE(log_manager.staged_log_text().empty()); |
| 420 } |
| OLD | NEW |