Index: chrome/common/metrics/experiments_helper_unittest.cc |
diff --git a/chrome/common/metrics/experiments_helper_unittest.cc b/chrome/common/metrics/experiments_helper_unittest.cc |
index 546cce86c3ebe5abd84c0a97743933e850876b08..834814509ebf41f7fdc09f824310cc61f11245dc 100644 |
--- a/chrome/common/metrics/experiments_helper_unittest.cc |
+++ b/chrome/common/metrics/experiments_helper_unittest.cc |
@@ -4,6 +4,8 @@ |
// Tests for the Experiment Helpers. |
+#include <set> |
+ |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop.h" |
#include "base/metrics/field_trial.h" |
@@ -17,9 +19,8 @@ namespace { |
// Convenience helper to retrieve the GoogleExperimentID for a FieldTrial. Note |
// that this will do the group assignment in |trial| if not already done. |
experiments_helper::GoogleExperimentID GetIDForTrial(base::FieldTrial* trial) { |
- return experiments_helper::GetGoogleExperimentID( |
- base::FieldTrial::MakeNameGroupId(trial->name(), |
- trial->group_name())); |
+ return experiments_helper::GetGoogleExperimentID(trial->name(), |
+ trial->group_name()); |
} |
} // namespace |
@@ -49,6 +50,68 @@ class ExperimentsHelperTest : public ::testing::Test { |
scoped_ptr<content::TestBrowserThread> ui_thread_; |
}; |
+TEST_F(ExperimentsHelperTest, HashName) { |
+ // Make sure hashing is stable on all platforms. |
+ struct { |
+ const char* name; |
+ uint32 hash_value; |
+ } known_hashes[] = { |
+ {"a", 937752454u}, |
+ {"1", 723085877u}, |
+ {"Trial Name", 2713117220u}, |
+ {"Group Name", 3201815843u}, |
+ {"My Favorite Experiment", 3722155194u}, |
+ {"My Awesome Group Name", 4109503236u}, |
+ {"abcdefghijklmonpqrstuvwxyz", 787728696u}, |
+ {"0123456789ABCDEF", 348858318U} |
+ }; |
+ for (size_t i = 0; i < ARRAYSIZE_UNSAFE(known_hashes); ++i) { |
+ EXPECT_EQ(known_hashes[i].hash_value, |
+ testing::TestHashName(known_hashes[i].name)); |
+ } |
+} |
+ |
+TEST_F(ExperimentsHelperTest, GetFieldTrialSelectedGroups) { |
+ typedef std::set<experiments_helper::SelectedGroupId, |
+ experiments_helper::SelectedGroupIdCompare> SelectedGroupIdSet; |
+ std::string trial_one("trial one"); |
+ std::string group_one("group one"); |
+ std::string trial_two("trial two"); |
+ std::string group_two("group two"); |
+ |
+ base::FieldTrial::SelectedGroups selected_groups; |
+ base::FieldTrial::SelectedGroup selected_group; |
+ selected_group.trial = trial_one; |
+ selected_group.group = group_one; |
+ selected_groups.push_back(selected_group); |
+ |
+ selected_group.trial = trial_two; |
+ selected_group.group = group_two; |
+ selected_groups.push_back(selected_group); |
+ |
+ // Create our expected groups of IDs. |
+ SelectedGroupIdSet expected_groups; |
+ experiments_helper::SelectedGroupId name_group_id; |
+ name_group_id.name = testing::TestHashName(trial_one); |
+ name_group_id.group = testing::TestHashName(group_one); |
+ expected_groups.insert(name_group_id); |
+ name_group_id.name = testing::TestHashName(trial_two); |
+ name_group_id.group = testing::TestHashName(group_two); |
+ expected_groups.insert(name_group_id); |
+ |
+ std::vector<experiments_helper::SelectedGroupId> selected_group_ids; |
+ testing::TestGetFieldTrialSelectedGroupIdsForSelectedGroups( |
+ selected_groups, &selected_group_ids); |
+ EXPECT_EQ(2U, selected_group_ids.size()); |
+ for (size_t i = 0; i < selected_group_ids.size(); ++i) { |
+ SelectedGroupIdSet::iterator expected_group = |
+ expected_groups.find(selected_group_ids[i]); |
+ EXPECT_FALSE(expected_group == expected_groups.end()); |
+ expected_groups.erase(expected_group); |
+ } |
+ EXPECT_EQ(0U, expected_groups.size()); |
+} |
+ |
// Test that if the trial is immediately disabled, GetGoogleExperimentID just |
// returns the empty ID. |
TEST_F(ExperimentsHelperTest, DisableImmediately) { |
@@ -76,9 +139,9 @@ TEST_F(ExperimentsHelperTest, DisableAfterInitialization) { |
next_year_, 12, 12, NULL)); |
trial->AppendGroup(non_default_name, 100); |
experiments_helper::AssociateGoogleExperimentID( |
- base::FieldTrial::MakeNameGroupId(trial->name(), default_name), 123); |
+ trial->name(), default_name, 123); |
experiments_helper::AssociateGoogleExperimentID( |
- base::FieldTrial::MakeNameGroupId(trial->name(), non_default_name), 456); |
+ trial->name(), non_default_name, 456); |
ASSERT_EQ(non_default_name, trial->group_name()); |
ASSERT_EQ(456U, GetIDForTrial(trial.get())); |
trial->Disable(); |
@@ -97,11 +160,9 @@ TEST_F(ExperimentsHelperTest, AssociateGoogleExperimentID) { |
// Set GoogleExperimentIDs so we can verify that they were chosen correctly. |
experiments_helper::AssociateGoogleExperimentID( |
- base::FieldTrial::MakeNameGroupId(trial_true->name(), default_name1), |
- 123); |
+ trial_true->name(), default_name1, 123); |
experiments_helper::AssociateGoogleExperimentID( |
- base::FieldTrial::MakeNameGroupId(trial_true->name(), winner), |
- 456); |
+ trial_true->name(), winner, 456); |
EXPECT_EQ(winner_group, trial_true->group()); |
EXPECT_EQ(winner, trial_true->group_name()); |
@@ -115,11 +176,9 @@ TEST_F(ExperimentsHelperTest, AssociateGoogleExperimentID) { |
int loser_group = trial_false->AppendGroup(loser, 0); |
experiments_helper::AssociateGoogleExperimentID( |
- base::FieldTrial::MakeNameGroupId(trial_false->name(), default_name2), |
- 123); |
+ trial_false->name(), default_name2, 123); |
experiments_helper::AssociateGoogleExperimentID( |
- base::FieldTrial::MakeNameGroupId(trial_false->name(), loser), |
- 456); |
+ trial_false->name(), loser, 456); |
EXPECT_NE(loser_group, trial_false->group()); |
EXPECT_EQ(123U, GetIDForTrial(trial_false.get())); |