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

Side by Side Diff: chrome/browser/extensions/settings/settings_sync_unittest.cc

Issue 8670012: Extension Settings API: move the API functions into an object SettingsNamepace, (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "testing/gtest/include/gtest/gtest.h" 5 #include "testing/gtest/include/gtest/gtest.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/json/json_reader.h" 8 #include "base/json/json_reader.h"
9 #include "base/json/json_writer.h" 9 #include "base/json/json_writer.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 // SettingsStorageFactory implementation. 155 // SettingsStorageFactory implementation.
156 virtual SettingsStorage* Create( 156 virtual SettingsStorage* Create(
157 const FilePath& base_path, const std::string& extension_id) OVERRIDE { 157 const FilePath& base_path, const std::string& extension_id) OVERRIDE {
158 TestingSettingsStorage* new_storage = new TestingSettingsStorage(); 158 TestingSettingsStorage* new_storage = new TestingSettingsStorage();
159 DCHECK(!created_.count(extension_id)); 159 DCHECK(!created_.count(extension_id));
160 created_[extension_id] = new_storage; 160 created_[extension_id] = new_storage;
161 return new_storage; 161 return new_storage;
162 } 162 }
163 163
164 private: 164 private:
165 // SettingsStorageFactory is refcounted.
166 virtual ~TestingSettingsStorageFactory() {}
167
165 // None of these storage areas are owned by this factory, so care must be 168 // None of these storage areas are owned by this factory, so care must be
166 // taken when calling GetExisting. 169 // taken when calling GetExisting.
167 std::map<std::string, TestingSettingsStorage*> created_; 170 std::map<std::string, TestingSettingsStorage*> created_;
168 }; 171 };
169 172
170 void AssignSettingsService(SyncableService** dst, SyncableService* src) { 173 void AssignSettingsService(SyncableService** dst, SyncableService* src) {
171 *dst = src; 174 *dst = src;
172 } 175 }
173 176
174 } // namespace 177 } // namespace
175 178
176 class ExtensionSettingsSyncTest : public testing::Test { 179 class ExtensionSettingsSyncTest : public testing::Test {
177 public: 180 public:
178 ExtensionSettingsSyncTest() 181 ExtensionSettingsSyncTest()
179 : ui_thread_(BrowserThread::UI, MessageLoop::current()), 182 : ui_thread_(BrowserThread::UI, MessageLoop::current()),
180 file_thread_(BrowserThread::FILE, MessageLoop::current()) {} 183 file_thread_(BrowserThread::FILE, MessageLoop::current()),
184 storage_factory_(new ScopedSettingsStorageFactory()) {}
181 185
182 virtual void SetUp() OVERRIDE { 186 virtual void SetUp() OVERRIDE {
183 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 187 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
184 profile_.reset(new MockProfile(temp_dir_.path())); 188 profile_.reset(new MockProfile(temp_dir_.path()));
185 storage_factory_ = 189 storage_factory_->Reset(new SettingsLeveldbStorage::Factory());
186 new ScopedSettingsStorageFactory(new SettingsLeveldbStorage::Factory()); 190 frontend_.reset(
187 frontend_.reset(SettingsFrontend::Create(storage_factory_, profile_.get())); 191 SettingsFrontend::Create(storage_factory_.get(), profile_.get()));
188 } 192 }
189 193
190 virtual void TearDown() OVERRIDE { 194 virtual void TearDown() OVERRIDE {
191 frontend_.reset(); 195 frontend_.reset();
192 profile_.reset(); 196 profile_.reset();
193 } 197 }
194 198
195 protected: 199 protected:
196 // Adds a record of an extension or app to the extension service, then returns 200 // Adds a record of an extension or app to the extension service, then returns
197 // its storage area. 201 // its storage area.
(...skipping 29 matching lines...) Expand all
227 231
228 // Need these so that the DCHECKs for running on FILE or UI threads pass. 232 // Need these so that the DCHECKs for running on FILE or UI threads pass.
229 MessageLoop message_loop_; 233 MessageLoop message_loop_;
230 content::TestBrowserThread ui_thread_; 234 content::TestBrowserThread ui_thread_;
231 content::TestBrowserThread file_thread_; 235 content::TestBrowserThread file_thread_;
232 236
233 ScopedTempDir temp_dir_; 237 ScopedTempDir temp_dir_;
234 MockSyncChangeProcessor sync_; 238 MockSyncChangeProcessor sync_;
235 scoped_ptr<MockProfile> profile_; 239 scoped_ptr<MockProfile> profile_;
236 scoped_ptr<SettingsFrontend> frontend_; 240 scoped_ptr<SettingsFrontend> frontend_;
237 241 scoped_refptr<ScopedSettingsStorageFactory> storage_factory_;
238 // Owned by |frontend_|.
239 ScopedSettingsStorageFactory* storage_factory_;
240 }; 242 };
241 243
242 // Get a semblance of coverage for both EXTENSION_SETTINGS and APP_SETTINGS 244 // Get a semblance of coverage for both EXTENSION_SETTINGS and APP_SETTINGS
243 // sync by roughly alternative which one to test. 245 // sync by roughly alternative which one to test.
244 246
245 TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) { 247 TEST_F(ExtensionSettingsSyncTest, NoDataDoesNotInvokeSync) {
246 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; 248 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS;
247 Extension::Type type = Extension::TYPE_EXTENSION; 249 Extension::Type type = Extension::TYPE_EXTENSION;
248 250
249 ASSERT_EQ(0u, GetAllSyncData(model_type).size()); 251 EXPECT_EQ(0u, GetAllSyncData(model_type).size());
250 252
251 // Have one extension created before sync is set up, the other created after. 253 // Have one extension created before sync is set up, the other created after.
252 AddExtensionAndGetStorage("s1", type); 254 AddExtensionAndGetStorage("s1", type);
253 ASSERT_EQ(0u, GetAllSyncData(model_type).size()); 255 EXPECT_EQ(0u, GetAllSyncData(model_type).size());
254 256
255 GetSyncableService(model_type)->MergeDataAndStartSyncing( 257 GetSyncableService(model_type)->MergeDataAndStartSyncing(
256 model_type, SyncDataList(), &sync_); 258 model_type, SyncDataList(), &sync_);
257 259
258 AddExtensionAndGetStorage("s2", type); 260 AddExtensionAndGetStorage("s2", type);
259 ASSERT_EQ(0u, GetAllSyncData(model_type).size()); 261 EXPECT_EQ(0u, GetAllSyncData(model_type).size());
260 262
261 GetSyncableService(model_type)->StopSyncing(model_type); 263 GetSyncableService(model_type)->StopSyncing(model_type);
262 264
263 ASSERT_EQ(0u, sync_.changes().size()); 265 EXPECT_EQ(0u, sync_.changes().size());
264 ASSERT_EQ(0u, GetAllSyncData(model_type).size()); 266 EXPECT_EQ(0u, GetAllSyncData(model_type).size());
265 } 267 }
266 268
267 TEST_F(ExtensionSettingsSyncTest, InSyncDataDoesNotInvokeSync) { 269 TEST_F(ExtensionSettingsSyncTest, InSyncDataDoesNotInvokeSync) {
268 syncable::ModelType model_type = syncable::APP_SETTINGS; 270 syncable::ModelType model_type = syncable::APP_SETTINGS;
269 Extension::Type type = Extension::TYPE_PACKAGED_APP; 271 Extension::Type type = Extension::TYPE_PACKAGED_APP;
270 272
271 StringValue value1("fooValue"); 273 StringValue value1("fooValue");
272 ListValue value2; 274 ListValue value2;
273 value2.Append(StringValue::CreateStringValue("barValue")); 275 value2.Append(StringValue::CreateStringValue("barValue"));
274 276
275 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); 277 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type);
276 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); 278 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type);
277 279
278 storage1->Set(DEFAULTS, "foo", value1); 280 storage1->Set(DEFAULTS, "foo", value1);
279 storage2->Set(DEFAULTS, "bar", value2); 281 storage2->Set(DEFAULTS, "bar", value2);
280 282
281 std::map<std::string, SettingSyncDataList> all_sync_data = 283 std::map<std::string, SettingSyncDataList> all_sync_data =
282 GetAllSyncData(model_type); 284 GetAllSyncData(model_type);
283 ASSERT_EQ(2u, all_sync_data.size()); 285 EXPECT_EQ(2u, all_sync_data.size());
284 ASSERT_EQ(1u, all_sync_data["s1"].size()); 286 EXPECT_EQ(1u, all_sync_data["s1"].size());
285 ASSERT_PRED_FORMAT2(ValuesEq, &value1, &all_sync_data["s1"][0].value()); 287 EXPECT_PRED_FORMAT2(ValuesEq, &value1, &all_sync_data["s1"][0].value());
286 ASSERT_EQ(1u, all_sync_data["s2"].size()); 288 EXPECT_EQ(1u, all_sync_data["s2"].size());
287 ASSERT_PRED_FORMAT2(ValuesEq, &value2, &all_sync_data["s2"][0].value()); 289 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &all_sync_data["s2"][0].value());
288 290
289 SyncDataList sync_data; 291 SyncDataList sync_data;
290 sync_data.push_back(settings_sync_util::CreateData( 292 sync_data.push_back(settings_sync_util::CreateData(
291 "s1", "foo", value1)); 293 "s1", "foo", value1));
292 sync_data.push_back(settings_sync_util::CreateData( 294 sync_data.push_back(settings_sync_util::CreateData(
293 "s2", "bar", value2)); 295 "s2", "bar", value2));
294 296
295 GetSyncableService(model_type)->MergeDataAndStartSyncing( 297 GetSyncableService(model_type)->MergeDataAndStartSyncing(
296 model_type, sync_data, &sync_); 298 model_type, sync_data, &sync_);
297 299
298 // Already in sync, so no changes. 300 // Already in sync, so no changes.
299 ASSERT_EQ(0u, sync_.changes().size()); 301 EXPECT_EQ(0u, sync_.changes().size());
300 302
301 // Regression test: not-changing the synced value shouldn't result in a sync 303 // Regression test: not-changing the synced value shouldn't result in a sync
302 // change, and changing the synced value should result in an update. 304 // change, and changing the synced value should result in an update.
303 storage1->Set(DEFAULTS, "foo", value1); 305 storage1->Set(DEFAULTS, "foo", value1);
304 ASSERT_EQ(0u, sync_.changes().size()); 306 EXPECT_EQ(0u, sync_.changes().size());
305 307
306 storage1->Set(DEFAULTS, "foo", value2); 308 storage1->Set(DEFAULTS, "foo", value2);
307 ASSERT_EQ(1u, sync_.changes().size()); 309 EXPECT_EQ(1u, sync_.changes().size());
308 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); 310 SettingSyncData change = sync_.GetOnlyChange("s1", "foo");
309 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); 311 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type());
310 ASSERT_TRUE(value2.Equals(&change.value())); 312 EXPECT_TRUE(value2.Equals(&change.value()));
311 313
312 GetSyncableService(model_type)->StopSyncing(model_type); 314 GetSyncableService(model_type)->StopSyncing(model_type);
313 } 315 }
314 316
315 TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) { 317 TEST_F(ExtensionSettingsSyncTest, LocalDataWithNoSyncDataIsPushedToSync) {
316 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; 318 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS;
317 Extension::Type type = Extension::TYPE_EXTENSION; 319 Extension::Type type = Extension::TYPE_EXTENSION;
318 320
319 StringValue value1("fooValue"); 321 StringValue value1("fooValue");
320 ListValue value2; 322 ListValue value2;
321 value2.Append(StringValue::CreateStringValue("barValue")); 323 value2.Append(StringValue::CreateStringValue("barValue"));
322 324
323 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type); 325 SettingsStorage* storage1 = AddExtensionAndGetStorage("s1", type);
324 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); 326 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type);
325 327
326 storage1->Set(DEFAULTS, "foo", value1); 328 storage1->Set(DEFAULTS, "foo", value1);
327 storage2->Set(DEFAULTS, "bar", value2); 329 storage2->Set(DEFAULTS, "bar", value2);
328 330
329 GetSyncableService(model_type)->MergeDataAndStartSyncing( 331 GetSyncableService(model_type)->MergeDataAndStartSyncing(
330 model_type, SyncDataList(), &sync_); 332 model_type, SyncDataList(), &sync_);
331 333
332 // All settings should have been pushed to sync. 334 // All settings should have been pushed to sync.
333 ASSERT_EQ(2u, sync_.changes().size()); 335 EXPECT_EQ(2u, sync_.changes().size());
334 SettingSyncData change = sync_.GetOnlyChange("s1", "foo"); 336 SettingSyncData change = sync_.GetOnlyChange("s1", "foo");
335 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); 337 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type());
336 ASSERT_TRUE(value1.Equals(&change.value())); 338 EXPECT_TRUE(value1.Equals(&change.value()));
337 change = sync_.GetOnlyChange("s2", "bar"); 339 change = sync_.GetOnlyChange("s2", "bar");
338 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); 340 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type());
339 ASSERT_TRUE(value2.Equals(&change.value())); 341 EXPECT_TRUE(value2.Equals(&change.value()));
340 342
341 GetSyncableService(model_type)->StopSyncing(model_type); 343 GetSyncableService(model_type)->StopSyncing(model_type);
342 } 344 }
343 345
344 TEST_F(ExtensionSettingsSyncTest, AnySyncDataOverwritesLocalData) { 346 TEST_F(ExtensionSettingsSyncTest, AnySyncDataOverwritesLocalData) {
345 syncable::ModelType model_type = syncable::APP_SETTINGS; 347 syncable::ModelType model_type = syncable::APP_SETTINGS;
346 Extension::Type type = Extension::TYPE_PACKAGED_APP; 348 Extension::Type type = Extension::TYPE_PACKAGED_APP;
347 349
348 StringValue value1("fooValue"); 350 StringValue value1("fooValue");
349 ListValue value2; 351 ListValue value2;
(...skipping 13 matching lines...) Expand all
363 sync_data.push_back(settings_sync_util::CreateData( 365 sync_data.push_back(settings_sync_util::CreateData(
364 "s2", "bar", value2)); 366 "s2", "bar", value2));
365 GetSyncableService(model_type)->MergeDataAndStartSyncing( 367 GetSyncableService(model_type)->MergeDataAndStartSyncing(
366 model_type, sync_data, &sync_); 368 model_type, sync_data, &sync_);
367 expected1.Set("foo", value1.DeepCopy()); 369 expected1.Set("foo", value1.DeepCopy());
368 expected2.Set("bar", value2.DeepCopy()); 370 expected2.Set("bar", value2.DeepCopy());
369 371
370 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type); 372 SettingsStorage* storage2 = AddExtensionAndGetStorage("s2", type);
371 373
372 // All changes should be local, so no sync changes. 374 // All changes should be local, so no sync changes.
373 ASSERT_EQ(0u, sync_.changes().size()); 375 EXPECT_EQ(0u, sync_.changes().size());
374 376
375 // Sync settings should have been pushed to local settings. 377 // Sync settings should have been pushed to local settings.
376 ASSERT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); 378 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get());
377 ASSERT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); 379 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get());
378 380
379 GetSyncableService(model_type)->StopSyncing(model_type); 381 GetSyncableService(model_type)->StopSyncing(model_type);
380 } 382 }
381 383
382 TEST_F(ExtensionSettingsSyncTest, ProcessSyncChanges) { 384 TEST_F(ExtensionSettingsSyncTest, ProcessSyncChanges) {
383 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; 385 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS;
384 Extension::Type type = Extension::TYPE_EXTENSION; 386 Extension::Type type = Extension::TYPE_EXTENSION;
385 387
386 StringValue value1("fooValue"); 388 StringValue value1("fooValue");
387 ListValue value2; 389 ListValue value2;
(...skipping 21 matching lines...) Expand all
409 // Make sync add some settings. 411 // Make sync add some settings.
410 SyncChangeList change_list; 412 SyncChangeList change_list;
411 change_list.push_back(settings_sync_util::CreateAdd( 413 change_list.push_back(settings_sync_util::CreateAdd(
412 "s1", "bar", value2)); 414 "s1", "bar", value2));
413 change_list.push_back(settings_sync_util::CreateAdd( 415 change_list.push_back(settings_sync_util::CreateAdd(
414 "s2", "foo", value1)); 416 "s2", "foo", value1));
415 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 417 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
416 expected1.Set("bar", value2.DeepCopy()); 418 expected1.Set("bar", value2.DeepCopy());
417 expected2.Set("foo", value1.DeepCopy()); 419 expected2.Set("foo", value1.DeepCopy());
418 420
419 ASSERT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); 421 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get());
420 ASSERT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); 422 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get());
421 423
422 // Make sync update some settings, storage1 the new setting, storage2 the 424 // Make sync update some settings, storage1 the new setting, storage2 the
423 // initial setting. 425 // initial setting.
424 change_list.clear(); 426 change_list.clear();
425 change_list.push_back(settings_sync_util::CreateUpdate( 427 change_list.push_back(settings_sync_util::CreateUpdate(
426 "s1", "bar", value2)); 428 "s1", "bar", value2));
427 change_list.push_back(settings_sync_util::CreateUpdate( 429 change_list.push_back(settings_sync_util::CreateUpdate(
428 "s2", "bar", value1)); 430 "s2", "bar", value1));
429 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 431 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
430 expected1.Set("bar", value2.DeepCopy()); 432 expected1.Set("bar", value2.DeepCopy());
431 expected2.Set("bar", value1.DeepCopy()); 433 expected2.Set("bar", value1.DeepCopy());
432 434
433 ASSERT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); 435 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get());
434 ASSERT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); 436 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get());
435 437
436 // Make sync remove some settings, storage1 the initial setting, storage2 the 438 // Make sync remove some settings, storage1 the initial setting, storage2 the
437 // new setting. 439 // new setting.
438 change_list.clear(); 440 change_list.clear();
439 change_list.push_back(settings_sync_util::CreateDelete( 441 change_list.push_back(settings_sync_util::CreateDelete(
440 "s1", "foo")); 442 "s1", "foo"));
441 change_list.push_back(settings_sync_util::CreateDelete( 443 change_list.push_back(settings_sync_util::CreateDelete(
442 "s2", "foo")); 444 "s2", "foo"));
443 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list); 445 GetSyncableService(model_type)->ProcessSyncChanges(FROM_HERE, change_list);
444 expected1.Remove("foo", NULL); 446 expected1.Remove("foo", NULL);
445 expected2.Remove("foo", NULL); 447 expected2.Remove("foo", NULL);
446 448
447 ASSERT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get()); 449 EXPECT_PRED_FORMAT2(SettingsEq, expected1, storage1->Get());
448 ASSERT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get()); 450 EXPECT_PRED_FORMAT2(SettingsEq, expected2, storage2->Get());
449 451
450 GetSyncableService(model_type)->StopSyncing(model_type); 452 GetSyncableService(model_type)->StopSyncing(model_type);
451 } 453 }
452 454
453 TEST_F(ExtensionSettingsSyncTest, PushToSync) { 455 TEST_F(ExtensionSettingsSyncTest, PushToSync) {
454 syncable::ModelType model_type = syncable::APP_SETTINGS; 456 syncable::ModelType model_type = syncable::APP_SETTINGS;
455 Extension::Type type = Extension::TYPE_PACKAGED_APP; 457 Extension::Type type = Extension::TYPE_PACKAGED_APP;
456 458
457 StringValue value1("fooValue"); 459 StringValue value1("fooValue");
458 ListValue value2; 460 ListValue value2;
(...skipping 18 matching lines...) Expand all
477 GetSyncableService(model_type)->MergeDataAndStartSyncing( 479 GetSyncableService(model_type)->MergeDataAndStartSyncing(
478 model_type, sync_data, &sync_); 480 model_type, sync_data, &sync_);
479 481
480 // Add something locally. 482 // Add something locally.
481 storage1->Set(DEFAULTS, "bar", value2); 483 storage1->Set(DEFAULTS, "bar", value2);
482 storage2->Set(DEFAULTS, "bar", value2); 484 storage2->Set(DEFAULTS, "bar", value2);
483 storage3->Set(DEFAULTS, "foo", value1); 485 storage3->Set(DEFAULTS, "foo", value1);
484 storage4->Set(DEFAULTS, "foo", value1); 486 storage4->Set(DEFAULTS, "foo", value1);
485 487
486 SettingSyncData change = sync_.GetOnlyChange("s1", "bar"); 488 SettingSyncData change = sync_.GetOnlyChange("s1", "bar");
487 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); 489 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type());
488 ASSERT_TRUE(value2.Equals(&change.value())); 490 EXPECT_TRUE(value2.Equals(&change.value()));
489 sync_.GetOnlyChange("s2", "bar"); 491 sync_.GetOnlyChange("s2", "bar");
490 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); 492 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type());
491 ASSERT_TRUE(value2.Equals(&change.value())); 493 EXPECT_TRUE(value2.Equals(&change.value()));
492 change = sync_.GetOnlyChange("s3", "foo"); 494 change = sync_.GetOnlyChange("s3", "foo");
493 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); 495 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type());
494 ASSERT_TRUE(value1.Equals(&change.value())); 496 EXPECT_TRUE(value1.Equals(&change.value()));
495 change = sync_.GetOnlyChange("s4", "foo"); 497 change = sync_.GetOnlyChange("s4", "foo");
496 ASSERT_EQ(SyncChange::ACTION_ADD, change.change_type()); 498 EXPECT_EQ(SyncChange::ACTION_ADD, change.change_type());
497 ASSERT_TRUE(value1.Equals(&change.value())); 499 EXPECT_TRUE(value1.Equals(&change.value()));
498 500
499 // Change something locally, storage1/3 the new setting and storage2/4 the 501 // Change something locally, storage1/3 the new setting and storage2/4 the
500 // initial setting, for all combinations of local vs sync intialisation and 502 // initial setting, for all combinations of local vs sync intialisation and
501 // new vs initial. 503 // new vs initial.
502 sync_.ClearChanges(); 504 sync_.ClearChanges();
503 storage1->Set(DEFAULTS, "bar", value1); 505 storage1->Set(DEFAULTS, "bar", value1);
504 storage2->Set(DEFAULTS, "foo", value2); 506 storage2->Set(DEFAULTS, "foo", value2);
505 storage3->Set(DEFAULTS, "bar", value1); 507 storage3->Set(DEFAULTS, "bar", value1);
506 storage4->Set(DEFAULTS, "foo", value2); 508 storage4->Set(DEFAULTS, "foo", value2);
507 509
508 change = sync_.GetOnlyChange("s1", "bar"); 510 change = sync_.GetOnlyChange("s1", "bar");
509 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); 511 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type());
510 ASSERT_TRUE(value1.Equals(&change.value())); 512 EXPECT_TRUE(value1.Equals(&change.value()));
511 change = sync_.GetOnlyChange("s2", "foo"); 513 change = sync_.GetOnlyChange("s2", "foo");
512 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); 514 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type());
513 ASSERT_TRUE(value2.Equals(&change.value())); 515 EXPECT_TRUE(value2.Equals(&change.value()));
514 change = sync_.GetOnlyChange("s3", "bar"); 516 change = sync_.GetOnlyChange("s3", "bar");
515 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); 517 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type());
516 ASSERT_TRUE(value1.Equals(&change.value())); 518 EXPECT_TRUE(value1.Equals(&change.value()));
517 change = sync_.GetOnlyChange("s4", "foo"); 519 change = sync_.GetOnlyChange("s4", "foo");
518 ASSERT_EQ(SyncChange::ACTION_UPDATE, change.change_type()); 520 EXPECT_EQ(SyncChange::ACTION_UPDATE, change.change_type());
519 ASSERT_TRUE(value2.Equals(&change.value())); 521 EXPECT_TRUE(value2.Equals(&change.value()));
520 522
521 // Remove something locally, storage1/3 the new setting and storage2/4 the 523 // Remove something locally, storage1/3 the new setting and storage2/4 the
522 // initial setting, for all combinations of local vs sync intialisation and 524 // initial setting, for all combinations of local vs sync intialisation and
523 // new vs initial. 525 // new vs initial.
524 sync_.ClearChanges(); 526 sync_.ClearChanges();
525 storage1->Remove("foo"); 527 storage1->Remove("foo");
526 storage2->Remove("bar"); 528 storage2->Remove("bar");
527 storage3->Remove("foo"); 529 storage3->Remove("foo");
528 storage4->Remove("bar"); 530 storage4->Remove("bar");
529 531
530 ASSERT_EQ( 532 EXPECT_EQ(
531 SyncChange::ACTION_DELETE, 533 SyncChange::ACTION_DELETE,
532 sync_.GetOnlyChange("s1", "foo").change_type()); 534 sync_.GetOnlyChange("s1", "foo").change_type());
533 ASSERT_EQ( 535 EXPECT_EQ(
534 SyncChange::ACTION_DELETE, 536 SyncChange::ACTION_DELETE,
535 sync_.GetOnlyChange("s2", "bar").change_type()); 537 sync_.GetOnlyChange("s2", "bar").change_type());
536 ASSERT_EQ( 538 EXPECT_EQ(
537 SyncChange::ACTION_DELETE, 539 SyncChange::ACTION_DELETE,
538 sync_.GetOnlyChange("s3", "foo").change_type()); 540 sync_.GetOnlyChange("s3", "foo").change_type());
539 ASSERT_EQ( 541 EXPECT_EQ(
540 SyncChange::ACTION_DELETE, 542 SyncChange::ACTION_DELETE,
541 sync_.GetOnlyChange("s4", "bar").change_type()); 543 sync_.GetOnlyChange("s4", "bar").change_type());
542 544
543 // Remove some nonexistent settings. 545 // Remove some nonexistent settings.
544 sync_.ClearChanges(); 546 sync_.ClearChanges();
545 storage1->Remove("foo"); 547 storage1->Remove("foo");
546 storage2->Remove("bar"); 548 storage2->Remove("bar");
547 storage3->Remove("foo"); 549 storage3->Remove("foo");
548 storage4->Remove("bar"); 550 storage4->Remove("bar");
549 551
550 ASSERT_EQ(0u, sync_.changes().size()); 552 EXPECT_EQ(0u, sync_.changes().size());
551 553
552 // Clear the rest of the settings. Add the removed ones back first so that 554 // Clear the rest of the settings. Add the removed ones back first so that
553 // more than one setting is cleared. 555 // more than one setting is cleared.
554 storage1->Set(DEFAULTS, "foo", value1); 556 storage1->Set(DEFAULTS, "foo", value1);
555 storage2->Set(DEFAULTS, "bar", value2); 557 storage2->Set(DEFAULTS, "bar", value2);
556 storage3->Set(DEFAULTS, "foo", value1); 558 storage3->Set(DEFAULTS, "foo", value1);
557 storage4->Set(DEFAULTS, "bar", value2); 559 storage4->Set(DEFAULTS, "bar", value2);
558 560
559 sync_.ClearChanges(); 561 sync_.ClearChanges();
560 storage1->Clear(); 562 storage1->Clear();
561 storage2->Clear(); 563 storage2->Clear();
562 storage3->Clear(); 564 storage3->Clear();
563 storage4->Clear(); 565 storage4->Clear();
564 566
565 ASSERT_EQ( 567 EXPECT_EQ(
566 SyncChange::ACTION_DELETE, 568 SyncChange::ACTION_DELETE,
567 sync_.GetOnlyChange("s1", "foo").change_type()); 569 sync_.GetOnlyChange("s1", "foo").change_type());
568 ASSERT_EQ( 570 EXPECT_EQ(
569 SyncChange::ACTION_DELETE, 571 SyncChange::ACTION_DELETE,
570 sync_.GetOnlyChange("s1", "bar").change_type()); 572 sync_.GetOnlyChange("s1", "bar").change_type());
571 ASSERT_EQ( 573 EXPECT_EQ(
572 SyncChange::ACTION_DELETE, 574 SyncChange::ACTION_DELETE,
573 sync_.GetOnlyChange("s2", "foo").change_type()); 575 sync_.GetOnlyChange("s2", "foo").change_type());
574 ASSERT_EQ( 576 EXPECT_EQ(
575 SyncChange::ACTION_DELETE, 577 SyncChange::ACTION_DELETE,
576 sync_.GetOnlyChange("s2", "bar").change_type()); 578 sync_.GetOnlyChange("s2", "bar").change_type());
577 ASSERT_EQ( 579 EXPECT_EQ(
578 SyncChange::ACTION_DELETE, 580 SyncChange::ACTION_DELETE,
579 sync_.GetOnlyChange("s3", "foo").change_type()); 581 sync_.GetOnlyChange("s3", "foo").change_type());
580 ASSERT_EQ( 582 EXPECT_EQ(
581 SyncChange::ACTION_DELETE, 583 SyncChange::ACTION_DELETE,
582 sync_.GetOnlyChange("s3", "bar").change_type()); 584 sync_.GetOnlyChange("s3", "bar").change_type());
583 ASSERT_EQ( 585 EXPECT_EQ(
584 SyncChange::ACTION_DELETE, 586 SyncChange::ACTION_DELETE,
585 sync_.GetOnlyChange("s4", "foo").change_type()); 587 sync_.GetOnlyChange("s4", "foo").change_type());
586 ASSERT_EQ( 588 EXPECT_EQ(
587 SyncChange::ACTION_DELETE, 589 SyncChange::ACTION_DELETE,
588 sync_.GetOnlyChange("s4", "bar").change_type()); 590 sync_.GetOnlyChange("s4", "bar").change_type());
589 591
590 GetSyncableService(model_type)->StopSyncing(model_type); 592 GetSyncableService(model_type)->StopSyncing(model_type);
591 } 593 }
592 594
593 TEST_F(ExtensionSettingsSyncTest, ExtensionAndAppSettingsSyncSeparately) { 595 TEST_F(ExtensionSettingsSyncTest, ExtensionAndAppSettingsSyncSeparately) {
594 StringValue value1("fooValue"); 596 StringValue value1("fooValue");
595 ListValue value2; 597 ListValue value2;
596 value2.Append(StringValue::CreateStringValue("barValue")); 598 value2.Append(StringValue::CreateStringValue("barValue"));
597 599
598 // storage1 is an extension, storage2 is an app. 600 // storage1 is an extension, storage2 is an app.
599 SettingsStorage* storage1 = AddExtensionAndGetStorage( 601 SettingsStorage* storage1 = AddExtensionAndGetStorage(
600 "s1", Extension::TYPE_EXTENSION); 602 "s1", Extension::TYPE_EXTENSION);
601 SettingsStorage* storage2 = AddExtensionAndGetStorage( 603 SettingsStorage* storage2 = AddExtensionAndGetStorage(
602 "s2", Extension::TYPE_PACKAGED_APP); 604 "s2", Extension::TYPE_PACKAGED_APP);
603 605
604 storage1->Set(DEFAULTS, "foo", value1); 606 storage1->Set(DEFAULTS, "foo", value1);
605 storage2->Set(DEFAULTS, "bar", value2); 607 storage2->Set(DEFAULTS, "bar", value2);
606 608
607 std::map<std::string, SettingSyncDataList> extension_sync_data = 609 std::map<std::string, SettingSyncDataList> extension_sync_data =
608 GetAllSyncData(syncable::EXTENSION_SETTINGS); 610 GetAllSyncData(syncable::EXTENSION_SETTINGS);
609 ASSERT_EQ(1u, extension_sync_data.size()); 611 EXPECT_EQ(1u, extension_sync_data.size());
610 ASSERT_EQ(1u, extension_sync_data["s1"].size()); 612 EXPECT_EQ(1u, extension_sync_data["s1"].size());
611 ASSERT_PRED_FORMAT2(ValuesEq, &value1, &extension_sync_data["s1"][0].value()); 613 EXPECT_PRED_FORMAT2(ValuesEq, &value1, &extension_sync_data["s1"][0].value());
612 614
613 std::map<std::string, SettingSyncDataList> app_sync_data = 615 std::map<std::string, SettingSyncDataList> app_sync_data =
614 GetAllSyncData(syncable::APP_SETTINGS); 616 GetAllSyncData(syncable::APP_SETTINGS);
615 ASSERT_EQ(1u, app_sync_data.size()); 617 EXPECT_EQ(1u, app_sync_data.size());
616 ASSERT_EQ(1u, app_sync_data["s2"].size()); 618 EXPECT_EQ(1u, app_sync_data["s2"].size());
617 ASSERT_PRED_FORMAT2(ValuesEq, &value2, &app_sync_data["s2"][0].value()); 619 EXPECT_PRED_FORMAT2(ValuesEq, &value2, &app_sync_data["s2"][0].value());
618 620
619 // Stop each separately, there should be no changes either time. 621 // Stop each separately, there should be no changes either time.
620 SyncDataList sync_data; 622 SyncDataList sync_data;
621 sync_data.push_back(settings_sync_util::CreateData( 623 sync_data.push_back(settings_sync_util::CreateData(
622 "s1", "foo", value1)); 624 "s1", "foo", value1));
623 625
624 GetSyncableService(syncable::EXTENSION_SETTINGS)-> 626 GetSyncableService(syncable::EXTENSION_SETTINGS)->
625 MergeDataAndStartSyncing(syncable::EXTENSION_SETTINGS, sync_data, &sync_); 627 MergeDataAndStartSyncing(syncable::EXTENSION_SETTINGS, sync_data, &sync_);
626 GetSyncableService(syncable::EXTENSION_SETTINGS)-> 628 GetSyncableService(syncable::EXTENSION_SETTINGS)->
627 StopSyncing(syncable::EXTENSION_SETTINGS); 629 StopSyncing(syncable::EXTENSION_SETTINGS);
628 ASSERT_EQ(0u, sync_.changes().size()); 630 EXPECT_EQ(0u, sync_.changes().size());
629 631
630 sync_data.clear(); 632 sync_data.clear();
631 sync_data.push_back(settings_sync_util::CreateData( 633 sync_data.push_back(settings_sync_util::CreateData(
632 "s2", "bar", value2)); 634 "s2", "bar", value2));
633 635
634 GetSyncableService(syncable::APP_SETTINGS)-> 636 GetSyncableService(syncable::APP_SETTINGS)->
635 MergeDataAndStartSyncing(syncable::APP_SETTINGS, sync_data, &sync_); 637 MergeDataAndStartSyncing(syncable::APP_SETTINGS, sync_data, &sync_);
636 GetSyncableService(syncable::APP_SETTINGS)-> 638 GetSyncableService(syncable::APP_SETTINGS)->
637 StopSyncing(syncable::APP_SETTINGS); 639 StopSyncing(syncable::APP_SETTINGS);
638 ASSERT_EQ(0u, sync_.changes().size()); 640 EXPECT_EQ(0u, sync_.changes().size());
639 } 641 }
640 642
641 TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) { 643 TEST_F(ExtensionSettingsSyncTest, FailingStartSyncingDisablesSync) {
642 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS; 644 syncable::ModelType model_type = syncable::EXTENSION_SETTINGS;
643 Extension::Type type = Extension::TYPE_EXTENSION; 645 Extension::Type type = Extension::TYPE_EXTENSION;
644 646
645 StringValue fooValue("fooValue"); 647 StringValue fooValue("fooValue");
646 StringValue barValue("barValue"); 648 StringValue barValue("barValue");
647 649
648 // There is a bit of a convoluted method to get storage areas that can fail; 650 // There is a bit of a convoluted method to get storage areas that can fail;
(...skipping 634 matching lines...) Expand 10 before | Expand all | Expand 10 after
1283 DictionaryValue expected; 1285 DictionaryValue expected;
1284 expected.Set("large_value", large_value.DeepCopy()); 1286 expected.Set("large_value", large_value.DeepCopy());
1285 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get()); 1287 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage1->Get());
1286 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get()); 1288 EXPECT_PRED_FORMAT2(SettingsEq, expected, storage2->Get());
1287 } 1289 }
1288 1290
1289 GetSyncableService(model_type)->StopSyncing(model_type); 1291 GetSyncableService(model_type)->StopSyncing(model_type);
1290 } 1292 }
1291 1293
1292 } // namespace extensions 1294 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698