OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/variations/variations_seed_processor.h" | 5 #include "components/variations/variations_seed_processor.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/bind.h" | 10 #include "base/bind.h" |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 | 59 |
60 AddExperiment(kNonFlagGroupName, default_group_probability, &study); | 60 AddExperiment(kNonFlagGroupName, default_group_probability, &study); |
61 AddExperiment(kFlagGroup1Name, flag_group1_probability, &study) | 61 AddExperiment(kFlagGroup1Name, flag_group1_probability, &study) |
62 ->set_forcing_flag(kForcingFlag1); | 62 ->set_forcing_flag(kForcingFlag1); |
63 AddExperiment(kFlagGroup2Name, flag_group2_probability, &study) | 63 AddExperiment(kFlagGroup2Name, flag_group2_probability, &study) |
64 ->set_forcing_flag(kForcingFlag2); | 64 ->set_forcing_flag(kForcingFlag2); |
65 | 65 |
66 return study; | 66 return study; |
67 } | 67 } |
68 | 68 |
69 // Tests whether a field trial is active (i.e. group() has been called on it). | |
70 bool IsFieldTrialActive(const std::string& trial_name) { | |
71 base::FieldTrial::ActiveGroups active_groups; | |
72 base::FieldTrialList::GetActiveFieldTrialGroups(&active_groups); | |
73 for (size_t i = 0; i < active_groups.size(); ++i) { | |
74 if (active_groups[i].trial_name == trial_name) | |
75 return true; | |
76 } | |
77 return false; | |
78 } | |
79 | |
80 class TestOverrideStringCallback { | 69 class TestOverrideStringCallback { |
81 public: | 70 public: |
82 typedef std::map<uint32_t, base::string16> OverrideMap; | 71 typedef std::map<uint32_t, base::string16> OverrideMap; |
83 | 72 |
84 TestOverrideStringCallback() | 73 TestOverrideStringCallback() |
85 : callback_(base::Bind(&TestOverrideStringCallback::Override, | 74 : callback_(base::Bind(&TestOverrideStringCallback::Override, |
86 base::Unretained(this))) {} | 75 base::Unretained(this))) {} |
87 | 76 |
88 virtual ~TestOverrideStringCallback() {} | 77 virtual ~TestOverrideStringCallback() {} |
89 | 78 |
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
444 study3->set_activation_type(Study_ActivationType_ACTIVATION_EXPLICIT); | 433 study3->set_activation_type(Study_ActivationType_ACTIVATION_EXPLICIT); |
445 | 434 |
446 VariationsSeedProcessor seed_processor; | 435 VariationsSeedProcessor seed_processor; |
447 seed_processor.CreateTrialsFromSeed( | 436 seed_processor.CreateTrialsFromSeed( |
448 seed, "en-CA", base::Time::Now(), base::Version("20.0.0.0"), | 437 seed, "en-CA", base::Time::Now(), base::Version("20.0.0.0"), |
449 Study_Channel_STABLE, Study_FormFactor_DESKTOP, "", "", "", | 438 Study_Channel_STABLE, Study_FormFactor_DESKTOP, "", "", "", |
450 override_callback_.callback()); | 439 override_callback_.callback()); |
451 | 440 |
452 // Non-specified and ACTIVATION_EXPLICIT should not start active, but | 441 // Non-specified and ACTIVATION_EXPLICIT should not start active, but |
453 // ACTIVATION_AUTO should. | 442 // ACTIVATION_AUTO should. |
454 EXPECT_FALSE(IsFieldTrialActive("A")); | 443 EXPECT_FALSE(base::FieldTrialList::IsTrialActive("A")); |
455 EXPECT_TRUE(IsFieldTrialActive("B")); | 444 EXPECT_TRUE(base::FieldTrialList::IsTrialActive("B")); |
456 EXPECT_FALSE(IsFieldTrialActive("C")); | 445 EXPECT_FALSE(base::FieldTrialList::IsTrialActive("C")); |
457 | 446 |
458 EXPECT_EQ("AA", base::FieldTrialList::FindFullName("A")); | 447 EXPECT_EQ("AA", base::FieldTrialList::FindFullName("A")); |
459 EXPECT_EQ("BB", base::FieldTrialList::FindFullName("B")); | 448 EXPECT_EQ("BB", base::FieldTrialList::FindFullName("B")); |
460 EXPECT_EQ("CC", base::FieldTrialList::FindFullName("C")); | 449 EXPECT_EQ("CC", base::FieldTrialList::FindFullName("C")); |
461 | 450 |
462 // Now, all studies should be active. | 451 // Now, all studies should be active. |
463 EXPECT_TRUE(IsFieldTrialActive("A")); | 452 EXPECT_TRUE(base::FieldTrialList::IsTrialActive("A")); |
464 EXPECT_TRUE(IsFieldTrialActive("B")); | 453 EXPECT_TRUE(base::FieldTrialList::IsTrialActive("B")); |
465 EXPECT_TRUE(IsFieldTrialActive("C")); | 454 EXPECT_TRUE(base::FieldTrialList::IsTrialActive("C")); |
466 } | 455 } |
467 | 456 |
468 TEST_F(VariationsSeedProcessorTest, StartsActiveWithFlag) { | 457 TEST_F(VariationsSeedProcessorTest, StartsActiveWithFlag) { |
469 base::CommandLine::ForCurrentProcess()->AppendSwitch(kForcingFlag1); | 458 base::CommandLine::ForCurrentProcess()->AppendSwitch(kForcingFlag1); |
470 | 459 |
471 base::FieldTrialList field_trial_list(NULL); | 460 base::FieldTrialList field_trial_list(NULL); |
472 | 461 |
473 Study study = CreateStudyWithFlagGroups(100, 0, 0); | 462 Study study = CreateStudyWithFlagGroups(100, 0, 0); |
474 study.set_activation_type(Study_ActivationType_ACTIVATION_AUTO); | 463 study.set_activation_type(Study_ActivationType_ACTIVATION_AUTO); |
475 | 464 |
476 EXPECT_TRUE(CreateTrialFromStudy(&study)); | 465 EXPECT_TRUE(CreateTrialFromStudy(&study)); |
477 EXPECT_TRUE(IsFieldTrialActive(kFlagStudyName)); | 466 EXPECT_TRUE(base::FieldTrialList::IsTrialActive(kFlagStudyName)); |
478 | 467 |
479 EXPECT_EQ(kFlagGroup1Name, | 468 EXPECT_EQ(kFlagGroup1Name, |
480 base::FieldTrialList::FindFullName(kFlagStudyName)); | 469 base::FieldTrialList::FindFullName(kFlagStudyName)); |
481 } | 470 } |
482 | 471 |
483 TEST_F(VariationsSeedProcessorTest, ForcingFlagAlreadyForced) { | 472 TEST_F(VariationsSeedProcessorTest, ForcingFlagAlreadyForced) { |
484 Study study = CreateStudyWithFlagGroups(100, 0, 0); | 473 Study study = CreateStudyWithFlagGroups(100, 0, 0); |
485 ASSERT_EQ(kNonFlagGroupName, study.experiment(0).name()); | 474 ASSERT_EQ(kNonFlagGroupName, study.experiment(0).name()); |
486 Study_Experiment_Param* param = study.mutable_experiment(0)->add_param(); | 475 Study_Experiment_Param* param = study.mutable_experiment(0)->add_param(); |
487 param->set_name("x"); | 476 param->set_name("x"); |
(...skipping 10 matching lines...) Expand all Loading... |
498 base::FieldTrialList::FindFullName(study.name())); | 487 base::FieldTrialList::FindFullName(study.name())); |
499 | 488 |
500 // Check that params and experiment ids correspond. | 489 // Check that params and experiment ids correspond. |
501 EXPECT_EQ("y", GetVariationParamValue(study.name(), "x")); | 490 EXPECT_EQ("y", GetVariationParamValue(study.name(), "x")); |
502 VariationID id = GetGoogleVariationID(GOOGLE_WEB_PROPERTIES, kFlagStudyName, | 491 VariationID id = GetGoogleVariationID(GOOGLE_WEB_PROPERTIES, kFlagStudyName, |
503 kNonFlagGroupName); | 492 kNonFlagGroupName); |
504 EXPECT_EQ(kExperimentId, id); | 493 EXPECT_EQ(kExperimentId, id); |
505 } | 494 } |
506 | 495 |
507 } // namespace variations | 496 } // namespace variations |
OLD | NEW |