diff options
author | joi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-06 00:52:39 +0000 |
---|---|---|
committer | joi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-06 00:52:39 +0000 |
commit | 5557b198f9815a758cf5a27d463e077b8bbbbfd8 (patch) | |
tree | 72d192231b743092b69ba1cbb5bb4501aa324e41 /base/metrics/field_trial_unittest.cc | |
parent | dc86fccde35745d2b1501fcc08d9aa42ea1ee1cc (diff) | |
download | chromium_src-5557b198f9815a758cf5a27d463e077b8bbbbfd8.zip chromium_src-5557b198f9815a758cf5a27d463e077b8bbbbfd8.tar.gz chromium_src-5557b198f9815a758cf5a27d463e077b8bbbbfd8.tar.bz2 |
Revert 84197 - Add one-time randomization support for FieldTrial, and the ability to
disable field trials. I am going to have a need for both soon.
Cleaning up some comments about empty trial names, adding static
method TrialExists() and simplifying many call sites by using this
method.
While I'm in there and needing base/OWNERS approval, add an OWNERS
file for base/metrics that adds jar@chromium.org as an owner for that
directory.
BUG=none
TEST=base_unittests
TBR=jam@chromium.org
R=jar@chromium.org,phajdan.jr@chromium.org,mark@chromium.org,wtc@chromium.org
Reason for revert: See http://crbug.com/81750
BUG=81750
TBR=joi@chromium.org
Review URL: http://codereview.chromium.org/6931048
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@84373 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base/metrics/field_trial_unittest.cc')
-rw-r--r-- | base/metrics/field_trial_unittest.cc | 125 |
1 files changed, 7 insertions, 118 deletions
diff --git a/base/metrics/field_trial_unittest.cc b/base/metrics/field_trial_unittest.cc index a790add..3357085 100644 --- a/base/metrics/field_trial_unittest.cc +++ b/base/metrics/field_trial_unittest.cc @@ -6,18 +6,14 @@ #include "base/metrics/field_trial.h" -#include "base/rand_util.h" #include "base/stringprintf.h" -#include "base/string_number_conversions.h" #include "testing/gtest/include/gtest/gtest.h" -#include <limits> - namespace base { class FieldTrialTest : public testing::Test { public: - FieldTrialTest() : trial_list_("client_id") { + FieldTrialTest() : trial_list_() { Time now = Time::NowFromSystemTime(); TimeDelta oneYear = TimeDelta::FromDays(365); Time::Exploded exploded; @@ -228,10 +224,9 @@ TEST_F(FieldTrialTest, Save) { new FieldTrial( "Some name", 10, "Default some name", next_year_, 12, 31); // There is no winner yet, so no textual group name is associated with trial. - // In this case, the trial should not be included. EXPECT_EQ("", trial->group_name_internal()); FieldTrialList::StatesToString(&save_string); - EXPECT_EQ("", save_string); + EXPECT_EQ("Some name/Default some name/", save_string); save_string.clear(); // Create a winning group. @@ -270,10 +265,10 @@ TEST_F(FieldTrialTest, Restore) { TEST_F(FieldTrialTest, BogusRestore) { EXPECT_FALSE(FieldTrialList::CreateTrialsInChildProcess("MissingSlash")); EXPECT_FALSE(FieldTrialList::CreateTrialsInChildProcess("MissingGroupName/")); - EXPECT_FALSE(FieldTrialList::CreateTrialsInChildProcess( - "MissingFinalSlash/gname")); - EXPECT_FALSE(FieldTrialList::CreateTrialsInChildProcess( - "noname, only group/")); + EXPECT_FALSE( + FieldTrialList::CreateTrialsInChildProcess("MissingFinalSlash/gname")); + EXPECT_FALSE( + FieldTrialList::CreateTrialsInChildProcess("/noname, only group/")); } TEST_F(FieldTrialTest, DuplicateRestore) { @@ -289,8 +284,7 @@ TEST_F(FieldTrialTest, DuplicateRestore) { EXPECT_TRUE(FieldTrialList::CreateTrialsInChildProcess(save_string)); // But it is an error to try to change to a different winner. - EXPECT_FALSE(FieldTrialList::CreateTrialsInChildProcess( - "Some name/Loser/")); + EXPECT_FALSE(FieldTrialList::CreateTrialsInChildProcess("Some name/Loser/")); } TEST_F(FieldTrialTest, CreateFieldTrial) { @@ -327,109 +321,4 @@ TEST_F(FieldTrialTest, MakeName) { FieldTrial::MakeName("Histogram", "Field Trial")); } -TEST_F(FieldTrialTest, HashClientId) { - double results[] = { - FieldTrial::HashClientId("hi", "1"), - FieldTrial::HashClientId("there", "1"), - }; - ASSERT_NE(results[0], results[1]); - for (size_t i = 0; i < arraysize(results); ++i) { - ASSERT_LE(0.0, results[i]); - ASSERT_GT(1.0, results[i]); - } - - ASSERT_EQ(FieldTrial::HashClientId("yo", "1"), - FieldTrial::HashClientId("yo", "1")); - ASSERT_NE(FieldTrial::HashClientId("yo", "something"), - FieldTrial::HashClientId("yo", "else")); -} - -TEST_F(FieldTrialTest, HashClientIdIsUniform) { - // Choose a random start number but go sequentially from there, so - // that each test tries a different range but we never provide uniformly - // distributed input data. - int current_number = RandInt(0, std::numeric_limits<int>::max()); - - // The expected value of a random distribution is the average over all - // samples as the number of samples approaches infinity. For a uniform - // distribution from [0.0, 1.0) this would be 0.5. - // - // We do kSamplesBetweenChecks at a time and check if the value has converged - // to a narrow interval around 0.5. A non-uniform distribution would likely - // converge at something different, or not converge consistently within this - // range (i.e. the test would start timing out occasionally). - int kSamplesBetweenChecks = 300; - int num_samples = 0; - double total_value = 0.0; - while (true) { - for (int i = 0; i < kSamplesBetweenChecks; ++i) { - total_value += FieldTrial::HashClientId( - IntToString(current_number++), "salt"); - num_samples++; - } - - double average = total_value / num_samples; - double kExpectedMin = 0.48; - double kExpectedMax = 0.52; - - if (num_samples > 1000 && - (average < kExpectedMin || average > kExpectedMax)) { - // Only printed once we have enough samples that it's very unlikely - // things haven't converged. - printf("After %d samples, the average was %f, outside the expected\n" - "range (%f, %f). We will add more samples and check after every\n" - "%d samples. If the average does not converge, something\n" - "is broken. If it does converge, the test will pass.\n", - num_samples, average, - kExpectedMin, kExpectedMax, kSamplesBetweenChecks); - } else { - // Success. - break; - } - } -} - -TEST_F(FieldTrialTest, UseOneTimeRandomization) { - // Simply asserts that two trials using one-time randomization - // that have different names, normally generate different results. - // - // Note that depending on the one-time random initialization, they - // _might_ actually give the same result, but we know that given - // the particular client_id we use for unit tests they won't. - scoped_refptr<FieldTrial> trials[] = { - new FieldTrial("one", 100, "default", next_year_, 1, 1), - new FieldTrial("two", 100, "default", next_year_, 1, 1), - }; - - for (size_t i = 0; i < arraysize(trials); ++i) { - trials[i]->UseOneTimeRandomization(); - - for (int j = 0; j < 100; ++j) { - trials[i]->AppendGroup("", 1); - } - } - - // The trials are most likely to give different results since they have - // different names. - ASSERT_NE(trials[0]->group(), trials[1]->group()); - ASSERT_NE(trials[0]->group_name(), trials[1]->group_name()); -} - -TEST_F(FieldTrialTest, DisableImmediately) { - FieldTrial* trial = - new FieldTrial("trial", 100, "default", next_year_, 12, 31); - trial->Disable(); - ASSERT_EQ("default", trial->group_name()); - ASSERT_EQ(FieldTrial::kDefaultGroupNumber, trial->group()); -} - -TEST_F(FieldTrialTest, DisableAfterInitialization) { - FieldTrial* trial = - new FieldTrial("trial", 100, "default", next_year_, 12, 31); - trial->AppendGroup("non_default", 100); - ASSERT_EQ("non_default", trial->group_name()); - trial->Disable(); - ASSERT_EQ("default", trial->group_name()); -} - } // namespace base |