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

Unified Diff: chrome/browser/managed_mode/managed_user_shared_settings_service_unittest.cc

Issue 123293003: Add ManagedUserSharedSettingsService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comment Created 6 years, 11 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/managed_mode/managed_user_shared_settings_service_unittest.cc
diff --git a/chrome/browser/managed_mode/managed_user_shared_settings_service_unittest.cc b/chrome/browser/managed_mode/managed_user_shared_settings_service_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..393113e531df8f5d6bb34edcc0c999df904e0875
--- /dev/null
+++ b/chrome/browser/managed_mode/managed_user_shared_settings_service_unittest.cc
@@ -0,0 +1,300 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/bind.h"
+#include "base/json/json_writer.h"
+#include "base/prefs/pref_service.h"
+#include "chrome/browser/managed_mode/managed_user_shared_settings_service.h"
+#include "chrome/common/pref_names.h"
+#include "chrome/test/base/testing_profile.h"
+#include "sync/api/sync_change.h"
+#include "sync/api/sync_error_factory_mock.h"
+#include "sync/protocol/sync.pb.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using base::DictionaryValue;
+using base::FundamentalValue;
+using base::StringValue;
+using base::Value;
+using sync_pb::ManagedUserSharedSettingSpecifics;
+using syncer::MANAGED_USER_SHARED_SETTINGS;
+using syncer::SyncChange;
+using syncer::SyncChangeList;
+using syncer::SyncChangeProcessor;
+using syncer::SyncData;
+using syncer::SyncDataList;
+using syncer::SyncError;
+using syncer::SyncErrorFactory;
+using syncer::SyncMergeResult;
+
+namespace {
+
+class MockChangeProcessor : public syncer::SyncChangeProcessor {
+ public:
+ MockChangeProcessor() {}
+ virtual ~MockChangeProcessor() {}
+
+ // SyncChangeProcessor implementation:
+ virtual syncer::SyncError ProcessSyncChanges(
+ const tracked_objects::Location& from_here,
+ const syncer::SyncChangeList& change_list) OVERRIDE;
+ virtual syncer::SyncDataList GetAllSyncData(syncer::ModelType type) const
+ OVERRIDE;
+
+ const syncer::SyncChangeList& changes() const { return change_list_; }
+
+ private:
+ syncer::SyncChangeList change_list_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockChangeProcessor);
+};
+
+syncer::SyncError MockChangeProcessor::ProcessSyncChanges(
+ const tracked_objects::Location& from_here,
+ const syncer::SyncChangeList& change_list) {
+ change_list_ = change_list;
+ return syncer::SyncError();
+}
+
+syncer::SyncDataList
+MockChangeProcessor::GetAllSyncData(syncer::ModelType type) const {
+ return syncer::SyncDataList();
+}
+
+class MockSyncErrorFactory : public syncer::SyncErrorFactory {
+ public:
+ explicit MockSyncErrorFactory(syncer::ModelType type);
+ virtual ~MockSyncErrorFactory();
+
+ // SyncErrorFactory implementation:
+ virtual syncer::SyncError CreateAndUploadError(
+ const tracked_objects::Location& location,
+ const std::string& message) OVERRIDE;
+
+ private:
+ syncer::ModelType type_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockSyncErrorFactory);
+};
+
+MockSyncErrorFactory::MockSyncErrorFactory(syncer::ModelType type)
+ : type_(type) {}
+
+MockSyncErrorFactory::~MockSyncErrorFactory() {}
+
+syncer::SyncError MockSyncErrorFactory::CreateAndUploadError(
+ const tracked_objects::Location& location,
+ const std::string& message) {
+ return syncer::SyncError(location, SyncError::DATATYPE_ERROR, message, type_);
+}
+
+// Convenience method to allow us to use EXPECT_EQ to compare values.
+std::string ToJson(const Value* value) {
+ if (!value)
+ return std::string();
+
+ std::string json_value;
+ base::JSONWriter::Write(value, &json_value);
+ return json_value;
+}
+
+} // namespace
+
+class ManagedUserSharedSettingsServiceTest : public ::testing::Test {
+ protected:
+ typedef base::CallbackList<void(const std::string&, const std::string&)>
+ CallbackList;
+
+ ManagedUserSharedSettingsServiceTest()
+ : settings_service_(profile_.GetPrefs()) {}
+ virtual ~ManagedUserSharedSettingsServiceTest() {}
+
+ void StartSyncing(const syncer::SyncDataList& initial_sync_data) {
+ sync_processor_ = new MockChangeProcessor();
+ scoped_ptr<syncer::SyncErrorFactory> error_handler(
+ new MockSyncErrorFactory(MANAGED_USER_SHARED_SETTINGS));
+ SyncMergeResult result = settings_service_.MergeDataAndStartSyncing(
+ MANAGED_USER_SHARED_SETTINGS,
+ initial_sync_data,
+ scoped_ptr<SyncChangeProcessor>(sync_processor_),
+ error_handler.Pass());
+ EXPECT_FALSE(result.error().IsSet());
+ }
+
+ const base::DictionaryValue* GetAllSettings() {
+ return profile_.GetPrefs()->GetDictionary(
+ prefs::kManagedUserSharedSettings);
+ }
+
+ void VerifySyncChanges() {
+ const SyncChangeList& changes = sync_processor_->changes();
+ for (SyncChangeList::const_iterator it = changes.begin();
+ it != changes.end();
+ ++it) {
+ const sync_pb::ManagedUserSharedSettingSpecifics& setting =
+ it->sync_data().GetSpecifics().managed_user_shared_setting();
+ EXPECT_EQ(
+ setting.value(),
+ ToJson(settings_service_.GetValue(setting.mu_id(), setting.key())));
+ }
+ }
+
+ // testing::Test overrides:
+ virtual void SetUp() OVERRIDE {
+ subscription_ = settings_service_.Subscribe(
+ base::Bind(&ManagedUserSharedSettingsServiceTest::OnSettingChanged,
+ base::Unretained(this)));
+ }
+
+ virtual void TearDown() OVERRIDE { settings_service_.Shutdown(); }
+
+ void OnSettingChanged(const std::string& mu_id, const std::string& key) {
+ const Value* value = settings_service_.GetValue(mu_id, key);
+ ASSERT_TRUE(value);
+ changed_settings_.push_back(
+ ManagedUserSharedSettingsService::CreateSyncDataForSetting(
+ mu_id, key, *value, true));
+ }
+
+ TestingProfile profile_;
+ ManagedUserSharedSettingsService settings_service_;
+ SyncDataList changed_settings_;
+
+ scoped_ptr<CallbackList::Subscription> subscription_;
+
+ // Owned by the ManagedUserSettingsService.
+ MockChangeProcessor* sync_processor_;
+};
+
+TEST_F(ManagedUserSharedSettingsServiceTest, Empty) {
+ StartSyncing(SyncDataList());
+ EXPECT_EQ(0u, sync_processor_->changes().size());
+ EXPECT_EQ(0u, changed_settings_.size());
+ EXPECT_EQ(
+ 0u,
+ settings_service_.GetAllSyncData(MANAGED_USER_SHARED_SETTINGS).size());
+ EXPECT_EQ(0u, GetAllSettings()->size());
+}
+
+TEST_F(ManagedUserSharedSettingsServiceTest, SetAndGet) {
+ StartSyncing(SyncDataList());
+
+ const char kIdA[] = "aaaaaa";
+ const char kIdB[] = "bbbbbb";
+ const char kIdC[] = "cccccc";
+
+ StringValue name("Jack");
+ FundamentalValue age(8);
+ StringValue bar("bar");
+ settings_service_.SetValue(kIdA, "name", name);
+ ASSERT_EQ(1u, sync_processor_->changes().size());
+ VerifySyncChanges();
+ settings_service_.SetValue(kIdA, "age", FundamentalValue(6));
+ ASSERT_EQ(1u, sync_processor_->changes().size());
+ VerifySyncChanges();
+ settings_service_.SetValue(kIdA, "age", age);
+ ASSERT_EQ(1u, sync_processor_->changes().size());
+ VerifySyncChanges();
+ settings_service_.SetValue(kIdB, "foo", bar);
+ ASSERT_EQ(1u, sync_processor_->changes().size());
+ VerifySyncChanges();
+
+ EXPECT_EQ(
+ 3u,
+ settings_service_.GetAllSyncData(MANAGED_USER_SHARED_SETTINGS).size());
+
+ EXPECT_EQ(ToJson(&name), ToJson(settings_service_.GetValue(kIdA, "name")));
+ EXPECT_EQ(ToJson(&age), ToJson(settings_service_.GetValue(kIdA, "age")));
+ EXPECT_EQ(ToJson(&bar), ToJson(settings_service_.GetValue(kIdB, "foo")));
+ EXPECT_FALSE(settings_service_.GetValue(kIdA, "foo"));
+ EXPECT_FALSE(settings_service_.GetValue(kIdB, "name"));
+ EXPECT_FALSE(settings_service_.GetValue(kIdC, "name"));
+}
+
+TEST_F(ManagedUserSharedSettingsServiceTest, Merge) {
+ // Set initial values, then stop syncing so we can restart.
+ StartSyncing(SyncDataList());
+
+ const char kIdA[] = "aaaaaa";
+ const char kIdB[] = "bbbbbb";
+ const char kIdC[] = "cccccc";
+
+ FundamentalValue age(8);
+ StringValue bar("bar");
+ settings_service_.SetValue(kIdA, "name", StringValue("Jack"));
+ settings_service_.SetValue(kIdA, "age", age);
+ settings_service_.SetValue(kIdB, "foo", bar);
+
+ settings_service_.StopSyncing(MANAGED_USER_SHARED_SETTINGS);
+
+ StringValue name("Jill");
+ StringValue blurp("blurp");
+ SyncDataList sync_data;
+ sync_data.push_back(
+ ManagedUserSharedSettingsService::CreateSyncDataForSetting(
+ kIdA, "name", name, true));
+ sync_data.push_back(
+ ManagedUserSharedSettingsService::CreateSyncDataForSetting(
+ kIdC, "baz", blurp, true));
+
+ StartSyncing(sync_data);
+ EXPECT_EQ(2u, sync_processor_->changes().size());
+ VerifySyncChanges();
+ EXPECT_EQ(2u, changed_settings_.size());
+
+ EXPECT_EQ(
+ 4u,
+ settings_service_.GetAllSyncData(MANAGED_USER_SHARED_SETTINGS).size());
+ EXPECT_EQ(ToJson(&name),
+ ToJson(settings_service_.GetValue(kIdA, "name")));
+ EXPECT_EQ(ToJson(&age), ToJson(settings_service_.GetValue(kIdA, "age")));
+ EXPECT_EQ(ToJson(&bar), ToJson(settings_service_.GetValue(kIdB, "foo")));
+ EXPECT_EQ(ToJson(&blurp), ToJson(settings_service_.GetValue(kIdC, "baz")));
+ EXPECT_FALSE(settings_service_.GetValue(kIdA, "foo"));
+ EXPECT_FALSE(settings_service_.GetValue(kIdB, "name"));
+ EXPECT_FALSE(settings_service_.GetValue(kIdC, "name"));
+}
+
+TEST_F(ManagedUserSharedSettingsServiceTest, ProcessChanges) {
+ StartSyncing(SyncDataList());
+
+ const char kIdA[] = "aaaaaa";
+ const char kIdB[] = "bbbbbb";
+ const char kIdC[] = "cccccc";
+
+ FundamentalValue age(8);
+ StringValue bar("bar");
+ settings_service_.SetValue(kIdA, "name", StringValue("Jack"));
+ settings_service_.SetValue(kIdA, "age", age);
+ settings_service_.SetValue(kIdB, "foo", bar);
+
+ StringValue name("Jill");
+ StringValue blurp("blurp");
+ SyncChangeList changes;
+ changes.push_back(
+ SyncChange(FROM_HERE,
+ SyncChange::ACTION_UPDATE,
+ ManagedUserSharedSettingsService::CreateSyncDataForSetting(
+ kIdA, "name", name, true)));
+ changes.push_back(
+ SyncChange(FROM_HERE,
+ SyncChange::ACTION_ADD,
+ ManagedUserSharedSettingsService::CreateSyncDataForSetting(
+ kIdC, "baz", blurp, true)));
+ SyncError error = settings_service_.ProcessSyncChanges(FROM_HERE, changes);
+ EXPECT_FALSE(error.IsSet()) << error.ToString();
+ EXPECT_EQ(2u, changed_settings_.size());
+
+ EXPECT_EQ(
+ 4u,
+ settings_service_.GetAllSyncData(MANAGED_USER_SHARED_SETTINGS).size());
+ EXPECT_EQ(ToJson(&name),
+ ToJson(settings_service_.GetValue(kIdA, "name")));
+ EXPECT_EQ(ToJson(&age), ToJson(settings_service_.GetValue(kIdA, "age")));
+ EXPECT_EQ(ToJson(&bar), ToJson(settings_service_.GetValue(kIdB, "foo")));
+ EXPECT_EQ(ToJson(&blurp), ToJson(settings_service_.GetValue(kIdC, "baz")));
+ EXPECT_FALSE(settings_service_.GetValue(kIdA, "foo"));
+ EXPECT_FALSE(settings_service_.GetValue(kIdB, "name"));
+ EXPECT_FALSE(settings_service_.GetValue(kIdC, "name"));
+}

Powered by Google App Engine
This is Rietveld 408576698