123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- // Copyright 2018 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "components/variations/variations_crash_keys.h"
- #include <string>
- #include "base/metrics/field_trial.h"
- #include "base/run_loop.h"
- #include "base/test/task_environment.h"
- #include "build/build_config.h"
- #include "components/crash/core/common/crash_key.h"
- #include "components/variations/hashing.h"
- #include "components/variations/synthetic_trial_registry.h"
- #include "components/variations/synthetic_trials_active_group_id_provider.h"
- #include "testing/gtest/include/gtest/gtest.h"
- namespace variations {
- namespace {
- std::string GetVariationsCrashKey() {
- return crash_reporter::GetCrashKeyValue("variations");
- }
- std::string GetNumExperimentsCrashKey() {
- return crash_reporter::GetCrashKeyValue("num-experiments");
- }
- class VariationsCrashKeysTest : public ::testing::Test {
- public:
- VariationsCrashKeysTest() {
- crash_reporter::ResetCrashKeysForTesting();
- crash_reporter::InitializeCrashKeysForTesting();
- }
- VariationsCrashKeysTest(const VariationsCrashKeysTest&) = delete;
- VariationsCrashKeysTest& operator=(const VariationsCrashKeysTest&) = delete;
- ~VariationsCrashKeysTest() override {
- SyntheticTrialsActiveGroupIdProvider::GetInstance()->ResetForTesting();
- ClearCrashKeysInstanceForTesting();
- crash_reporter::ResetCrashKeysForTesting();
- }
- private:
- base::test::TaskEnvironment task_environment_;
- };
- } // namespace
- TEST_F(VariationsCrashKeysTest, BasicFunctionality) {
- SyntheticTrialRegistry registry;
- registry.AddSyntheticTrialObserver(
- SyntheticTrialsActiveGroupIdProvider::GetInstance());
- // Start with 2 trials, one active and one not
- base::FieldTrialList::CreateFieldTrial("Trial1", "Group1")->group();
- base::FieldTrialList::CreateFieldTrial("Trial2", "Group2");
- InitCrashKeys();
- EXPECT_EQ("1", GetNumExperimentsCrashKey());
- EXPECT_EQ("8e7abfb0-c16397b7,", GetVariationsCrashKey());
- ExperimentListInfo info = GetExperimentListInfo();
- EXPECT_EQ(1, info.num_experiments);
- EXPECT_EQ("8e7abfb0-c16397b7,", info.experiment_list);
- // Now, active Trial2.
- EXPECT_EQ("Group2", base::FieldTrialList::FindFullName("Trial2"));
- base::RunLoop().RunUntilIdle();
- EXPECT_EQ("2", GetNumExperimentsCrashKey());
- EXPECT_EQ("8e7abfb0-c16397b7,277f2a3d-d77354d0,", GetVariationsCrashKey());
- info = GetExperimentListInfo();
- EXPECT_EQ(2, info.num_experiments);
- EXPECT_EQ("8e7abfb0-c16397b7,277f2a3d-d77354d0,", info.experiment_list);
- // Add two synthetic trials and confirm that they show up in the list.
- SyntheticTrialGroup synth_trial(
- "Trial3", "Group3", variations::SyntheticTrialAnnotationMode::kNextLog);
- registry.RegisterSyntheticFieldTrial(synth_trial);
- EXPECT_EQ("3", GetNumExperimentsCrashKey());
- EXPECT_EQ("8e7abfb0-c16397b7,277f2a3d-d77354d0,9f339c9d-746c2ad4,",
- GetVariationsCrashKey());
- info = GetExperimentListInfo();
- EXPECT_EQ(3, info.num_experiments);
- EXPECT_EQ("8e7abfb0-c16397b7,277f2a3d-d77354d0,9f339c9d-746c2ad4,",
- info.experiment_list);
- // Add another regular trial.
- base::FieldTrialList::CreateFieldTrial("Trial4", "Group4")->group();
- base::RunLoop().RunUntilIdle();
- EXPECT_EQ("4", GetNumExperimentsCrashKey());
- EXPECT_EQ(
- "8e7abfb0-c16397b7,277f2a3d-d77354d0,21710f4c-99b90b01,"
- "9f339c9d-746c2ad4,",
- GetVariationsCrashKey());
- info = GetExperimentListInfo();
- EXPECT_EQ(4, info.num_experiments);
- EXPECT_EQ(
- "8e7abfb0-c16397b7,277f2a3d-d77354d0,21710f4c-99b90b01,"
- "9f339c9d-746c2ad4,",
- info.experiment_list);
- // Replace synthetic trial group and add one more.
- SyntheticTrialGroup synth_trial2(
- "Trial3", "Group3_A", variations::SyntheticTrialAnnotationMode::kNextLog);
- registry.RegisterSyntheticFieldTrial(synth_trial2);
- SyntheticTrialGroup synth_trial3(
- "Trial4", "Group4", variations::SyntheticTrialAnnotationMode::kNextLog);
- registry.RegisterSyntheticFieldTrial(synth_trial3);
- EXPECT_EQ("5", GetNumExperimentsCrashKey());
- EXPECT_EQ(
- "8e7abfb0-c16397b7,277f2a3d-d77354d0,21710f4c-99b90b01,"
- "9f339c9d-3250dddc,21710f4c-99b90b01,",
- GetVariationsCrashKey());
- info = GetExperimentListInfo();
- EXPECT_EQ(5, info.num_experiments);
- EXPECT_EQ(
- "8e7abfb0-c16397b7,277f2a3d-d77354d0,21710f4c-99b90b01,"
- "9f339c9d-3250dddc,21710f4c-99b90b01,",
- info.experiment_list);
- }
- } // namespace variations
|