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

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

Issue 2691803002: Remove ScopedVector in //component/metrics (Closed)
Patch Set: code rebase Created 3 years, 10 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
« no previous file with comments | « components/metrics/metrics_log.cc ('k') | components/metrics/metrics_service.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.h" 5 #include "components/metrics/metrics_log.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <string> 10 #include <string>
11 11
12 #include "base/base64.h" 12 #include "base/base64.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/memory/scoped_vector.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/metrics/bucket_ranges.h" 15 #include "base/metrics/bucket_ranges.h"
16 #include "base/metrics/sample_vector.h" 16 #include "base/metrics/sample_vector.h"
17 #include "base/strings/string_number_conversions.h" 17 #include "base/strings/string_number_conversions.h"
18 #include "base/sys_info.h" 18 #include "base/sys_info.h"
19 #include "base/time/time.h" 19 #include "base/time/time.h"
20 #include "components/metrics/metrics_pref_names.h" 20 #include "components/metrics/metrics_pref_names.h"
21 #include "components/metrics/metrics_state_manager.h" 21 #include "components/metrics/metrics_state_manager.h"
22 #include "components/metrics/proto/chrome_user_metrics_extension.pb.h" 22 #include "components/metrics/proto/chrome_user_metrics_extension.pb.h"
23 #include "components/metrics/test_metrics_provider.h" 23 #include "components/metrics/test_metrics_provider.h"
24 #include "components/metrics/test_metrics_service_client.h" 24 #include "components/metrics/test_metrics_service_client.h"
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 TEST_F(MetricsLogTest, RecordEnvironment) { 282 TEST_F(MetricsLogTest, RecordEnvironment) {
283 TestMetricsServiceClient client; 283 TestMetricsServiceClient client;
284 TestMetricsLog log( 284 TestMetricsLog log(
285 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); 285 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_);
286 286
287 std::vector<variations::ActiveGroupId> synthetic_trials; 287 std::vector<variations::ActiveGroupId> synthetic_trials;
288 // Add two synthetic trials. 288 // Add two synthetic trials.
289 synthetic_trials.push_back(kSyntheticTrials[0]); 289 synthetic_trials.push_back(kSyntheticTrials[0]);
290 synthetic_trials.push_back(kSyntheticTrials[1]); 290 synthetic_trials.push_back(kSyntheticTrials[1]);
291 291
292 log.RecordEnvironment(std::vector<MetricsProvider*>(), synthetic_trials, 292 log.RecordEnvironment(std::vector<std::unique_ptr<MetricsProvider>>(),
293 kInstallDate, kEnabledDate); 293 synthetic_trials, kInstallDate, kEnabledDate);
294 // Check that the system profile on the log has the correct values set. 294 // Check that the system profile on the log has the correct values set.
295 CheckSystemProfile(log.system_profile()); 295 CheckSystemProfile(log.system_profile());
296 296
297 // Check that the system profile has also been written to prefs. 297 // Check that the system profile has also been written to prefs.
298 const std::string base64_system_profile = 298 const std::string base64_system_profile =
299 prefs_.GetString(prefs::kStabilitySavedSystemProfile); 299 prefs_.GetString(prefs::kStabilitySavedSystemProfile);
300 EXPECT_FALSE(base64_system_profile.empty()); 300 EXPECT_FALSE(base64_system_profile.empty());
301 std::string serialied_system_profile; 301 std::string serialied_system_profile;
302 EXPECT_TRUE(base::Base64Decode(base64_system_profile, 302 EXPECT_TRUE(base::Base64Decode(base64_system_profile,
303 &serialied_system_profile)); 303 &serialied_system_profile));
(...skipping 16 matching lines...) Expand all
320 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); 320 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_);
321 std::string app_version; 321 std::string app_version;
322 EXPECT_FALSE(log.LoadSavedEnvironmentFromPrefs(&app_version)); 322 EXPECT_FALSE(log.LoadSavedEnvironmentFromPrefs(&app_version));
323 EXPECT_TRUE(app_version.empty()); 323 EXPECT_TRUE(app_version.empty());
324 } 324 }
325 325
326 // Do a RecordEnvironment() call and check whether the pref is recorded. 326 // Do a RecordEnvironment() call and check whether the pref is recorded.
327 { 327 {
328 TestMetricsLog log( 328 TestMetricsLog log(
329 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); 329 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_);
330 log.RecordEnvironment(std::vector<MetricsProvider*>(), 330 log.RecordEnvironment(std::vector<std::unique_ptr<MetricsProvider>>(),
331 std::vector<variations::ActiveGroupId>(), 331 std::vector<variations::ActiveGroupId>(),
332 kInstallDate, kEnabledDate); 332 kInstallDate, kEnabledDate);
333 EXPECT_FALSE(prefs_.GetString(kSystemProfilePref).empty()); 333 EXPECT_FALSE(prefs_.GetString(kSystemProfilePref).empty());
334 EXPECT_FALSE(prefs_.GetString(kSystemProfileHashPref).empty()); 334 EXPECT_FALSE(prefs_.GetString(kSystemProfileHashPref).empty());
335 } 335 }
336 336
337 { 337 {
338 TestMetricsLog log( 338 TestMetricsLog log(
339 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); 339 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_);
340 std::string app_version; 340 std::string app_version;
341 EXPECT_TRUE(log.LoadSavedEnvironmentFromPrefs(&app_version)); 341 EXPECT_TRUE(log.LoadSavedEnvironmentFromPrefs(&app_version));
342 EXPECT_EQ("bogus version", app_version); 342 EXPECT_EQ("bogus version", app_version);
343 // Check some values in the system profile. 343 // Check some values in the system profile.
344 EXPECT_EQ(kInstallDateExpected, log.system_profile().install_date()); 344 EXPECT_EQ(kInstallDateExpected, log.system_profile().install_date());
345 EXPECT_EQ(kEnabledDateExpected, log.system_profile().uma_enabled_date()); 345 EXPECT_EQ(kEnabledDateExpected, log.system_profile().uma_enabled_date());
346 // Ensure that the call did not clear the prefs. 346 // Ensure that the call did not clear the prefs.
347 EXPECT_FALSE(prefs_.GetString(kSystemProfilePref).empty()); 347 EXPECT_FALSE(prefs_.GetString(kSystemProfilePref).empty());
348 EXPECT_FALSE(prefs_.GetString(kSystemProfileHashPref).empty()); 348 EXPECT_FALSE(prefs_.GetString(kSystemProfileHashPref).empty());
349 } 349 }
350 350
351 // Ensure that a non-matching hash results in the pref being invalid. 351 // Ensure that a non-matching hash results in the pref being invalid.
352 { 352 {
353 TestMetricsLog log( 353 TestMetricsLog log(
354 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); 354 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_);
355 // Call RecordEnvironment() to record the pref again. 355 // Call RecordEnvironment() to record the pref again.
356 log.RecordEnvironment(std::vector<MetricsProvider*>(), 356 log.RecordEnvironment(std::vector<std::unique_ptr<MetricsProvider>>(),
357 std::vector<variations::ActiveGroupId>(), 357 std::vector<variations::ActiveGroupId>(),
358 kInstallDate, kEnabledDate); 358 kInstallDate, kEnabledDate);
359 } 359 }
360 360
361 { 361 {
362 // Set the hash to a bad value. 362 // Set the hash to a bad value.
363 prefs_.SetString(kSystemProfileHashPref, "deadbeef"); 363 prefs_.SetString(kSystemProfileHashPref, "deadbeef");
364 TestMetricsLog log( 364 TestMetricsLog log(
365 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); 365 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_);
366 std::string app_version; 366 std::string app_version;
367 EXPECT_FALSE(log.LoadSavedEnvironmentFromPrefs(&app_version)); 367 EXPECT_FALSE(log.LoadSavedEnvironmentFromPrefs(&app_version));
368 EXPECT_TRUE(app_version.empty()); 368 EXPECT_TRUE(app_version.empty());
369 // Ensure that the prefs are not cleared, even if the call failed. 369 // Ensure that the prefs are not cleared, even if the call failed.
370 EXPECT_FALSE(prefs_.GetString(kSystemProfilePref).empty()); 370 EXPECT_FALSE(prefs_.GetString(kSystemProfilePref).empty());
371 EXPECT_FALSE(prefs_.GetString(kSystemProfileHashPref).empty()); 371 EXPECT_FALSE(prefs_.GetString(kSystemProfileHashPref).empty());
372 } 372 }
373 } 373 }
374 374
375 TEST_F(MetricsLogTest, RecordEnvironmentEnableDefault) { 375 TEST_F(MetricsLogTest, RecordEnvironmentEnableDefault) {
376 TestMetricsServiceClient client; 376 TestMetricsServiceClient client;
377 TestMetricsLog log_unknown(kClientId, kSessionId, MetricsLog::ONGOING_LOG, 377 TestMetricsLog log_unknown(kClientId, kSessionId, MetricsLog::ONGOING_LOG,
378 &client, &prefs_); 378 &client, &prefs_);
379 379
380 std::vector<variations::ActiveGroupId> synthetic_trials; 380 std::vector<variations::ActiveGroupId> synthetic_trials;
381 381
382 log_unknown.RecordEnvironment(std::vector<MetricsProvider*>(), 382 log_unknown.RecordEnvironment(std::vector<std::unique_ptr<MetricsProvider>>(),
383 synthetic_trials, kInstallDate, kEnabledDate); 383 synthetic_trials, kInstallDate, kEnabledDate);
384 EXPECT_FALSE(log_unknown.system_profile().has_uma_default_state()); 384 EXPECT_FALSE(log_unknown.system_profile().has_uma_default_state());
385 385
386 client.set_enable_default(EnableMetricsDefault::OPT_IN); 386 client.set_enable_default(EnableMetricsDefault::OPT_IN);
387 TestMetricsLog log_opt_in(kClientId, kSessionId, MetricsLog::ONGOING_LOG, 387 TestMetricsLog log_opt_in(kClientId, kSessionId, MetricsLog::ONGOING_LOG,
388 &client, &prefs_); 388 &client, &prefs_);
389 log_opt_in.RecordEnvironment(std::vector<MetricsProvider*>(), 389 log_opt_in.RecordEnvironment(std::vector<std::unique_ptr<MetricsProvider>>(),
390 synthetic_trials, kInstallDate, kEnabledDate); 390 synthetic_trials, kInstallDate, kEnabledDate);
391 EXPECT_TRUE(log_opt_in.system_profile().has_uma_default_state()); 391 EXPECT_TRUE(log_opt_in.system_profile().has_uma_default_state());
392 EXPECT_EQ(SystemProfileProto_UmaDefaultState_OPT_IN, 392 EXPECT_EQ(SystemProfileProto_UmaDefaultState_OPT_IN,
393 log_opt_in.system_profile().uma_default_state()); 393 log_opt_in.system_profile().uma_default_state());
394 394
395 client.set_enable_default(EnableMetricsDefault::OPT_OUT); 395 client.set_enable_default(EnableMetricsDefault::OPT_OUT);
396 TestMetricsLog log_opt_out(kClientId, kSessionId, MetricsLog::ONGOING_LOG, 396 TestMetricsLog log_opt_out(kClientId, kSessionId, MetricsLog::ONGOING_LOG,
397 &client, &prefs_); 397 &client, &prefs_);
398 log_opt_out.RecordEnvironment(std::vector<MetricsProvider*>(), 398 log_opt_out.RecordEnvironment(std::vector<std::unique_ptr<MetricsProvider>>(),
399 synthetic_trials, kInstallDate, kEnabledDate); 399 synthetic_trials, kInstallDate, kEnabledDate);
400 EXPECT_TRUE(log_opt_out.system_profile().has_uma_default_state()); 400 EXPECT_TRUE(log_opt_out.system_profile().has_uma_default_state());
401 EXPECT_EQ(SystemProfileProto_UmaDefaultState_OPT_OUT, 401 EXPECT_EQ(SystemProfileProto_UmaDefaultState_OPT_OUT,
402 log_opt_out.system_profile().uma_default_state()); 402 log_opt_out.system_profile().uma_default_state());
403 403
404 client.set_reporting_is_managed(true); 404 client.set_reporting_is_managed(true);
405 TestMetricsLog log_managed(kClientId, kSessionId, MetricsLog::ONGOING_LOG, 405 TestMetricsLog log_managed(kClientId, kSessionId, MetricsLog::ONGOING_LOG,
406 &client, &prefs_); 406 &client, &prefs_);
407 log_managed.RecordEnvironment(std::vector<MetricsProvider*>(), 407 log_managed.RecordEnvironment(std::vector<std::unique_ptr<MetricsProvider>>(),
408 synthetic_trials, kInstallDate, kEnabledDate); 408 synthetic_trials, kInstallDate, kEnabledDate);
409 EXPECT_TRUE(log_managed.system_profile().has_uma_default_state()); 409 EXPECT_TRUE(log_managed.system_profile().has_uma_default_state());
410 EXPECT_EQ(SystemProfileProto_UmaDefaultState_POLICY_FORCED_ENABLED, 410 EXPECT_EQ(SystemProfileProto_UmaDefaultState_POLICY_FORCED_ENABLED,
411 log_managed.system_profile().uma_default_state()); 411 log_managed.system_profile().uma_default_state());
412 } 412 }
413 413
414 TEST_F(MetricsLogTest, InitialLogStabilityMetrics) { 414 TEST_F(MetricsLogTest, InitialLogStabilityMetrics) {
415 TestMetricsServiceClient client; 415 TestMetricsServiceClient client;
416 TestMetricsLog log(kClientId, 416 TestMetricsLog log(kClientId,
417 kSessionId, 417 kSessionId,
418 MetricsLog::INITIAL_STABILITY_LOG, 418 MetricsLog::INITIAL_STABILITY_LOG,
419 &client, 419 &client,
420 &prefs_); 420 &prefs_);
421 TestMetricsProvider* test_provider = new TestMetricsProvider(); 421 TestMetricsProvider* test_provider = new TestMetricsProvider();
422 ScopedVector<MetricsProvider> metrics_providers; 422 std::vector<std::unique_ptr<MetricsProvider>> metrics_providers;
423 metrics_providers.push_back(test_provider); 423 metrics_providers.push_back(base::WrapUnique<MetricsProvider>(test_provider));
424 log.RecordEnvironment(metrics_providers.get(), 424 log.RecordEnvironment(metrics_providers,
425 std::vector<variations::ActiveGroupId>(), kInstallDate, 425 std::vector<variations::ActiveGroupId>(), kInstallDate,
426 kEnabledDate); 426 kEnabledDate);
427 log.RecordStabilityMetrics(metrics_providers.get(), base::TimeDelta(), 427 log.RecordStabilityMetrics(metrics_providers, base::TimeDelta(),
428 base::TimeDelta()); 428 base::TimeDelta());
429 const SystemProfileProto_Stability& stability = 429 const SystemProfileProto_Stability& stability =
430 log.system_profile().stability(); 430 log.system_profile().stability();
431 // Required metrics: 431 // Required metrics:
432 EXPECT_TRUE(stability.has_launch_count()); 432 EXPECT_TRUE(stability.has_launch_count());
433 EXPECT_TRUE(stability.has_crash_count()); 433 EXPECT_TRUE(stability.has_crash_count());
434 // Initial log metrics: only expected if non-zero. 434 // Initial log metrics: only expected if non-zero.
435 EXPECT_FALSE(stability.has_incomplete_shutdown_count()); 435 EXPECT_FALSE(stability.has_incomplete_shutdown_count());
436 EXPECT_FALSE(stability.has_breakpad_registration_success_count()); 436 EXPECT_FALSE(stability.has_breakpad_registration_success_count());
437 EXPECT_FALSE(stability.has_breakpad_registration_failure_count()); 437 EXPECT_FALSE(stability.has_breakpad_registration_failure_count());
438 EXPECT_FALSE(stability.has_debugger_present_count()); 438 EXPECT_FALSE(stability.has_debugger_present_count());
439 EXPECT_FALSE(stability.has_debugger_not_present_count()); 439 EXPECT_FALSE(stability.has_debugger_not_present_count());
440 440
441 // The test provider should have been called upon to provide initial 441 // The test provider should have been called upon to provide initial
442 // stability and regular stability metrics. 442 // stability and regular stability metrics.
443 EXPECT_TRUE(test_provider->provide_initial_stability_metrics_called()); 443 EXPECT_TRUE(test_provider->provide_initial_stability_metrics_called());
444 EXPECT_TRUE(test_provider->provide_stability_metrics_called()); 444 EXPECT_TRUE(test_provider->provide_stability_metrics_called());
445 } 445 }
446 446
447 TEST_F(MetricsLogTest, OngoingLogStabilityMetrics) { 447 TEST_F(MetricsLogTest, OngoingLogStabilityMetrics) {
448 TestMetricsServiceClient client; 448 TestMetricsServiceClient client;
449 TestMetricsLog log( 449 TestMetricsLog log(
450 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); 450 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_);
451 TestMetricsProvider* test_provider = new TestMetricsProvider(); 451 TestMetricsProvider* test_provider = new TestMetricsProvider();
452 ScopedVector<MetricsProvider> metrics_providers; 452 std::vector<std::unique_ptr<MetricsProvider>> metrics_providers;
453 metrics_providers.push_back(test_provider); 453 metrics_providers.push_back(base::WrapUnique<MetricsProvider>(test_provider));
454 log.RecordEnvironment(metrics_providers.get(), 454 log.RecordEnvironment(metrics_providers,
455 std::vector<variations::ActiveGroupId>(), kInstallDate, 455 std::vector<variations::ActiveGroupId>(), kInstallDate,
456 kEnabledDate); 456 kEnabledDate);
457 log.RecordStabilityMetrics(metrics_providers.get(), base::TimeDelta(), 457 log.RecordStabilityMetrics(metrics_providers, base::TimeDelta(),
458 base::TimeDelta()); 458 base::TimeDelta());
459 const SystemProfileProto_Stability& stability = 459 const SystemProfileProto_Stability& stability =
460 log.system_profile().stability(); 460 log.system_profile().stability();
461 // Required metrics: 461 // Required metrics:
462 EXPECT_TRUE(stability.has_launch_count()); 462 EXPECT_TRUE(stability.has_launch_count());
463 EXPECT_TRUE(stability.has_crash_count()); 463 EXPECT_TRUE(stability.has_crash_count());
464 // Initial log metrics: only expected if non-zero. 464 // Initial log metrics: only expected if non-zero.
465 EXPECT_FALSE(stability.has_incomplete_shutdown_count()); 465 EXPECT_FALSE(stability.has_incomplete_shutdown_count());
466 EXPECT_FALSE(stability.has_breakpad_registration_success_count()); 466 EXPECT_FALSE(stability.has_breakpad_registration_success_count());
467 EXPECT_FALSE(stability.has_breakpad_registration_failure_count()); 467 EXPECT_FALSE(stability.has_breakpad_registration_failure_count());
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 TestMetricsServiceClient client; 499 TestMetricsServiceClient client;
500 client.set_product(kTestProduct); 500 client.set_product(kTestProduct);
501 TestMetricsLog log( 501 TestMetricsLog log(
502 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); 502 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_);
503 // Check that the product is set to |kTestProduct|. 503 // Check that the product is set to |kTestProduct|.
504 EXPECT_TRUE(log.uma_proto().has_product()); 504 EXPECT_TRUE(log.uma_proto().has_product());
505 EXPECT_EQ(kTestProduct, log.uma_proto().product()); 505 EXPECT_EQ(kTestProduct, log.uma_proto().product());
506 } 506 }
507 507
508 } // namespace metrics 508 } // namespace metrics
OLDNEW
« no previous file with comments | « components/metrics/metrics_log.cc ('k') | components/metrics/metrics_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698