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

Unified Diff: components/variations/variations_seed_processor_unittest.cc

Issue 2919143002: Fix variations crashes when the chosen trial group is not in study. (Closed)
Patch Set: Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/variations/variations_seed_processor.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/variations/variations_seed_processor_unittest.cc
diff --git a/components/variations/variations_seed_processor_unittest.cc b/components/variations/variations_seed_processor_unittest.cc
index 01b36af19c32355b97ba758a9ce8409422384946..ef34a0664f6dc285e199dd47225eec052a612fbe 100644
--- a/components/variations/variations_seed_processor_unittest.cc
+++ b/components/variations/variations_seed_processor_unittest.cc
@@ -863,6 +863,60 @@ TEST_F(VariationsSeedProcessorTest, NoDefaultExperiment) {
base::FieldTrialList::FindFullName("Study1"));
}
+TEST_F(VariationsSeedProcessorTest, ExistingFieldTrial_ExpiredByConfig) {
+ static struct base::Feature kFeature {
+ "FeatureName", base::FEATURE_ENABLED_BY_DEFAULT
+ };
+ base::FieldTrialList field_trial_list(nullptr);
+
+ // In this case, an existing forced trial exists with a different default
+ // group than the study config, which is expired. This tests that we don't
+ // crash in such a case.
+ auto* trial = base::FieldTrialList::FactoryGetFieldTrial(
+ "Study1", 100, "ExistingDefault", base::FieldTrialList::kNoExpirationYear,
+ 1, 1, base::FieldTrial::SESSION_RANDOMIZED, nullptr);
+ trial->AppendGroup("A", 100);
+ trial->SetForced();
+
+ Study study;
+ study.set_name("Study1");
+ const base::Time year_ago =
+ base::Time::Now() - base::TimeDelta::FromDays(365);
+ study.set_expiry_date(TimeToProtoTime(year_ago));
+ auto* exp1 = AddExperiment("A", 1, &study);
+ exp1->mutable_feature_association()->add_enable_feature(kFeature.name);
+ AddExperiment("Default", 1, &study);
+ study.set_default_experiment_name("Default");
+
+ EXPECT_TRUE(CreateTrialFromStudy(study));
+
+ // The expected effect is that processing the server config will expire
+ // the existing trial.
+ EXPECT_EQ("ExistingDefault", trial->group_name());
+}
+
+TEST_F(VariationsSeedProcessorTest, ExpiredStudy_NoDefaultGroup) {
+ static struct base::Feature kFeature {
+ "FeatureName", base::FEATURE_ENABLED_BY_DEFAULT
+ };
+ base::FieldTrialList field_trial_list(nullptr);
+
+ // Although it's not expected for the server to provide a study with an expiry
+ // date set, but not default experiment, this tests that we don't crash if
+ // that happens.
+ Study study;
+ study.set_name("Study1");
+ const base::Time year_ago =
+ base::Time::Now() - base::TimeDelta::FromDays(365);
+ study.set_expiry_date(TimeToProtoTime(year_ago));
+ auto* exp1 = AddExperiment("A", 1, &study);
+ exp1->mutable_feature_association()->add_enable_feature(kFeature.name);
+
+ EXPECT_TRUE(CreateTrialFromStudy(study));
+ EXPECT_EQ("VariationsDefaultExperiment",
+ base::FieldTrialList::FindFullName("Study1"));
+}
+
TEST_F(VariationsSeedProcessorTest, LowEntropyStudyTest) {
const std::string kTrial1Name = "A";
const std::string kTrial2Name = "B";
« no previous file with comments | « components/variations/variations_seed_processor.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698