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

Unified Diff: chrome/browser/metrics/variations_service_unittest.cc

Issue 10764005: Added tests for storing and loading seed data to and from prefs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing merge conflict Created 8 years, 5 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
Index: chrome/browser/metrics/variations_service_unittest.cc
diff --git a/chrome/browser/metrics/variations_service_unittest.cc b/chrome/browser/metrics/variations_service_unittest.cc
index aa2cd1ee09aca363dbe532c16d2286f3fd0d7a76..98bfd42b62007ea94772a75444b176a87e8965aa 100644
--- a/chrome/browser/metrics/variations_service_unittest.cc
+++ b/chrome/browser/metrics/variations_service_unittest.cc
@@ -2,9 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/base64.h"
#include "chrome/browser/metrics/proto/study.pb.h"
#include "chrome/browser/metrics/variations_service.h"
#include "chrome/common/chrome_version_info.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/base/testing_pref_service.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace chrome_variations {
@@ -16,6 +19,20 @@ int64 TimeToProtoTime(const base::Time& time) {
return (time - base::Time::UnixEpoch()).InSeconds();
}
+// Populates |seed| with simple test data. The resulting seed will contain one
+// study called "test", which contains one experiment called "abc" with
+// probability weight 100. |seed|'s study field will be cleared before adding
+// the new study.
+void CreateTestSeed(chrome_variations::TrialsSeed* seed) {
SteveT 2012/07/09 19:23:26 nit: DCHECK(seed);
SteveT 2012/07/09 19:23:26 You currently don't use these seeds more than once
jwd 2012/07/09 21:08:13 Done.
jwd 2012/07/09 21:08:13 Done.
+ seed->clear_study();
+ chrome_variations::Study* study = seed->add_study();
+ study->set_name("test");
+ study->set_default_experiment_name("abc");
+ chrome_variations::Study_Experiment* experiment = study->add_experiment();
+ experiment->set_name("abc");
+ experiment->set_probability_weight(100);
+}
+
} // namespace
TEST(VariationsServiceTest, CheckStudyChannel) {
@@ -332,4 +349,75 @@ TEST(VariationsServiceTest, ValidateStudy) {
EXPECT_FALSE(valid);
}
+TEST(VariationsServiceTest, StoreSeed) {
+ TestingPrefService pref_service;
+
+ VariationsService::RegisterPrefs(&pref_service);
+ const base::Time now = base::Time::Now();
+
+ chrome_variations::TrialsSeed seed;
+ CreateTestSeed(&seed);
+
+ VariationsService variations_service;
+ std::string serialized_seed;
+ seed.SerializeToString(&serialized_seed);
+ variations_service.StoreSeedData(serialized_seed, now, &pref_service);
+ // Make sure the pref was actually set.
+ EXPECT_FALSE(
+ pref_service.FindPreference(prefs::kVariationsSeed)->IsDefaultValue());
+
+ std::string loaded_serialized_seed =
+ pref_service.GetString(prefs::kVariationsSeed);
+ std::string decoded_serialized_seed;
+ ASSERT_TRUE(base::Base64Decode(loaded_serialized_seed,
+ &decoded_serialized_seed));
+ // Make sure the stored seed from pref is the same as the seed we created.
+ EXPECT_EQ(serialized_seed, decoded_serialized_seed);
+
+ // Check if trying to store a bad seed leaves the pref unchanged.
+ pref_service.ClearPref(prefs::kVariationsSeed);
+ variations_service.StoreSeedData("this should fail", now, &pref_service);
SteveT 2012/07/09 19:23:26 Optional: Might be nice to have StoreSeedData retu
jwd 2012/07/09 21:08:13 Done.
+ EXPECT_TRUE(
+ pref_service.FindPreference(prefs::kVariationsSeed)->IsDefaultValue());
+}
+
+TEST(VariationsServiceTest, LoadSeed) {
+ TestingPrefService pref_service;
+
+ VariationsService::RegisterPrefs(&pref_service);
+
+ // Store good seed data to test if loading from prefs works.
+ chrome_variations::TrialsSeed seed;
+ CreateTestSeed(&seed);
+
+ std::string serialized_seed;
+ seed.SerializeToString(&serialized_seed);
+ std::string base64_serialized_seed;
+ ASSERT_TRUE(base::Base64Encode(serialized_seed, &base64_serialized_seed));
+ pref_service.SetString(prefs::kVariationsSeed, base64_serialized_seed);
+
+ VariationsService variations_service;
+ chrome_variations::TrialsSeed loaded_seed;
+ EXPECT_TRUE(
+ variations_service.LoadTrialsSeedFromPref(&pref_service, &loaded_seed));
+
+ std::string serialized_loaded_seed;
+ loaded_seed.SerializeToString(&serialized_loaded_seed);
+ // Check that the loaded data is the same as the original.
+ EXPECT_EQ(serialized_seed, serialized_loaded_seed);
+ // Make sure the pref hasn't been changed.
+ EXPECT_FALSE(
+ pref_service.FindPreference(prefs::kVariationsSeed)->IsDefaultValue());
+ EXPECT_EQ(base64_serialized_seed,
+ pref_service.GetString(prefs::kVariationsSeed));
+
+ // Check that loading a bad seed returns false and clears the pref.
+ pref_service.ClearPref(prefs::kVariationsSeed);
+ pref_service.SetString(prefs::kVariationsSeed, "this should fail");
SteveT 2012/07/09 19:23:26 Would this be useful to ensure that we're actually
jwd 2012/07/09 21:08:13 Done. Might as well.
+ EXPECT_FALSE(
+ variations_service.LoadTrialsSeedFromPref(&pref_service, &loaded_seed));
+ EXPECT_TRUE(
+ pref_service.FindPreference(prefs::kVariationsSeed)->IsDefaultValue());
+}
+
} // namespace chrome_variations
« chrome/browser/metrics/variations_service.h ('K') | « chrome/browser/metrics/variations_service.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698