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> |
| 6 #include <utility> |
| 7 #include <vector> |
| 8 |
5 #include "chrome/common/metrics/metrics_log_base.h" | 9 #include "chrome/common/metrics/metrics_log_base.h" |
6 #include "chrome/common/metrics/metrics_log_manager.h" | 10 #include "chrome/common/metrics/metrics_log_manager.h" |
7 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
8 | 12 |
9 #include <string> | 13 namespace { |
10 #include <vector> | |
11 | 14 |
12 namespace { | |
13 class MetricsLogManagerTest : public testing::Test { | 15 class MetricsLogManagerTest : public testing::Test { |
14 }; | 16 }; |
15 | 17 |
16 // Dummy serializer that just stores logs in memory. | 18 // Dummy serializer that just stores logs in memory. |
17 class DummyLogSerializer : public MetricsLogManager::LogSerializer { | 19 class DummyLogSerializer : public MetricsLogManager::LogSerializer { |
18 public: | 20 public: |
19 virtual void SerializeLogs(const std::vector<std::string>& logs, | 21 virtual void SerializeLogs( |
20 MetricsLogManager::LogType log_type) { | 22 const std::vector<std::pair<std::string, std::string> >& logs, |
| 23 MetricsLogManager::LogType log_type) { |
21 persisted_logs_[log_type] = logs; | 24 persisted_logs_[log_type] = logs; |
22 } | 25 } |
23 | 26 |
24 virtual void DeserializeLogs(MetricsLogManager::LogType log_type, | 27 virtual void DeserializeLogs( |
25 std::vector<std::string>* logs) { | 28 MetricsLogManager::LogType log_type, |
| 29 std::vector<std::pair<std::string, std::string> >* logs) { |
26 ASSERT_NE(static_cast<void*>(NULL), logs); | 30 ASSERT_NE(static_cast<void*>(NULL), logs); |
27 *logs = persisted_logs_[log_type]; | 31 *logs = persisted_logs_[log_type]; |
28 } | 32 } |
29 | 33 |
30 // Returns the number of logs of the given type. | 34 // Returns the number of logs of the given type. |
31 size_t TypeCount(MetricsLogManager::LogType log_type) { | 35 size_t TypeCount(MetricsLogManager::LogType log_type) { |
32 return persisted_logs_[log_type].size(); | 36 return persisted_logs_[log_type].size(); |
33 } | 37 } |
34 | 38 |
35 // In-memory "persitent storage". | 39 // In-memory "persitent storage". |
36 std::vector<std::string> persisted_logs_[2]; | 40 std::vector<std::pair<std::string, std::string> > persisted_logs_[2]; |
37 }; | 41 }; |
38 }; // namespace | 42 |
| 43 } // namespace |
39 | 44 |
40 TEST(MetricsLogManagerTest, StandardFlow) { | 45 TEST(MetricsLogManagerTest, StandardFlow) { |
41 MetricsLogManager log_manager; | 46 MetricsLogManager log_manager; |
42 | 47 |
43 // Make sure a new manager has a clean slate. | 48 // Make sure a new manager has a clean slate. |
44 EXPECT_EQ(NULL, log_manager.current_log()); | 49 EXPECT_EQ(NULL, log_manager.current_log()); |
45 EXPECT_FALSE(log_manager.has_staged_log()); | 50 EXPECT_FALSE(log_manager.has_staged_log()); |
46 EXPECT_FALSE(log_manager.has_unsent_logs()); | 51 EXPECT_FALSE(log_manager.has_unsent_logs()); |
47 | 52 |
48 // Check that the normal flow works. | 53 // Check that the normal flow works. |
49 MetricsLogBase* initial_log = new MetricsLogBase("id", 0, "version"); | 54 MetricsLogBase* initial_log = new MetricsLogBase("id", 0, "version"); |
50 log_manager.BeginLoggingWithLog(initial_log); | 55 log_manager.BeginLoggingWithLog(initial_log); |
51 EXPECT_EQ(initial_log, log_manager.current_log()); | 56 EXPECT_EQ(initial_log, log_manager.current_log()); |
52 EXPECT_FALSE(log_manager.has_staged_log()); | 57 EXPECT_FALSE(log_manager.has_staged_log()); |
53 | 58 |
54 log_manager.StageCurrentLogForUpload(); | 59 log_manager.StageCurrentLogForUpload(); |
55 EXPECT_EQ(NULL, log_manager.current_log()); | 60 EXPECT_EQ(NULL, log_manager.current_log()); |
56 EXPECT_TRUE(log_manager.has_staged_log()); | 61 EXPECT_TRUE(log_manager.has_staged_log()); |
57 EXPECT_FALSE(log_manager.staged_log_text().empty()); | 62 EXPECT_FALSE(log_manager.staged_log_text_xml().empty()); |
| 63 EXPECT_FALSE(log_manager.staged_log_text_proto().empty()); |
58 | 64 |
59 MetricsLogBase* second_log = new MetricsLogBase("id", 0, "version"); | 65 MetricsLogBase* second_log = new MetricsLogBase("id", 0, "version"); |
60 log_manager.BeginLoggingWithLog(second_log); | 66 log_manager.BeginLoggingWithLog(second_log); |
61 EXPECT_EQ(second_log, log_manager.current_log()); | 67 EXPECT_EQ(second_log, log_manager.current_log()); |
62 EXPECT_TRUE(log_manager.has_staged_log()); | 68 EXPECT_TRUE(log_manager.has_staged_log()); |
63 | 69 |
64 log_manager.DiscardStagedLog(); | 70 log_manager.DiscardStagedLog(); |
65 EXPECT_EQ(second_log, log_manager.current_log()); | 71 EXPECT_EQ(second_log, log_manager.current_log()); |
66 EXPECT_FALSE(log_manager.has_staged_log()); | 72 EXPECT_FALSE(log_manager.has_staged_log()); |
67 EXPECT_TRUE(log_manager.staged_log_text().empty()); | 73 EXPECT_TRUE(log_manager.staged_log_text_xml().empty()); |
| 74 EXPECT_TRUE(log_manager.staged_log_text_proto().empty()); |
68 | 75 |
69 EXPECT_FALSE(log_manager.has_unsent_logs()); | 76 EXPECT_FALSE(log_manager.has_unsent_logs()); |
70 } | 77 } |
71 | 78 |
72 TEST(MetricsLogManagerTest, AbandonedLog) { | 79 TEST(MetricsLogManagerTest, AbandonedLog) { |
73 MetricsLogManager log_manager; | 80 MetricsLogManager log_manager; |
74 | 81 |
75 MetricsLogBase* dummy_log = new MetricsLogBase("id", 0, "version"); | 82 MetricsLogBase* dummy_log = new MetricsLogBase("id", 0, "version"); |
76 log_manager.BeginLoggingWithLog(dummy_log); | 83 log_manager.BeginLoggingWithLog(dummy_log); |
77 EXPECT_EQ(dummy_log, log_manager.current_log()); | 84 EXPECT_EQ(dummy_log, log_manager.current_log()); |
(...skipping 24 matching lines...) Expand all Loading... |
102 EXPECT_FALSE(log_manager.has_staged_log()); | 109 EXPECT_FALSE(log_manager.has_staged_log()); |
103 | 110 |
104 log_manager.ResumePausedLog(); | 111 log_manager.ResumePausedLog(); |
105 EXPECT_EQ(ongoing_log, log_manager.current_log()); | 112 EXPECT_EQ(ongoing_log, log_manager.current_log()); |
106 EXPECT_FALSE(log_manager.has_staged_log()); | 113 EXPECT_FALSE(log_manager.has_staged_log()); |
107 | 114 |
108 EXPECT_FALSE(log_manager.has_unsent_logs()); | 115 EXPECT_FALSE(log_manager.has_unsent_logs()); |
109 } | 116 } |
110 | 117 |
111 TEST(MetricsLogManagerTest, StoreAndLoad) { | 118 TEST(MetricsLogManagerTest, StoreAndLoad) { |
112 std::vector<std::string> initial_logs; | 119 std::vector<std::pair<std::string, std::string> > initial_logs; |
113 std::vector<std::string> ongoing_logs; | 120 std::vector<std::pair<std::string, std::string> > ongoing_logs; |
114 | 121 |
115 // Set up some in-progress logging in a scoped log manager simulating the | 122 // Set up some in-progress logging in a scoped log manager simulating the |
116 // leadup to quitting, then persist as would be done on quit. | 123 // leadup to quitting, then persist as would be done on quit. |
117 { | 124 { |
118 MetricsLogManager log_manager; | 125 MetricsLogManager log_manager; |
119 DummyLogSerializer* serializer = new DummyLogSerializer; | 126 DummyLogSerializer* serializer = new DummyLogSerializer; |
120 log_manager.set_log_serializer(serializer); | 127 log_manager.set_log_serializer(serializer); |
121 // Simulate a log having already been unsent from a previous session. | 128 // Simulate a log having already been unsent from a previous session. |
122 serializer->persisted_logs_[MetricsLogManager::ONGOING_LOG].push_back("a"); | 129 serializer->persisted_logs_[MetricsLogManager::ONGOING_LOG].push_back( |
| 130 std::make_pair("xml", "proto")); |
123 EXPECT_FALSE(log_manager.has_unsent_logs()); | 131 EXPECT_FALSE(log_manager.has_unsent_logs()); |
124 log_manager.LoadPersistedUnsentLogs(); | 132 log_manager.LoadPersistedUnsentLogs(); |
125 EXPECT_TRUE(log_manager.has_unsent_logs()); | 133 EXPECT_TRUE(log_manager.has_unsent_logs()); |
126 | 134 |
127 MetricsLogBase* log1 = new MetricsLogBase("id", 0, "version"); | 135 MetricsLogBase* log1 = new MetricsLogBase("id", 0, "version"); |
128 MetricsLogBase* log2 = new MetricsLogBase("id", 0, "version"); | 136 MetricsLogBase* log2 = new MetricsLogBase("id", 0, "version"); |
129 log_manager.BeginLoggingWithLog(log1); | 137 log_manager.BeginLoggingWithLog(log1); |
130 log_manager.StageCurrentLogForUpload(); | 138 log_manager.StageCurrentLogForUpload(); |
131 log_manager.BeginLoggingWithLog(log2); | 139 log_manager.BeginLoggingWithLog(log2); |
132 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::INITIAL_LOG); | 140 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::INITIAL_LOG); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
202 log_manager.BeginLoggingWithLog(log2); | 210 log_manager.BeginLoggingWithLog(log2); |
203 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::INITIAL_LOG); | 211 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::INITIAL_LOG); |
204 log_manager.StageCurrentLogForUpload(); | 212 log_manager.StageCurrentLogForUpload(); |
205 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::ONGOING_LOG); | 213 log_manager.StoreStagedLogAsUnsent(MetricsLogManager::ONGOING_LOG); |
206 | 214 |
207 // Only the ongoing log should be written out, due to the threshold. | 215 // Only the ongoing log should be written out, due to the threshold. |
208 log_manager.PersistUnsentLogs(); | 216 log_manager.PersistUnsentLogs(); |
209 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); | 217 EXPECT_EQ(1U, serializer->TypeCount(MetricsLogManager::INITIAL_LOG)); |
210 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); | 218 EXPECT_EQ(0U, serializer->TypeCount(MetricsLogManager::ONGOING_LOG)); |
211 } | 219 } |
OLD | NEW |