Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: components/metrics/metrics_log_manager_unittest.cc

Issue 318203004: Make MetricsService save compressed logs to local state. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « components/metrics/metrics_log_manager.cc ('k') | components/metrics/metrics_log_uploader.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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.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 "components/metrics/test_metrics_service_client.h"
16 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
17 17
18 namespace metrics { 18 namespace metrics {
19 19
20 namespace { 20 namespace {
21 21
22 // Dummy serializer that just stores logs in memory. 22 // Dummy serializer that just stores logs in memory.
23 class TestLogPrefService : public TestingPrefServiceSimple { 23 class TestLogPrefService : public TestingPrefServiceSimple {
24 public: 24 public:
25 TestLogPrefService() { 25 TestLogPrefService() {
26 registry()->RegisterListPref(prefs::kMetricsInitialLogs); 26 registry()->RegisterListPref(prefs::kMetricsInitialLogs);
27 registry()->RegisterListPref(prefs::kMetricsInitialLogsOld);
27 registry()->RegisterListPref(prefs::kMetricsOngoingLogs); 28 registry()->RegisterListPref(prefs::kMetricsOngoingLogs);
29 registry()->RegisterListPref(prefs::kMetricsOngoingLogsOld);
28 } 30 }
29 31
30 // Returns the number of logs of the given type. 32 // Returns the number of logs of the given type.
31 size_t TypeCount(MetricsLog::LogType log_type) { 33 size_t TypeCount(MetricsLog::LogType log_type) {
32 int list_length = 0; 34 int list_length = 0;
33 if (log_type == MetricsLog::INITIAL_STABILITY_LOG) 35 if (log_type == MetricsLog::INITIAL_STABILITY_LOG)
34 list_length = GetList(prefs::kMetricsInitialLogs)->GetSize(); 36 list_length = GetList(prefs::kMetricsInitialLogs)->GetSize();
35 else 37 else
36 list_length = GetList(prefs::kMetricsOngoingLogs)->GetSize(); 38 list_length = GetList(prefs::kMetricsOngoingLogs)->GetSize();
37 return list_length ? list_length - 2 : 0; 39 return list_length / 2;
38 } 40 }
39 }; 41 };
40 42
41 } // namespace 43 } // namespace
42 44
43 TEST(MetricsLogManagerTest, StandardFlow) { 45 TEST(MetricsLogManagerTest, StandardFlow) {
44 TestMetricsServiceClient client; 46 TestMetricsServiceClient client;
45 TestLogPrefService pref_service; 47 TestLogPrefService pref_service;
46 MetricsLogManager log_manager(&pref_service, 0); 48 MetricsLogManager log_manager(&pref_service, 0);
47 49
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
153 TestLogPrefService pref_service; 155 TestLogPrefService pref_service;
154 // Set up some in-progress logging in a scoped log manager simulating the 156 // 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. 157 // leadup to quitting, then persist as would be done on quit.
156 { 158 {
157 MetricsLogManager log_manager(&pref_service, 0); 159 MetricsLogManager log_manager(&pref_service, 0);
158 log_manager.LoadPersistedUnsentLogs(); 160 log_manager.LoadPersistedUnsentLogs();
159 161
160 // Simulate a log having already been unsent from a previous session. 162 // Simulate a log having already been unsent from a previous session.
161 { 163 {
162 std::string log("proto"); 164 std::string log("proto");
163 metrics::PersistedLogs ongoing_logs( 165 PersistedLogs ongoing_logs(&pref_service, prefs::kMetricsOngoingLogs,
164 &pref_service, prefs::kMetricsOngoingLogs, 1, 1, 0); 166 prefs::kMetricsOngoingLogsOld, 1, 1, 0);
165 ongoing_logs.StoreLog(&log); 167 ongoing_logs.StoreLog(log);
166 ongoing_logs.SerializeLogs(); 168 ongoing_logs.SerializeLogs();
167 } 169 }
168 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); 170 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
169 EXPECT_FALSE(log_manager.has_unsent_logs()); 171 EXPECT_FALSE(log_manager.has_unsent_logs());
170 log_manager.LoadPersistedUnsentLogs(); 172 log_manager.LoadPersistedUnsentLogs();
171 EXPECT_TRUE(log_manager.has_unsent_logs()); 173 EXPECT_TRUE(log_manager.has_unsent_logs());
172 174
173 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( 175 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
174 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); 176 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service)));
175 log_manager.FinishCurrentLog(); 177 log_manager.FinishCurrentLog();
176 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( 178 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
177 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); 179 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
178 log_manager.StageNextLogForUpload(); 180 log_manager.StageNextLogForUpload();
179 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); 181 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE);
180 log_manager.FinishCurrentLog(); 182 log_manager.FinishCurrentLog();
181 183
182 // Nothing should be written out until PersistUnsentLogs is called. 184 // Nothing should be written out until PersistUnsentLogs is called.
183 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); 185 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
184 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); 186 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
185 log_manager.PersistUnsentLogs(); 187 log_manager.PersistUnsentLogs();
186 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); 188 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
187 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); 189 EXPECT_EQ(2U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
188 } 190 }
189 191
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 // Ensure that types are preserved when storing staged logs. 231 // Ensure that types are preserved when storing staged logs.
230 { 232 {
231 TestLogPrefService pref_service; 233 TestLogPrefService pref_service;
232 MetricsLogManager log_manager(&pref_service, 0); 234 MetricsLogManager log_manager(&pref_service, 0);
233 log_manager.LoadPersistedUnsentLogs(); 235 log_manager.LoadPersistedUnsentLogs();
234 236
235 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( 237 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
236 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); 238 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
237 log_manager.FinishCurrentLog(); 239 log_manager.FinishCurrentLog();
238 log_manager.StageNextLogForUpload(); 240 log_manager.StageNextLogForUpload();
239 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); 241 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE);
240 log_manager.PersistUnsentLogs(); 242 log_manager.PersistUnsentLogs();
241 243
242 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); 244 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
243 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); 245 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
244 } 246 }
245 247
246 { 248 {
247 TestLogPrefService pref_service; 249 TestLogPrefService pref_service;
248 MetricsLogManager log_manager(&pref_service, 0); 250 MetricsLogManager log_manager(&pref_service, 0);
249 log_manager.LoadPersistedUnsentLogs(); 251 log_manager.LoadPersistedUnsentLogs();
250 252
251 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( 253 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
252 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); 254 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service)));
253 log_manager.FinishCurrentLog(); 255 log_manager.FinishCurrentLog();
254 log_manager.StageNextLogForUpload(); 256 log_manager.StageNextLogForUpload();
255 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); 257 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE);
256 log_manager.PersistUnsentLogs(); 258 log_manager.PersistUnsentLogs();
257 259
258 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); 260 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
259 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); 261 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
260 } 262 }
261 } 263 }
262 264
263 TEST(MetricsLogManagerTest, LargeLogDiscarding) { 265 TEST(MetricsLogManagerTest, LargeLogDiscarding) {
264 TestMetricsServiceClient client; 266 TestMetricsServiceClient client;
265 TestLogPrefService pref_service; 267 TestLogPrefService pref_service;
(...skipping 22 matching lines...) Expand all
288 TestLogPrefService pref_service; 290 TestLogPrefService pref_service;
289 MetricsLogManager log_manager(&pref_service, 0); 291 MetricsLogManager log_manager(&pref_service, 0);
290 log_manager.LoadPersistedUnsentLogs(); 292 log_manager.LoadPersistedUnsentLogs();
291 293
292 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( 294 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
293 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service))); 295 "id", 0, MetricsLog::INITIAL_STABILITY_LOG, &client, &pref_service)));
294 log_manager.FinishCurrentLog(); 296 log_manager.FinishCurrentLog();
295 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( 297 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
296 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); 298 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
297 log_manager.StageNextLogForUpload(); 299 log_manager.StageNextLogForUpload();
298 log_manager.StoreStagedLogAsUnsent( 300 log_manager.StoreStagedLogAsUnsent(PersistedLogs::PROVISIONAL_STORE);
299 metrics::PersistedLogs::PROVISIONAL_STORE);
300 log_manager.FinishCurrentLog(); 301 log_manager.FinishCurrentLog();
301 log_manager.DiscardLastProvisionalStore(); 302 log_manager.DiscardLastProvisionalStore();
302 303
303 log_manager.PersistUnsentLogs(); 304 log_manager.PersistUnsentLogs();
304 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG)); 305 EXPECT_EQ(0U, pref_service.TypeCount(MetricsLog::INITIAL_STABILITY_LOG));
305 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); 306 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
306 } 307 }
307 } 308 }
308 309
309 TEST(MetricsLogManagerTest, ProvisionalStoreNoop) { 310 TEST(MetricsLogManagerTest, ProvisionalStoreNoop) {
310 TestMetricsServiceClient client; 311 TestMetricsServiceClient client;
311 312
312 // Ensure that trying to drop a sent log is a no-op, even if another log has 313 // Ensure that trying to drop a sent log is a no-op, even if another log has
313 // since been staged. 314 // since been staged.
314 { 315 {
315 TestLogPrefService pref_service; 316 TestLogPrefService pref_service;
316 MetricsLogManager log_manager(&pref_service, 0); 317 MetricsLogManager log_manager(&pref_service, 0);
317 log_manager.LoadPersistedUnsentLogs(); 318 log_manager.LoadPersistedUnsentLogs();
318 319
319 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( 320 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
320 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); 321 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
321 log_manager.FinishCurrentLog(); 322 log_manager.FinishCurrentLog();
322 log_manager.StageNextLogForUpload(); 323 log_manager.StageNextLogForUpload();
323 log_manager.StoreStagedLogAsUnsent( 324 log_manager.StoreStagedLogAsUnsent(PersistedLogs::PROVISIONAL_STORE);
324 metrics::PersistedLogs::PROVISIONAL_STORE);
325 log_manager.StageNextLogForUpload(); 325 log_manager.StageNextLogForUpload();
326 log_manager.DiscardStagedLog(); 326 log_manager.DiscardStagedLog();
327 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( 327 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
328 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); 328 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
329 log_manager.FinishCurrentLog(); 329 log_manager.FinishCurrentLog();
330 log_manager.StageNextLogForUpload(); 330 log_manager.StageNextLogForUpload();
331 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); 331 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE);
332 log_manager.DiscardLastProvisionalStore(); 332 log_manager.DiscardLastProvisionalStore();
333 333
334 log_manager.PersistUnsentLogs(); 334 log_manager.PersistUnsentLogs();
335 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); 335 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
336 } 336 }
337 337
338 // 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
339 { 339 {
340 TestLogPrefService pref_service; 340 TestLogPrefService pref_service;
341 MetricsLogManager log_manager(&pref_service, 0); 341 MetricsLogManager log_manager(&pref_service, 0);
342 log_manager.LoadPersistedUnsentLogs(); 342 log_manager.LoadPersistedUnsentLogs();
343 343
344 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( 344 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
345 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); 345 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
346 log_manager.FinishCurrentLog(); 346 log_manager.FinishCurrentLog();
347 log_manager.StageNextLogForUpload(); 347 log_manager.StageNextLogForUpload();
348 log_manager.StoreStagedLogAsUnsent(metrics::PersistedLogs::NORMAL_STORE); 348 log_manager.StoreStagedLogAsUnsent(PersistedLogs::NORMAL_STORE);
349 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog( 349 log_manager.BeginLoggingWithLog(make_scoped_ptr(new MetricsLog(
350 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service))); 350 "id", 0, MetricsLog::ONGOING_LOG, &client, &pref_service)));
351 log_manager.FinishCurrentLog(); 351 log_manager.FinishCurrentLog();
352 log_manager.StageNextLogForUpload(); 352 log_manager.StageNextLogForUpload();
353 log_manager.StoreStagedLogAsUnsent( 353 log_manager.StoreStagedLogAsUnsent(PersistedLogs::PROVISIONAL_STORE);
354 metrics::PersistedLogs::PROVISIONAL_STORE);
355 log_manager.DiscardLastProvisionalStore(); 354 log_manager.DiscardLastProvisionalStore();
356 log_manager.DiscardLastProvisionalStore(); 355 log_manager.DiscardLastProvisionalStore();
357 356
358 log_manager.PersistUnsentLogs(); 357 log_manager.PersistUnsentLogs();
359 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG)); 358 EXPECT_EQ(1U, pref_service.TypeCount(MetricsLog::ONGOING_LOG));
360 } 359 }
361 } 360 }
362 361
363 } // namespace metrics 362 } // namespace metrics
OLDNEW
« no previous file with comments | « components/metrics/metrics_log_manager.cc ('k') | components/metrics/metrics_log_uploader.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698