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 |
11 #include "base/prefs/pref_registry_simple.h" | 11 #include "base/prefs/pref_registry_simple.h" |
12 #include "base/prefs/testing_pref_service.h" | 12 #include "base/prefs/testing_pref_service.h" |
13 #include "components/metrics/metrics_log_base.h" | 13 #include "components/metrics/metrics_log.h" |
14 #include "components/metrics/metrics_pref_names.h" | 14 #include "components/metrics/metrics_pref_names.h" |
| 15 #include "components/metrics/test_metrics_service_client.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
16 | 17 |
17 namespace metrics { | 18 namespace metrics { |
18 | 19 |
19 namespace { | 20 namespace { |
20 | 21 |
21 // Dummy serializer that just stores logs in memory. | 22 // Dummy serializer that just stores logs in memory. |
22 class TestLogPrefService : public TestingPrefServiceSimple { | 23 class TestLogPrefService : public TestingPrefServiceSimple { |
23 public: | 24 public: |
24 TestLogPrefService() { | 25 TestLogPrefService() { |
25 registry()->RegisterListPref(prefs::kMetricsInitialLogs); | 26 registry()->RegisterListPref(prefs::kMetricsInitialLogs); |
26 registry()->RegisterListPref(prefs::kMetricsOngoingLogs); | 27 registry()->RegisterListPref(prefs::kMetricsOngoingLogs); |
27 } | 28 } |
| 29 |
28 // Returns the number of logs of the given type. | 30 // Returns the number of logs of the given type. |
29 size_t TypeCount(MetricsLogManager::LogType log_type) { | 31 size_t TypeCount(MetricsLog::LogType log_type) { |
30 int list_length = 0; | 32 int list_length = 0; |
31 if (log_type == MetricsLogBase::INITIAL_STABILITY_LOG) | 33 if (log_type == MetricsLog::INITIAL_STABILITY_LOG) |
32 list_length = GetList(prefs::kMetricsInitialLogs)->GetSize(); | 34 list_length = GetList(prefs::kMetricsInitialLogs)->GetSize(); |
33 else | 35 else |
34 list_length = GetList(prefs::kMetricsOngoingLogs)->GetSize(); | 36 list_length = GetList(prefs::kMetricsOngoingLogs)->GetSize(); |
35 return list_length ? list_length - 2 : 0; | 37 return list_length ? list_length - 2 : 0; |
36 } | 38 } |
37 }; | 39 }; |
38 | 40 |
39 } // namespace | 41 } // namespace |
40 | 42 |
41 TEST(MetricsLogManagerTest, StandardFlow) { | 43 TEST(MetricsLogManagerTest, StandardFlow) { |
| 44 TestMetricsServiceClient client; |
42 TestLogPrefService pref_service; | 45 TestLogPrefService pref_service; |
43 MetricsLogManager log_manager(&pref_service, 0); | 46 MetricsLogManager log_manager(&pref_service, 0); |
44 | 47 |
45 // Make sure a new manager has a clean slate. | 48 // Make sure a new manager has a clean slate. |
46 EXPECT_EQ(NULL, log_manager.current_log()); | 49 EXPECT_EQ(NULL, log_manager.current_log()); |
47 EXPECT_FALSE(log_manager.has_staged_log()); | 50 EXPECT_FALSE(log_manager.has_staged_log()); |
48 EXPECT_FALSE(log_manager.has_unsent_logs()); | 51 EXPECT_FALSE(log_manager.has_unsent_logs()); |
49 | 52 |
50 // Check that the normal flow works. | 53 // Check that the normal flow works. |
51 MetricsLogBase* initial_log = | 54 MetricsLog* initial_log = new MetricsLog( |
52 new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"); | 55 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service); |
53 log_manager.BeginLoggingWithLog(make_scoped_ptr(initial_log)); | 56 log_manager.BeginLoggingWithLog(make_scoped_ptr(initial_log)); |
54 EXPECT_EQ(initial_log, log_manager.current_log()); | 57 EXPECT_EQ(initial_log, log_manager.current_log()); |
55 EXPECT_FALSE(log_manager.has_staged_log()); | 58 EXPECT_FALSE(log_manager.has_staged_log()); |
56 | 59 |
57 log_manager.FinishCurrentLog(); | 60 log_manager.FinishCurrentLog(); |
58 EXPECT_EQ(NULL, log_manager.current_log()); | 61 EXPECT_EQ(NULL, log_manager.current_log()); |
59 EXPECT_TRUE(log_manager.has_unsent_logs()); | 62 EXPECT_TRUE(log_manager.has_unsent_logs()); |
60 EXPECT_FALSE(log_manager.has_staged_log()); | 63 EXPECT_FALSE(log_manager.has_staged_log()); |
61 | 64 |
62 MetricsLogBase* second_log = | 65 MetricsLog* second_log = |
63 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version"); | 66 new MetricsLog("id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service); |
64 log_manager.BeginLoggingWithLog(make_scoped_ptr(second_log)); | 67 log_manager.BeginLoggingWithLog(make_scoped_ptr(second_log)); |
65 EXPECT_EQ(second_log, log_manager.current_log()); | 68 EXPECT_EQ(second_log, log_manager.current_log()); |
66 | 69 |
67 log_manager.StageNextLogForUpload(); | 70 log_manager.StageNextLogForUpload(); |
68 EXPECT_TRUE(log_manager.has_staged_log()); | 71 EXPECT_TRUE(log_manager.has_staged_log()); |
69 EXPECT_FALSE(log_manager.staged_log().empty()); | 72 EXPECT_FALSE(log_manager.staged_log().empty()); |
70 | 73 |
71 log_manager.DiscardStagedLog(); | 74 log_manager.DiscardStagedLog(); |
72 EXPECT_EQ(second_log, log_manager.current_log()); | 75 EXPECT_EQ(second_log, log_manager.current_log()); |
73 EXPECT_FALSE(log_manager.has_staged_log()); | 76 EXPECT_FALSE(log_manager.has_staged_log()); |
74 EXPECT_FALSE(log_manager.has_unsent_logs()); | 77 EXPECT_FALSE(log_manager.has_unsent_logs()); |
75 | 78 |
76 EXPECT_FALSE(log_manager.has_unsent_logs()); | 79 EXPECT_FALSE(log_manager.has_unsent_logs()); |
77 } | 80 } |
78 | 81 |
79 TEST(MetricsLogManagerTest, AbandonedLog) { | 82 TEST(MetricsLogManagerTest, AbandonedLog) { |
| 83 TestMetricsServiceClient client; |
80 TestLogPrefService pref_service; | 84 TestLogPrefService pref_service; |
81 MetricsLogManager log_manager(&pref_service, 0); | 85 MetricsLogManager log_manager(&pref_service, 0); |
82 | 86 |
83 MetricsLogBase* dummy_log = | 87 MetricsLog* dummy_log = new MetricsLog( |
84 new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"); | 88 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service); |
85 log_manager.BeginLoggingWithLog(make_scoped_ptr(dummy_log)); | 89 log_manager.BeginLoggingWithLog(make_scoped_ptr(dummy_log)); |
86 EXPECT_EQ(dummy_log, log_manager.current_log()); | 90 EXPECT_EQ(dummy_log, log_manager.current_log()); |
87 | 91 |
88 log_manager.DiscardCurrentLog(); | 92 log_manager.DiscardCurrentLog(); |
89 EXPECT_EQ(NULL, log_manager.current_log()); | 93 EXPECT_EQ(NULL, log_manager.current_log()); |
90 EXPECT_FALSE(log_manager.has_staged_log()); | 94 EXPECT_FALSE(log_manager.has_staged_log()); |
91 } | 95 } |
92 | 96 |
93 TEST(MetricsLogManagerTest, InterjectedLog) { | 97 TEST(MetricsLogManagerTest, InterjectedLog) { |
| 98 TestMetricsServiceClient client; |
94 TestLogPrefService pref_service; | 99 TestLogPrefService pref_service; |
95 MetricsLogManager log_manager(&pref_service, 0); | 100 MetricsLogManager log_manager(&pref_service, 0); |
96 | 101 |
97 MetricsLogBase* ongoing_log = | 102 MetricsLog* ongoing_log = |
98 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v"); | 103 new MetricsLog("id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service); |
99 MetricsLogBase* temp_log = | 104 MetricsLog* temp_log = new MetricsLog( |
100 new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"); | 105 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service); |
101 | 106 |
102 log_manager.BeginLoggingWithLog(make_scoped_ptr(ongoing_log)); | 107 log_manager.BeginLoggingWithLog(make_scoped_ptr(ongoing_log)); |
103 EXPECT_EQ(ongoing_log, log_manager.current_log()); | 108 EXPECT_EQ(ongoing_log, log_manager.current_log()); |
104 | 109 |
105 log_manager.PauseCurrentLog(); | 110 log_manager.PauseCurrentLog(); |
106 EXPECT_EQ(NULL, log_manager.current_log()); | 111 EXPECT_EQ(NULL, log_manager.current_log()); |
107 | 112 |
108 log_manager.BeginLoggingWithLog(make_scoped_ptr(temp_log)); | 113 log_manager.BeginLoggingWithLog(make_scoped_ptr(temp_log)); |
109 EXPECT_EQ(temp_log, log_manager.current_log()); | 114 EXPECT_EQ(temp_log, log_manager.current_log()); |
110 log_manager.FinishCurrentLog(); | 115 log_manager.FinishCurrentLog(); |
111 EXPECT_EQ(NULL, log_manager.current_log()); | 116 EXPECT_EQ(NULL, log_manager.current_log()); |
112 | 117 |
113 log_manager.ResumePausedLog(); | 118 log_manager.ResumePausedLog(); |
114 EXPECT_EQ(ongoing_log, log_manager.current_log()); | 119 EXPECT_EQ(ongoing_log, log_manager.current_log()); |
115 | 120 |
116 EXPECT_FALSE(log_manager.has_staged_log()); | 121 EXPECT_FALSE(log_manager.has_staged_log()); |
117 log_manager.StageNextLogForUpload(); | 122 log_manager.StageNextLogForUpload(); |
118 log_manager.DiscardStagedLog(); | 123 log_manager.DiscardStagedLog(); |
119 EXPECT_FALSE(log_manager.has_unsent_logs()); | 124 EXPECT_FALSE(log_manager.has_unsent_logs()); |
120 } | 125 } |
121 | 126 |
122 TEST(MetricsLogManagerTest, InterjectedLogPreservesType) { | 127 TEST(MetricsLogManagerTest, InterjectedLogPreservesType) { |
| 128 TestMetricsServiceClient client; |
123 TestLogPrefService pref_service; | 129 TestLogPrefService pref_service; |
124 MetricsLogManager log_manager(&pref_service, 0); | 130 MetricsLogManager log_manager(&pref_service, 0); |
125 log_manager.LoadPersistedUnsentLogs(); | 131 log_manager.LoadPersistedUnsentLogs(); |
126 | 132 |
127 log_manager.BeginLoggingWithLog(make_scoped_ptr( | 133 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
128 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v"))); | 134 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
129 log_manager.PauseCurrentLog(); | 135 log_manager.PauseCurrentLog(); |
130 log_manager.BeginLoggingWithLog(make_scoped_ptr( | 136 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
131 new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"))); | 137 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); |
132 log_manager.FinishCurrentLog(); | 138 log_manager.FinishCurrentLog(); |
133 log_manager.ResumePausedLog(); | 139 log_manager.ResumePausedLog(); |
134 log_manager.StageNextLogForUpload(); | 140 log_manager.StageNextLogForUpload(); |
135 log_manager.DiscardStagedLog(); | 141 log_manager.DiscardStagedLog(); |
136 | 142 |
137 // Verify that the remaining log (which is the original ongoing log) still | 143 // Verify that the remaining log (which is the original ongoing log) still |
138 // has the right type. | 144 // has the right type. |
139 log_manager.FinishCurrentLog(); | 145 log_manager.FinishCurrentLog(); |
140 log_manager.PersistUnsentLogs(); | 146 log_manager.PersistUnsentLogs(); |
141 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLogBase::INITIAL_STABILITY_LOG)); | 147 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
142 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); | 148 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
143 } | 149 } |
144 | 150 |
145 TEST(MetricsLogManagerTest, StoreAndLoad) { | 151 TEST(MetricsLogManagerTest, StoreAndLoad) { |
| 152 TestMetricsServiceClient client; |
146 TestLogPrefService pref_service; | 153 TestLogPrefService pref_service; |
147 // 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 |
148 // leadup to quitting, then persist as would be done on quit. | 155 // leadup to quitting, then persist as would be done on quit. |
149 { | 156 { |
150 MetricsLogManager log_manager(&pref_service, 0); | 157 MetricsLogManager log_manager(&pref_service, 0); |
151 log_manager.LoadPersistedUnsentLogs(); | 158 log_manager.LoadPersistedUnsentLogs(); |
152 | 159 |
153 // Simulate a log having already been unsent from a previous session. | 160 // Simulate a log having already been unsent from a previous session. |
154 { | 161 { |
155 std::string log("proto"); | 162 std::string log("proto"); |
156 metrics::PersistedLogs ongoing_logs( | 163 metrics::PersistedLogs ongoing_logs( |
157 &pref_service, prefs::kMetricsOngoingLogs, 1, 1, 0); | 164 &pref_service, prefs::kMetricsOngoingLogs, 1, 1, 0); |
158 ongoing_logs.StoreLog(&log); | 165 ongoing_logs.StoreLog(&log); |
159 ongoing_logs.SerializeLogs(); | 166 ongoing_logs.SerializeLogs(); |
160 } | 167 } |
161 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); | 168 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
162 EXPECT_FALSE(log_manager.has_unsent_logs()); | 169 EXPECT_FALSE(log_manager.has_unsent_logs()); |
163 log_manager.LoadPersistedUnsentLogs(); | 170 log_manager.LoadPersistedUnsentLogs(); |
164 EXPECT_TRUE(log_manager.has_unsent_logs()); | 171 EXPECT_TRUE(log_manager.has_unsent_logs()); |
165 | 172 |
166 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLogBase( | 173 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
167 "id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"))); | 174 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); |
168 log_manager.FinishCurrentLog(); | 175 log_manager.FinishCurrentLog(); |
169 log_manager.BeginLoggingWithLog(make_scoped_ptr( | 176 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
170 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v"))); | 177 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
171 log_manager.StageNextLogForUpload(); | 178 log_manager.StageNextLogForUpload(); |
172 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); | 179 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); |
173 log_manager.FinishCurrentLog(); | 180 log_manager.FinishCurrentLog(); |
174 | 181 |
175 // Nothing should be written out until PersistUnsentLogs is called. | 182 // Nothing should be written out until PersistUnsentLogs is called. |
176 EXPECT_EQ(0U, pref_service.TypeCount( | 183 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
177 MetricsLogBase::INITIAL_STABILITY_LOG)); | 184 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
178 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); | |
179 log_manager.PersistUnsentLogs(); | 185 log_manager.PersistUnsentLogs(); |
180 EXPECT_EQ(1U, pref_service.TypeCount( | 186 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
181 MetricsLogBase::INITIAL_STABILITY_LOG)); | 187 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
182 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); | |
183 } | 188 } |
184 | 189 |
185 // Now simulate the relaunch, ensure that the log manager restores | 190 // Now simulate the relaunch, ensure that the log manager restores |
186 // everything correctly, and verify that once the are handled they are not | 191 // everything correctly, and verify that once the are handled they are not |
187 // re-persisted. | 192 // re-persisted. |
188 { | 193 { |
189 MetricsLogManager log_manager(&pref_service, 0); | 194 MetricsLogManager log_manager(&pref_service, 0); |
190 log_manager.LoadPersistedUnsentLogs(); | 195 log_manager.LoadPersistedUnsentLogs(); |
191 EXPECT_TRUE(log_manager.has_unsent_logs()); | 196 EXPECT_TRUE(log_manager.has_unsent_logs()); |
192 | 197 |
193 log_manager.StageNextLogForUpload(); | 198 log_manager.StageNextLogForUpload(); |
194 log_manager.DiscardStagedLog(); | 199 log_manager.DiscardStagedLog(); |
195 // The initial log should be sent first; update the persisted storage to | 200 // The initial log should be sent first; update the persisted storage to |
196 // verify. | 201 // verify. |
197 log_manager.PersistUnsentLogs(); | 202 log_manager.PersistUnsentLogs(); |
198 EXPECT_EQ(0U, pref_service.TypeCount( | 203 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
199 MetricsLogBase::INITIAL_STABILITY_LOG)); | 204 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
200 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); | |
201 | 205 |
202 // Handle the first ongoing log. | 206 // Handle the first ongoing log. |
203 log_manager.StageNextLogForUpload(); | 207 log_manager.StageNextLogForUpload(); |
204 log_manager.DiscardStagedLog(); | 208 log_manager.DiscardStagedLog(); |
205 EXPECT_TRUE(log_manager.has_unsent_logs()); | 209 EXPECT_TRUE(log_manager.has_unsent_logs()); |
206 | 210 |
207 // Handle the last log. | 211 // Handle the last log. |
208 log_manager.StageNextLogForUpload(); | 212 log_manager.StageNextLogForUpload(); |
209 log_manager.DiscardStagedLog(); | 213 log_manager.DiscardStagedLog(); |
210 EXPECT_FALSE(log_manager.has_unsent_logs()); | 214 EXPECT_FALSE(log_manager.has_unsent_logs()); |
211 | 215 |
212 // Nothing should have changed "on disk" since PersistUnsentLogs hasn't been | 216 // Nothing should have changed "on disk" since PersistUnsentLogs hasn't been |
213 // called again. | 217 // called again. |
214 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); | 218 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
215 // Persist, and make sure nothing is left. | 219 // Persist, and make sure nothing is left. |
216 log_manager.PersistUnsentLogs(); | 220 log_manager.PersistUnsentLogs(); |
217 EXPECT_EQ(0U, pref_service.TypeCount( | 221 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
218 MetricsLogBase::INITIAL_STABILITY_LOG)); | 222 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
219 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); | |
220 } | 223 } |
221 } | 224 } |
222 | 225 |
223 TEST(MetricsLogManagerTest, StoreStagedLogTypes) { | 226 TEST(MetricsLogManagerTest, StoreStagedLogTypes) { |
| 227 TestMetricsServiceClient client; |
| 228 |
224 // Ensure that types are preserved when storing staged logs. | 229 // Ensure that types are preserved when storing staged logs. |
225 { | 230 { |
226 TestLogPrefService pref_service; | 231 TestLogPrefService pref_service; |
227 MetricsLogManager log_manager(&pref_service, 0); | 232 MetricsLogManager log_manager(&pref_service, 0); |
228 log_manager.LoadPersistedUnsentLogs(); | 233 log_manager.LoadPersistedUnsentLogs(); |
229 | 234 |
230 log_manager.BeginLoggingWithLog(make_scoped_ptr( | 235 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
231 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version"))); | 236 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
232 log_manager.FinishCurrentLog(); | 237 log_manager.FinishCurrentLog(); |
233 log_manager.StageNextLogForUpload(); | 238 log_manager.StageNextLogForUpload(); |
234 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); | 239 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); |
235 log_manager.PersistUnsentLogs(); | 240 log_manager.PersistUnsentLogs(); |
236 | 241 |
237 EXPECT_EQ(0U, pref_service.TypeCount( | 242 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
238 MetricsLogBase::INITIAL_STABILITY_LOG)); | 243 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
239 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); | |
240 } | 244 } |
241 | 245 |
242 { | 246 { |
243 TestLogPrefService pref_service; | 247 TestLogPrefService pref_service; |
244 MetricsLogManager log_manager(&pref_service, 0); | 248 MetricsLogManager log_manager(&pref_service, 0); |
245 log_manager.LoadPersistedUnsentLogs(); | 249 log_manager.LoadPersistedUnsentLogs(); |
246 | 250 |
247 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLogBase( | 251 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
248 "id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"))); | 252 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); |
249 log_manager.FinishCurrentLog(); | 253 log_manager.FinishCurrentLog(); |
250 log_manager.StageNextLogForUpload(); | 254 log_manager.StageNextLogForUpload(); |
251 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); | 255 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); |
252 log_manager.PersistUnsentLogs(); | 256 log_manager.PersistUnsentLogs(); |
253 | 257 |
254 EXPECT_EQ(1U, pref_service.TypeCount( | 258 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
255 MetricsLogBase::INITIAL_STABILITY_LOG)); | 259 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
256 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); | |
257 } | 260 } |
258 } | 261 } |
259 | 262 |
260 TEST(MetricsLogManagerTest, LargeLogDiscarding) { | 263 TEST(MetricsLogManagerTest, LargeLogDiscarding) { |
| 264 TestMetricsServiceClient client; |
261 TestLogPrefService pref_service; | 265 TestLogPrefService pref_service; |
262 // Set the size threshold very low, to verify that it's honored. | 266 // Set the size threshold very low, to verify that it's honored. |
263 MetricsLogManager log_manager(&pref_service, 1); | 267 MetricsLogManager log_manager(&pref_service, 1); |
264 log_manager.LoadPersistedUnsentLogs(); | 268 log_manager.LoadPersistedUnsentLogs(); |
265 | 269 |
266 log_manager.BeginLoggingWithLog(make_scoped_ptr( | 270 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
267 new MetricsLogBase("id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"))); | 271 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); |
268 log_manager.FinishCurrentLog(); | 272 log_manager.FinishCurrentLog(); |
269 log_manager.BeginLoggingWithLog(make_scoped_ptr( | 273 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
270 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v"))); | 274 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
271 log_manager.FinishCurrentLog(); | 275 log_manager.FinishCurrentLog(); |
272 | 276 |
273 // Only the ongoing log should be written out, due to the threshold. | 277 // Only the ongoing log should be written out, due to the threshold. |
274 log_manager.PersistUnsentLogs(); | 278 log_manager.PersistUnsentLogs(); |
275 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::INITIAL_STABILITY_LOG)); | 279 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
276 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); | 280 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
277 } | 281 } |
278 | 282 |
279 TEST(MetricsLogManagerTest, ProvisionalStoreStandardFlow) { | 283 TEST(MetricsLogManagerTest, ProvisionalStoreStandardFlow) { |
| 284 TestMetricsServiceClient client; |
| 285 |
280 // Ensure that provisional store works, and discards the correct log. | 286 // Ensure that provisional store works, and discards the correct log. |
281 { | 287 { |
282 TestLogPrefService pref_service; | 288 TestLogPrefService pref_service; |
283 MetricsLogManager log_manager(&pref_service, 0); | 289 MetricsLogManager log_manager(&pref_service, 0); |
284 log_manager.LoadPersistedUnsentLogs(); | 290 log_manager.LoadPersistedUnsentLogs(); |
285 | 291 |
286 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLogBase( | 292 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
287 "id", 0, MetricsLogBase::INITIAL_STABILITY_LOG, "v"))); | 293 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); |
288 log_manager.FinishCurrentLog(); | 294 log_manager.FinishCurrentLog(); |
289 log_manager.BeginLoggingWithLog(make_scoped_ptr( | 295 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
290 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "v"))); | 296 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
291 log_manager.StageNextLogForUpload(); | 297 log_manager.StageNextLogForUpload(); |
292 log_manager.StoreStagedLogAsUnsent( | 298 log_manager.StoreStagedLogAsUnsent( |
293 metrics::PersistedLogs::PROVISIONAL_STORE); | 299 metrics::PersistedLogs::PROVISIONAL_STORE); |
294 log_manager.FinishCurrentLog(); | 300 log_manager.FinishCurrentLog(); |
295 log_manager.DiscardLastProvisionalStore(); | 301 log_manager.DiscardLastProvisionalStore(); |
296 | 302 |
297 log_manager.PersistUnsentLogs(); | 303 log_manager.PersistUnsentLogs(); |
298 EXPECT_EQ(0U, pref_service.TypeCount( | 304 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); |
299 MetricsLogBase::INITIAL_STABILITY_LOG)); | 305 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
300 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); | |
301 } | 306 } |
302 } | 307 } |
303 | 308 |
304 TEST(MetricsLogManagerTest, ProvisionalStoreNoop) { | 309 TEST(MetricsLogManagerTest, ProvisionalStoreNoop) { |
| 310 TestMetricsServiceClient client; |
| 311 |
305 // Ensure that trying to drop a sent log is a no-op, even if another log has | 312 // Ensure that trying to drop a sent log is a no-op, even if another log has |
306 // since been staged. | 313 // since been staged. |
307 { | 314 { |
308 TestLogPrefService pref_service; | 315 TestLogPrefService pref_service; |
309 MetricsLogManager log_manager(&pref_service, 0); | 316 MetricsLogManager log_manager(&pref_service, 0); |
310 log_manager.LoadPersistedUnsentLogs(); | 317 log_manager.LoadPersistedUnsentLogs(); |
311 | 318 |
312 log_manager.BeginLoggingWithLog(make_scoped_ptr( | 319 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
313 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version"))); | 320 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
314 log_manager.FinishCurrentLog(); | 321 log_manager.FinishCurrentLog(); |
315 log_manager.StageNextLogForUpload(); | 322 log_manager.StageNextLogForUpload(); |
316 log_manager.StoreStagedLogAsUnsent( | 323 log_manager.StoreStagedLogAsUnsent( |
317 metrics::PersistedLogs::PROVISIONAL_STORE); | 324 metrics::PersistedLogs::PROVISIONAL_STORE); |
318 log_manager.StageNextLogForUpload(); | 325 log_manager.StageNextLogForUpload(); |
319 log_manager.DiscardStagedLog(); | 326 log_manager.DiscardStagedLog(); |
320 log_manager.BeginLoggingWithLog(make_scoped_ptr( | 327 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
321 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version"))); | 328 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
322 log_manager.FinishCurrentLog(); | 329 log_manager.FinishCurrentLog(); |
323 log_manager.StageNextLogForUpload(); | 330 log_manager.StageNextLogForUpload(); |
324 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); | 331 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); |
325 log_manager.DiscardLastProvisionalStore(); | 332 log_manager.DiscardLastProvisionalStore(); |
326 | 333 |
327 log_manager.PersistUnsentLogs(); | 334 log_manager.PersistUnsentLogs(); |
328 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); | 335 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
329 } | 336 } |
330 | 337 |
331 // Ensure that trying to drop more than once is a no-op | 338 // Ensure that trying to drop more than once is a no-op |
332 { | 339 { |
333 TestLogPrefService pref_service; | 340 TestLogPrefService pref_service; |
334 MetricsLogManager log_manager(&pref_service, 0); | 341 MetricsLogManager log_manager(&pref_service, 0); |
335 log_manager.LoadPersistedUnsentLogs(); | 342 log_manager.LoadPersistedUnsentLogs(); |
336 | 343 |
337 log_manager.BeginLoggingWithLog(make_scoped_ptr( | 344 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
338 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version"))); | 345 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
339 log_manager.FinishCurrentLog(); | 346 log_manager.FinishCurrentLog(); |
340 log_manager.StageNextLogForUpload(); | 347 log_manager.StageNextLogForUpload(); |
341 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); | 348 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); |
342 log_manager.BeginLoggingWithLog(make_scoped_ptr( | 349 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( |
343 new MetricsLogBase("id", 0, MetricsLogBase::ONGOING_LOG, "version"))); | 350 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); |
344 log_manager.FinishCurrentLog(); | 351 log_manager.FinishCurrentLog(); |
345 log_manager.StageNextLogForUpload(); | 352 log_manager.StageNextLogForUpload(); |
346 log_manager.StoreStagedLogAsUnsent( | 353 log_manager.StoreStagedLogAsUnsent( |
347 metrics::PersistedLogs::PROVISIONAL_STORE); | 354 metrics::PersistedLogs::PROVISIONAL_STORE); |
348 log_manager.DiscardLastProvisionalStore(); | 355 log_manager.DiscardLastProvisionalStore(); |
349 log_manager.DiscardLastProvisionalStore(); | 356 log_manager.DiscardLastProvisionalStore(); |
350 | 357 |
351 log_manager.PersistUnsentLogs(); | 358 log_manager.PersistUnsentLogs(); |
352 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLogBase::ONGOING_LOG)); | 359 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); |
353 } | 360 } |
354 } | 361 } |
355 | 362 |
356 } // namespace metrics | 363 } // namespace metrics |
OLD | NEW |