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

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

Issue 23376002: Move ManagedModePolicyProvider functionality to ManagedUserSettingsService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 7 years, 3 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_settings_service_unittest.cc
diff --git a/chrome/browser/managed_mode/managed_user_settings_service_unittest.cc b/chrome/browser/managed_mode/managed_user_settings_service_unittest.cc
index bef9d7a7bcb25422dff9ab5f16f4520de6456a2f..e48d5842969badb30ccad1a2e849fa18c976cec8 100644
--- a/chrome/browser/managed_mode/managed_user_settings_service_unittest.cc
+++ b/chrome/browser/managed_mode/managed_user_settings_service_unittest.cc
@@ -4,10 +4,81 @@
#include "base/bind.h"
#include "base/callback.h"
+#include "base/json/json_reader.h"
#include "base/prefs/testing_pref_store.h"
+#include "base/strings/string_util.h"
#include "chrome/browser/managed_mode/managed_user_settings_service.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"
+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,
+ syncer::SyncError::DATATYPE_ERROR,
+ message,
+ type_);
+}
+
+} // namespace
+
const char kAtomicItemName[] = "X-Wombat";
const char kSettingsName[] = "TestingSetting";
const char kSettingsValue[] = "SettingsValue";
@@ -18,6 +89,57 @@ class ManagedUserSettingsServiceTest : public ::testing::Test {
ManagedUserSettingsServiceTest() {}
virtual ~ManagedUserSettingsServiceTest() {}
+ scoped_ptr<syncer::SyncChangeProcessor> CreateSyncProcessor() {
+ sync_processor_ = new MockChangeProcessor();
+ return scoped_ptr<syncer::SyncChangeProcessor>(sync_processor_);
+ }
+
+ void StartSyncing(const syncer::SyncDataList& initial_sync_data) {
+ scoped_ptr<syncer::SyncErrorFactory> error_handler(
+ new MockSyncErrorFactory(syncer::MANAGED_USER_SETTINGS));
+ syncer::SyncMergeResult result = settings_service_.MergeDataAndStartSyncing(
+ syncer::MANAGED_USER_SETTINGS,
+ initial_sync_data,
+ CreateSyncProcessor(),
+ error_handler.Pass());
+ EXPECT_FALSE(result.error().IsSet());
+ }
+
+ void UploadSplitItem(const std::string& key, const std::string& value) {
+ split_items_.SetStringWithoutPathExpansion(key, value);
+ settings_service_.UploadItem(
+ ManagedUserSettingsService::MakeSplitSettingKey(kSplitItemName,
+ key),
+ scoped_ptr<base::Value>(new base::StringValue(value)));
+ }
+
+ void UploadAtomicItem(const std::string& value) {
+ atomic_setting_value_.reset(new base::StringValue(value));
+ settings_service_.UploadItem(
+ kAtomicItemName,
+ scoped_ptr<base::Value>(new base::StringValue(value)));
+ }
+
+ void VerifySyncDataItem(syncer::SyncData sync_data) {
+ const sync_pb::ManagedUserSettingSpecifics& managed_user_setting =
+ sync_data.GetSpecifics().managed_user_setting();
+ base::Value* expected_value = NULL;
+ if (managed_user_setting.name() == kAtomicItemName) {
+ expected_value = atomic_setting_value_.get();
+ } else {
+ EXPECT_TRUE(StartsWithASCII(managed_user_setting.name(),
+ std::string(kSplitItemName) + ':',
+ true));
+ std::string key =
+ managed_user_setting.name().substr(strlen(kSplitItemName) + 1);
+ EXPECT_TRUE(split_items_.GetWithoutPathExpansion(key, &expected_value));
+ }
+
+ scoped_ptr<Value> value(
+ base::JSONReader::Read(managed_user_setting.value()));
+ EXPECT_TRUE(expected_value->Equals(value.get()));
+ }
+
void OnNewSettingsAvailable(const base::DictionaryValue* settings) {
if (!settings)
settings_.reset();
@@ -46,8 +168,66 @@ class ManagedUserSettingsServiceTest : public ::testing::Test {
scoped_ptr<base::Value> atomic_setting_value_;
ManagedUserSettingsService settings_service_;
scoped_ptr<base::DictionaryValue> settings_;
+
+ // Owned by the ManagedUserSettingsService.
+ MockChangeProcessor* sync_processor_;
};
+TEST_F(ManagedUserSettingsServiceTest, ProcessAtomicSetting) {
+ StartSyncing(syncer::SyncDataList());
+ ASSERT_TRUE(settings_);
+ const base::Value* value = NULL;
+ EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value));
+
+ settings_.reset();
+ syncer::SyncData data =
+ ManagedUserSettingsService::CreateSyncDataForSetting(
+ kSettingsName, base::StringValue(kSettingsValue));
+ syncer::SyncChangeList change_list;
+ change_list.push_back(
+ syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data));
+ syncer::SyncError error =
+ settings_service_.ProcessSyncChanges(FROM_HERE, change_list);
+ EXPECT_FALSE(error.IsSet()) << error.ToString();
+ ASSERT_TRUE(settings_);
+ ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value));
+ std::string string_value;
+ EXPECT_TRUE(value->GetAsString(&string_value));
+ EXPECT_EQ(kSettingsValue, string_value);
+}
+
+TEST_F(ManagedUserSettingsServiceTest, ProcessSplitSetting) {
+ StartSyncing(syncer::SyncDataList());
+ ASSERT_TRUE(settings_);
+ const base::Value* value = NULL;
+ EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value));
+
+ base::DictionaryValue dict;
+ dict.SetString("foo", "bar");
+ dict.SetBoolean("awesomesauce", true);
+ dict.SetInteger("eaudecologne", 4711);
+
+ settings_.reset();
+ syncer::SyncChangeList change_list;
+ for (base::DictionaryValue::Iterator it(dict); !it.IsAtEnd(); it.Advance()) {
+ syncer::SyncData data =
+ ManagedUserSettingsService::CreateSyncDataForSetting(
+ ManagedUserSettingsService::MakeSplitSettingKey(kSettingsName,
+ it.key()),
+ it.value());
+ change_list.push_back(
+ syncer::SyncChange(FROM_HERE, syncer::SyncChange::ACTION_ADD, data));
+ }
+ syncer::SyncError error =
+ settings_service_.ProcessSyncChanges(FROM_HERE, change_list);
+ EXPECT_FALSE(error.IsSet()) << error.ToString();
+ ASSERT_TRUE(settings_);
+ ASSERT_TRUE(settings_->GetWithoutPathExpansion(kSettingsName, &value));
+ const base::DictionaryValue* dict_value = NULL;
+ ASSERT_TRUE(value->GetAsDictionary(&dict_value));
+ EXPECT_TRUE(dict_value->Equals(&dict));
+}
+
TEST_F(ManagedUserSettingsServiceTest, SetLocalSetting) {
const base::Value* value = NULL;
EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSettingsName, &value));
@@ -62,3 +242,84 @@ TEST_F(ManagedUserSettingsServiceTest, SetLocalSetting) {
EXPECT_TRUE(value->GetAsString(&string_value));
EXPECT_EQ(kSettingsValue, string_value);
}
+
+TEST_F(ManagedUserSettingsServiceTest, UploadItem) {
+ UploadSplitItem("foo", "bar");
+ UploadSplitItem("blurp", "baz");
+ UploadAtomicItem("hurdle");
+
+ // Uploading should produce changes when we start syncing.
+ StartSyncing(syncer::SyncDataList());
+ const syncer::SyncChangeList& changes = sync_processor_->changes();
+ ASSERT_EQ(3u, changes.size());
+ for (syncer::SyncChangeList::const_iterator it = changes.begin();
+ it != changes.end(); ++it) {
+ ASSERT_TRUE(it->IsValid());
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, it->change_type());
+ VerifySyncDataItem(it->sync_data());
+ }
+
+ // It should also show up in local Sync data.
+ syncer::SyncDataList sync_data =
+ settings_service_.GetAllSyncData(syncer::MANAGED_USER_SETTINGS);
+ EXPECT_EQ(3u, sync_data.size());
+ for (syncer::SyncDataList::const_iterator it = sync_data.begin();
+ it != sync_data.end(); ++it) {
+ VerifySyncDataItem(*it);
+ }
+
+ // Uploading after we have started syncing should work too.
+ UploadSplitItem("froodle", "narf");
+ ASSERT_EQ(1u, sync_processor_->changes().size());
+ syncer::SyncChange change = sync_processor_->changes()[0];
+ ASSERT_TRUE(change.IsValid());
+ EXPECT_EQ(syncer::SyncChange::ACTION_ADD, change.change_type());
+ VerifySyncDataItem(change.sync_data());
+
+ sync_data = settings_service_.GetAllSyncData(syncer::MANAGED_USER_SETTINGS);
+ EXPECT_EQ(4u, sync_data.size());
+ for (syncer::SyncDataList::const_iterator it = sync_data.begin();
+ it != sync_data.end(); ++it) {
+ VerifySyncDataItem(*it);
+ }
+
+ // Uploading an item with a previously seen key should create an UPDATE
+ // action.
+ UploadSplitItem("blurp", "snarl");
+ ASSERT_EQ(1u, sync_processor_->changes().size());
+ change = sync_processor_->changes()[0];
+ ASSERT_TRUE(change.IsValid());
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change.change_type());
+ VerifySyncDataItem(change.sync_data());
+
+ sync_data = settings_service_.GetAllSyncData(syncer::MANAGED_USER_SETTINGS);
+ EXPECT_EQ(4u, sync_data.size());
+ for (syncer::SyncDataList::const_iterator it = sync_data.begin();
+ it != sync_data.end(); ++it) {
+ VerifySyncDataItem(*it);
+ }
+
+ UploadAtomicItem("fjord");
+ ASSERT_EQ(1u, sync_processor_->changes().size());
+ change = sync_processor_->changes()[0];
+ ASSERT_TRUE(change.IsValid());
+ EXPECT_EQ(syncer::SyncChange::ACTION_UPDATE, change.change_type());
+ VerifySyncDataItem(change.sync_data());
+
+ sync_data = settings_service_.GetAllSyncData(syncer::MANAGED_USER_SETTINGS);
+ EXPECT_EQ(4u, sync_data.size());
+ for (syncer::SyncDataList::const_iterator it = sync_data.begin();
+ it != sync_data.end(); ++it) {
+ VerifySyncDataItem(*it);
+ }
+
+ // The uploaded items should not show up as settings.
+ const base::Value* value = NULL;
+ EXPECT_FALSE(settings_->GetWithoutPathExpansion(kAtomicItemName, &value));
+ EXPECT_FALSE(settings_->GetWithoutPathExpansion(kSplitItemName, &value));
+
+ // Restarting sync should not create any new changes.
+ settings_service_.StopSyncing(syncer::MANAGED_USER_SETTINGS);
+ StartSyncing(sync_data);
+ ASSERT_EQ(0u, sync_processor_->changes().size());
+}

Powered by Google App Engine
This is Rietveld 408576698