variations_crash_keys_unittest.cc 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/variations/variations_crash_keys.h"
  5. #include <string>
  6. #include "base/metrics/field_trial.h"
  7. #include "base/run_loop.h"
  8. #include "base/test/task_environment.h"
  9. #include "build/build_config.h"
  10. #include "components/crash/core/common/crash_key.h"
  11. #include "components/variations/hashing.h"
  12. #include "components/variations/synthetic_trial_registry.h"
  13. #include "components/variations/synthetic_trials_active_group_id_provider.h"
  14. #include "testing/gtest/include/gtest/gtest.h"
  15. namespace variations {
  16. namespace {
  17. std::string GetVariationsCrashKey() {
  18. return crash_reporter::GetCrashKeyValue("variations");
  19. }
  20. std::string GetNumExperimentsCrashKey() {
  21. return crash_reporter::GetCrashKeyValue("num-experiments");
  22. }
  23. class VariationsCrashKeysTest : public ::testing::Test {
  24. public:
  25. VariationsCrashKeysTest() {
  26. crash_reporter::ResetCrashKeysForTesting();
  27. crash_reporter::InitializeCrashKeysForTesting();
  28. }
  29. VariationsCrashKeysTest(const VariationsCrashKeysTest&) = delete;
  30. VariationsCrashKeysTest& operator=(const VariationsCrashKeysTest&) = delete;
  31. ~VariationsCrashKeysTest() override {
  32. SyntheticTrialsActiveGroupIdProvider::GetInstance()->ResetForTesting();
  33. ClearCrashKeysInstanceForTesting();
  34. crash_reporter::ResetCrashKeysForTesting();
  35. }
  36. private:
  37. base::test::TaskEnvironment task_environment_;
  38. };
  39. } // namespace
  40. TEST_F(VariationsCrashKeysTest, BasicFunctionality) {
  41. SyntheticTrialRegistry registry;
  42. registry.AddSyntheticTrialObserver(
  43. SyntheticTrialsActiveGroupIdProvider::GetInstance());
  44. // Start with 2 trials, one active and one not
  45. base::FieldTrialList::CreateFieldTrial("Trial1", "Group1")->group();
  46. base::FieldTrialList::CreateFieldTrial("Trial2", "Group2");
  47. InitCrashKeys();
  48. EXPECT_EQ("1", GetNumExperimentsCrashKey());
  49. EXPECT_EQ("8e7abfb0-c16397b7,", GetVariationsCrashKey());
  50. ExperimentListInfo info = GetExperimentListInfo();
  51. EXPECT_EQ(1, info.num_experiments);
  52. EXPECT_EQ("8e7abfb0-c16397b7,", info.experiment_list);
  53. // Now, active Trial2.
  54. EXPECT_EQ("Group2", base::FieldTrialList::FindFullName("Trial2"));
  55. base::RunLoop().RunUntilIdle();
  56. EXPECT_EQ("2", GetNumExperimentsCrashKey());
  57. EXPECT_EQ("8e7abfb0-c16397b7,277f2a3d-d77354d0,", GetVariationsCrashKey());
  58. info = GetExperimentListInfo();
  59. EXPECT_EQ(2, info.num_experiments);
  60. EXPECT_EQ("8e7abfb0-c16397b7,277f2a3d-d77354d0,", info.experiment_list);
  61. // Add two synthetic trials and confirm that they show up in the list.
  62. SyntheticTrialGroup synth_trial(
  63. "Trial3", "Group3", variations::SyntheticTrialAnnotationMode::kNextLog);
  64. registry.RegisterSyntheticFieldTrial(synth_trial);
  65. EXPECT_EQ("3", GetNumExperimentsCrashKey());
  66. EXPECT_EQ("8e7abfb0-c16397b7,277f2a3d-d77354d0,9f339c9d-746c2ad4,",
  67. GetVariationsCrashKey());
  68. info = GetExperimentListInfo();
  69. EXPECT_EQ(3, info.num_experiments);
  70. EXPECT_EQ("8e7abfb0-c16397b7,277f2a3d-d77354d0,9f339c9d-746c2ad4,",
  71. info.experiment_list);
  72. // Add another regular trial.
  73. base::FieldTrialList::CreateFieldTrial("Trial4", "Group4")->group();
  74. base::RunLoop().RunUntilIdle();
  75. EXPECT_EQ("4", GetNumExperimentsCrashKey());
  76. EXPECT_EQ(
  77. "8e7abfb0-c16397b7,277f2a3d-d77354d0,21710f4c-99b90b01,"
  78. "9f339c9d-746c2ad4,",
  79. GetVariationsCrashKey());
  80. info = GetExperimentListInfo();
  81. EXPECT_EQ(4, info.num_experiments);
  82. EXPECT_EQ(
  83. "8e7abfb0-c16397b7,277f2a3d-d77354d0,21710f4c-99b90b01,"
  84. "9f339c9d-746c2ad4,",
  85. info.experiment_list);
  86. // Replace synthetic trial group and add one more.
  87. SyntheticTrialGroup synth_trial2(
  88. "Trial3", "Group3_A", variations::SyntheticTrialAnnotationMode::kNextLog);
  89. registry.RegisterSyntheticFieldTrial(synth_trial2);
  90. SyntheticTrialGroup synth_trial3(
  91. "Trial4", "Group4", variations::SyntheticTrialAnnotationMode::kNextLog);
  92. registry.RegisterSyntheticFieldTrial(synth_trial3);
  93. EXPECT_EQ("5", GetNumExperimentsCrashKey());
  94. EXPECT_EQ(
  95. "8e7abfb0-c16397b7,277f2a3d-d77354d0,21710f4c-99b90b01,"
  96. "9f339c9d-3250dddc,21710f4c-99b90b01,",
  97. GetVariationsCrashKey());
  98. info = GetExperimentListInfo();
  99. EXPECT_EQ(5, info.num_experiments);
  100. EXPECT_EQ(
  101. "8e7abfb0-c16397b7,277f2a3d-d77354d0,21710f4c-99b90b01,"
  102. "9f339c9d-3250dddc,21710f4c-99b90b01,",
  103. info.experiment_list);
  104. }
  105. } // namespace variations