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

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: more merge conflicts 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
« no previous file with comments | « chrome/browser/metrics/variations_service.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 eadd1170c4043bd5de94e85bcd7ed669dc8cff32..d51149f1a1b93396d8efd06b83e836874fc7388d 100644
--- a/chrome/browser/metrics/variations_service_unittest.cc
+++ b/chrome/browser/metrics/variations_service_unittest.cc
@@ -2,10 +2,13 @@
// 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 "base/string_split.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 {
@@ -17,6 +20,21 @@ 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.
+chrome_variations::TrialsSeed CreateTestSeed() {
+ chrome_variations::TrialsSeed seed;
+ 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);
+ return seed;
+}
+
} // namespace
TEST(VariationsServiceTest, CheckStudyChannel) {
@@ -290,6 +308,79 @@ TEST(VariationsServiceTest, IsStudyExpired) {
}
}
+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();
+
+ 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");
+ EXPECT_FALSE(
+ pref_service.FindPreference(prefs::kVariationsSeed)->IsDefaultValue());
+ EXPECT_FALSE(
+ variations_service.LoadTrialsSeedFromPref(&pref_service, &loaded_seed));
+ EXPECT_TRUE(
+ pref_service.FindPreference(prefs::kVariationsSeed)->IsDefaultValue());
+}
+
+TEST(VariationsServiceTest, StoreSeed) {
+ TestingPrefService pref_service;
+
+ VariationsService::RegisterPrefs(&pref_service);
+ const base::Time now = base::Time::Now();
+
+ chrome_variations::TrialsSeed seed = CreateTestSeed();
+
+ VariationsService variations_service;
+ std::string serialized_seed;
+ seed.SerializeToString(&serialized_seed);
+ EXPECT_TRUE(
+ 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);
+ EXPECT_FALSE(
+ variations_service.StoreSeedData("this should fail", now, &pref_service));
+ EXPECT_TRUE(
+ pref_service.FindPreference(prefs::kVariationsSeed)->IsDefaultValue());
+}
+
TEST(VariationsServiceTest, ValidateStudy) {
Study study;
study.set_default_experiment_name("def");
« no previous file with comments | « chrome/browser/metrics/variations_service.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698