| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "base/threading/sequenced_worker_pool.h" | 9 #include "base/threading/sequenced_worker_pool.h" |
| 10 #include "chrome/browser/managed_mode/managed_user_sync_service.h" | 10 #include "chrome/browser/managed_mode/managed_user_sync_service.h" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 } // namespace | 78 } // namespace |
| 79 | 79 |
| 80 class ManagedUserSyncServiceTest : public ::testing::Test { | 80 class ManagedUserSyncServiceTest : public ::testing::Test { |
| 81 public: | 81 public: |
| 82 ManagedUserSyncServiceTest(); | 82 ManagedUserSyncServiceTest(); |
| 83 virtual ~ManagedUserSyncServiceTest(); | 83 virtual ~ManagedUserSyncServiceTest(); |
| 84 | 84 |
| 85 protected: | 85 protected: |
| 86 scoped_ptr<SyncChangeProcessor> CreateChangeProcessor(); | 86 scoped_ptr<SyncChangeProcessor> CreateChangeProcessor(); |
| 87 scoped_ptr<SyncErrorFactory> CreateErrorFactory(); | 87 scoped_ptr<SyncErrorFactory> CreateErrorFactory(); |
| 88 SyncData CreateRemoteData(const std::string& id, const std::string& name); | 88 SyncData CreateRemoteData(const std::string& id, |
| 89 const std::string& name, |
| 90 const std::string& avatar); |
| 89 | 91 |
| 90 PrefService* prefs() { return profile_.GetPrefs(); } | 92 PrefService* prefs() { return profile_.GetPrefs(); } |
| 91 ManagedUserSyncService* service() { return service_; } | 93 ManagedUserSyncService* service() { return service_; } |
| 92 MockChangeProcessor* change_processor() { return change_processor_; } | 94 MockChangeProcessor* change_processor() { return change_processor_; } |
| 93 | 95 |
| 94 private: | 96 private: |
| 95 TestingProfile profile_; | 97 TestingProfile profile_; |
| 96 ManagedUserSyncService* service_; | 98 ManagedUserSyncService* service_; |
| 97 | 99 |
| 98 // Owned by the ManagedUserSyncService. | 100 // Owned by the ManagedUserSyncService. |
| (...skipping 18 matching lines...) Expand all Loading... |
| 117 return scoped_ptr<SyncChangeProcessor>(change_processor_); | 119 return scoped_ptr<SyncChangeProcessor>(change_processor_); |
| 118 } | 120 } |
| 119 | 121 |
| 120 scoped_ptr<SyncErrorFactory> | 122 scoped_ptr<SyncErrorFactory> |
| 121 ManagedUserSyncServiceTest::CreateErrorFactory() { | 123 ManagedUserSyncServiceTest::CreateErrorFactory() { |
| 122 return scoped_ptr<SyncErrorFactory>(new syncer::SyncErrorFactoryMock()); | 124 return scoped_ptr<SyncErrorFactory>(new syncer::SyncErrorFactoryMock()); |
| 123 } | 125 } |
| 124 | 126 |
| 125 SyncData ManagedUserSyncServiceTest::CreateRemoteData( | 127 SyncData ManagedUserSyncServiceTest::CreateRemoteData( |
| 126 const std::string& id, | 128 const std::string& id, |
| 127 const std::string& name) { | 129 const std::string& name, |
| 130 const std::string& chrome_avatar) { |
| 128 ::sync_pb::EntitySpecifics specifics; | 131 ::sync_pb::EntitySpecifics specifics; |
| 129 specifics.mutable_managed_user()->set_id(id); | 132 specifics.mutable_managed_user()->set_id(id); |
| 130 specifics.mutable_managed_user()->set_name(name); | 133 specifics.mutable_managed_user()->set_name(name); |
| 131 specifics.mutable_managed_user()->set_acknowledged(true); | 134 specifics.mutable_managed_user()->set_acknowledged(true); |
| 135 if (!chrome_avatar.empty()) |
| 136 specifics.mutable_managed_user()->set_chrome_avatar(chrome_avatar); |
| 137 |
| 132 return SyncData::CreateRemoteData(++sync_data_id_, specifics, base::Time()); | 138 return SyncData::CreateRemoteData(++sync_data_id_, specifics, base::Time()); |
| 133 } | 139 } |
| 134 | 140 |
| 135 TEST_F(ManagedUserSyncServiceTest, MergeEmpty) { | 141 TEST_F(ManagedUserSyncServiceTest, MergeEmpty) { |
| 136 SyncMergeResult result = | 142 SyncMergeResult result = |
| 137 service()->MergeDataAndStartSyncing(MANAGED_USERS, | 143 service()->MergeDataAndStartSyncing(MANAGED_USERS, |
| 138 SyncDataList(), | 144 SyncDataList(), |
| 139 CreateChangeProcessor(), | 145 CreateChangeProcessor(), |
| 140 CreateErrorFactory()); | 146 CreateErrorFactory()); |
| 141 EXPECT_FALSE(result.error().IsSet()); | 147 EXPECT_FALSE(result.error().IsSet()); |
| 142 EXPECT_EQ(0, result.num_items_added()); | 148 EXPECT_EQ(0, result.num_items_added()); |
| 143 EXPECT_EQ(0, result.num_items_modified()); | 149 EXPECT_EQ(0, result.num_items_modified()); |
| 144 EXPECT_EQ(0, result.num_items_deleted()); | 150 EXPECT_EQ(0, result.num_items_deleted()); |
| 145 EXPECT_EQ(0, result.num_items_before_association()); | 151 EXPECT_EQ(0, result.num_items_before_association()); |
| 146 EXPECT_EQ(0, result.num_items_after_association()); | 152 EXPECT_EQ(0, result.num_items_after_association()); |
| 147 EXPECT_EQ(0u, service()->GetManagedUsers()->size()); | 153 EXPECT_EQ(0u, service()->GetManagedUsers()->size()); |
| 148 EXPECT_EQ(0u, change_processor()->changes().size()); | 154 EXPECT_EQ(0u, change_processor()->changes().size()); |
| 149 | 155 |
| 150 service()->StopSyncing(MANAGED_USERS); | 156 service()->StopSyncing(MANAGED_USERS); |
| 151 service()->Shutdown(); | 157 service()->Shutdown(); |
| 152 } | 158 } |
| 153 | 159 |
| 154 TEST_F(ManagedUserSyncServiceTest, MergeExisting) { | 160 TEST_F(ManagedUserSyncServiceTest, MergeExisting) { |
| 155 const char kNameKey[] = "name"; | 161 const char kNameKey[] = "name"; |
| 156 const char kAcknowledgedKey[] = "acknowledged"; | 162 const char kAcknowledgedKey[] = "acknowledged"; |
| 163 const char kChromeAvatarKey[] = "chromeAvatar"; |
| 157 | 164 |
| 158 const char kUserId1[] = "aaaaa"; | 165 const char kUserId1[] = "aaaaa"; |
| 159 const char kUserId2[] = "bbbbb"; | 166 const char kUserId2[] = "bbbbb"; |
| 160 const char kUserId3[] = "ccccc"; | 167 const char kUserId3[] = "ccccc"; |
| 161 const char kUserId4[] = "ddddd"; | 168 const char kUserId4[] = "ddddd"; |
| 162 const char kName1[] = "Anchor"; | 169 const char kName1[] = "Anchor"; |
| 163 const char kName2[] = "Buzz"; | 170 const char kName2[] = "Buzz"; |
| 164 const char kName3[] = "Crush"; | 171 const char kName3[] = "Crush"; |
| 165 const char kName4[] = "Dory"; | 172 const char kName4[] = "Dory"; |
| 173 const char kAvatar1[] = ""; |
| 174 const char kAvatar2[] = "chrome-avatar-index:0"; |
| 175 const char kAvatar3[] = "chrome-avatar-index:20"; |
| 176 const char kAvatar4[] = ""; |
| 166 { | 177 { |
| 167 DictionaryPrefUpdate update(prefs(), prefs::kManagedUsers); | 178 DictionaryPrefUpdate update(prefs(), prefs::kManagedUsers); |
| 168 DictionaryValue* managed_users = update.Get(); | 179 DictionaryValue* managed_users = update.Get(); |
| 169 DictionaryValue* dict = new DictionaryValue; | 180 DictionaryValue* dict = new DictionaryValue; |
| 170 dict->SetString(kNameKey, kName1); | 181 dict->SetString(kNameKey, kName1); |
| 171 managed_users->Set(kUserId1, dict); | 182 managed_users->Set(kUserId1, dict); |
| 172 dict = new DictionaryValue; | 183 dict = new DictionaryValue; |
| 173 dict->SetString(kNameKey, kName2); | 184 dict->SetString(kNameKey, kName2); |
| 174 dict->SetBoolean(kAcknowledgedKey, true); | 185 dict->SetBoolean(kAcknowledgedKey, true); |
| 175 managed_users->Set(kUserId2, dict); | 186 managed_users->Set(kUserId2, dict); |
| 176 } | 187 } |
| 177 | 188 |
| 178 const base::DictionaryValue* async_managed_users = NULL; | 189 const base::DictionaryValue* async_managed_users = NULL; |
| 179 service()->GetManagedUsersAsync( | 190 service()->GetManagedUsersAsync( |
| 180 base::Bind(&GetManagedUsersCallback, &async_managed_users)); | 191 base::Bind(&GetManagedUsersCallback, &async_managed_users)); |
| 181 | 192 |
| 182 SyncDataList initial_sync_data; | 193 SyncDataList initial_sync_data; |
| 183 initial_sync_data.push_back(CreateRemoteData(kUserId2, kName2)); | 194 initial_sync_data.push_back(CreateRemoteData(kUserId2, kName2, kAvatar2)); |
| 184 initial_sync_data.push_back(CreateRemoteData(kUserId3, kName3)); | 195 initial_sync_data.push_back(CreateRemoteData(kUserId3, kName3, kAvatar3)); |
| 185 initial_sync_data.push_back(CreateRemoteData(kUserId4, kName4)); | 196 initial_sync_data.push_back(CreateRemoteData(kUserId4, kName4, kAvatar4)); |
| 186 | 197 |
| 187 SyncMergeResult result = | 198 SyncMergeResult result = |
| 188 service()->MergeDataAndStartSyncing(MANAGED_USERS, | 199 service()->MergeDataAndStartSyncing(MANAGED_USERS, |
| 189 initial_sync_data, | 200 initial_sync_data, |
| 190 CreateChangeProcessor(), | 201 CreateChangeProcessor(), |
| 191 CreateErrorFactory()); | 202 CreateErrorFactory()); |
| 192 EXPECT_FALSE(result.error().IsSet()); | 203 EXPECT_FALSE(result.error().IsSet()); |
| 193 EXPECT_EQ(2, result.num_items_added()); | 204 EXPECT_EQ(2, result.num_items_added()); |
| 194 EXPECT_EQ(1, result.num_items_modified()); | 205 EXPECT_EQ(1, result.num_items_modified()); |
| 195 EXPECT_EQ(0, result.num_items_deleted()); | 206 EXPECT_EQ(0, result.num_items_deleted()); |
| 196 EXPECT_EQ(2, result.num_items_before_association()); | 207 EXPECT_EQ(2, result.num_items_before_association()); |
| 197 EXPECT_EQ(4, result.num_items_after_association()); | 208 EXPECT_EQ(4, result.num_items_after_association()); |
| 198 | 209 |
| 199 const DictionaryValue* managed_users = service()->GetManagedUsers(); | 210 const DictionaryValue* managed_users = service()->GetManagedUsers(); |
| 200 EXPECT_EQ(4u, managed_users->size()); | 211 EXPECT_EQ(4u, managed_users->size()); |
| 201 EXPECT_TRUE(async_managed_users); | 212 EXPECT_TRUE(async_managed_users); |
| 202 EXPECT_TRUE(managed_users->Equals(async_managed_users)); | 213 EXPECT_TRUE(managed_users->Equals(async_managed_users)); |
| 203 | 214 |
| 204 { | 215 { |
| 205 const DictionaryValue* managed_user = NULL; | 216 const DictionaryValue* managed_user = NULL; |
| 206 ASSERT_TRUE(managed_users->GetDictionary(kUserId2, &managed_user)); | 217 ASSERT_TRUE(managed_users->GetDictionary(kUserId2, &managed_user)); |
| 207 ASSERT_TRUE(managed_user); | 218 ASSERT_TRUE(managed_user); |
| 208 std::string name; | 219 std::string name; |
| 209 EXPECT_TRUE(managed_user->GetString(kNameKey, &name)); | 220 EXPECT_TRUE(managed_user->GetString(kNameKey, &name)); |
| 210 EXPECT_EQ(kName2, name); | 221 EXPECT_EQ(kName2, name); |
| 211 bool acknowledged = false; | 222 bool acknowledged = false; |
| 212 EXPECT_TRUE(managed_user->GetBoolean(kAcknowledgedKey, &acknowledged)); | 223 EXPECT_TRUE(managed_user->GetBoolean(kAcknowledgedKey, &acknowledged)); |
| 213 EXPECT_TRUE(acknowledged); | 224 EXPECT_TRUE(acknowledged); |
| 225 std::string avatar; |
| 226 EXPECT_TRUE(managed_user->GetString(kChromeAvatarKey, &avatar)); |
| 227 EXPECT_EQ(kAvatar2, avatar); |
| 214 } | 228 } |
| 215 { | 229 { |
| 216 const DictionaryValue* managed_user = NULL; | 230 const DictionaryValue* managed_user = NULL; |
| 217 ASSERT_TRUE(managed_users->GetDictionary(kUserId3, &managed_user)); | 231 ASSERT_TRUE(managed_users->GetDictionary(kUserId3, &managed_user)); |
| 218 ASSERT_TRUE(managed_user); | 232 ASSERT_TRUE(managed_user); |
| 219 std::string name; | 233 std::string name; |
| 220 EXPECT_TRUE(managed_user->GetString(kNameKey, &name)); | 234 EXPECT_TRUE(managed_user->GetString(kNameKey, &name)); |
| 221 EXPECT_EQ(kName3, name); | 235 EXPECT_EQ(kName3, name); |
| 222 bool acknowledged = false; | 236 bool acknowledged = false; |
| 223 EXPECT_TRUE(managed_user->GetBoolean(kAcknowledgedKey, &acknowledged)); | 237 EXPECT_TRUE(managed_user->GetBoolean(kAcknowledgedKey, &acknowledged)); |
| 224 EXPECT_TRUE(acknowledged); | 238 EXPECT_TRUE(acknowledged); |
| 239 std::string avatar; |
| 240 EXPECT_TRUE(managed_user->GetString(kChromeAvatarKey, &avatar)); |
| 241 EXPECT_EQ(kAvatar3, avatar); |
| 225 } | 242 } |
| 226 { | 243 { |
| 227 const DictionaryValue* managed_user = NULL; | 244 const DictionaryValue* managed_user = NULL; |
| 228 ASSERT_TRUE(managed_users->GetDictionary(kUserId4, &managed_user)); | 245 ASSERT_TRUE(managed_users->GetDictionary(kUserId4, &managed_user)); |
| 229 ASSERT_TRUE(managed_user); | 246 ASSERT_TRUE(managed_user); |
| 230 std::string name; | 247 std::string name; |
| 231 EXPECT_TRUE(managed_user->GetString(kNameKey, &name)); | 248 EXPECT_TRUE(managed_user->GetString(kNameKey, &name)); |
| 232 EXPECT_EQ(kName4, name); | 249 EXPECT_EQ(kName4, name); |
| 233 bool acknowledged = false; | 250 bool acknowledged = false; |
| 234 EXPECT_TRUE(managed_user->GetBoolean(kAcknowledgedKey, &acknowledged)); | 251 EXPECT_TRUE(managed_user->GetBoolean(kAcknowledgedKey, &acknowledged)); |
| 235 EXPECT_TRUE(acknowledged); | 252 EXPECT_TRUE(acknowledged); |
| 253 std::string avatar; |
| 254 EXPECT_TRUE(managed_user->GetString(kChromeAvatarKey, &avatar)); |
| 255 EXPECT_EQ(kAvatar4, avatar); |
| 236 } | 256 } |
| 237 | 257 |
| 238 EXPECT_EQ(1u, change_processor()->changes().size()); | 258 EXPECT_EQ(1u, change_processor()->changes().size()); |
| 239 { | 259 { |
| 240 SyncChange change = change_processor()->GetChange(kUserId1); | 260 SyncChange change = change_processor()->GetChange(kUserId1); |
| 241 ASSERT_TRUE(change.IsValid()); | 261 ASSERT_TRUE(change.IsValid()); |
| 242 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); | 262 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type()); |
| 243 const ManagedUserSpecifics& managed_user = | 263 const ManagedUserSpecifics& managed_user = |
| 244 change.sync_data().GetSpecifics().managed_user(); | 264 change.sync_data().GetSpecifics().managed_user(); |
| 245 EXPECT_EQ(kName1, managed_user.name()); | 265 EXPECT_EQ(kName1, managed_user.name()); |
| 246 EXPECT_FALSE(managed_user.acknowledged()); | 266 EXPECT_FALSE(managed_user.acknowledged()); |
| 267 EXPECT_EQ(kAvatar1, managed_user.chrome_avatar()); |
| 247 } | 268 } |
| 248 } | 269 } |
| OLD | NEW |