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

Side by Side Diff: chrome/browser/sync/profile_sync_service_bookmark_unittest.cc

Issue 18132003: [Sync] Trigger unapply + getupdates for persistence errors (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix formatting Created 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/sync/glue/sync_backend_host.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // TODO(akalin): This file is basically just a unit test for 5 // TODO(akalin): This file is basically just a unit test for
6 // BookmarkChangeProcessor. Write unit tests for 6 // BookmarkChangeProcessor. Write unit tests for
7 // BookmarkModelAssociator separately. 7 // BookmarkModelAssociator separately.
8 8
9 #include <map> 9 #include <map>
10 #include <queue> 10 #include <queue>
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 node.SetIsFolder(true); 420 node.SetIsFolder(true);
421 node.GetMutableEntryForTest()->Put( 421 node.GetMutableEntryForTest()->Put(
422 syncer::syncable::UNIQUE_SERVER_TAG, permanent_tags[i]); 422 syncer::syncable::UNIQUE_SERVER_TAG, permanent_tags[i]);
423 node.SetTitle(UTF8ToWide(permanent_tags[i])); 423 node.SetTitle(UTF8ToWide(permanent_tags[i]));
424 node.SetExternalId(0); 424 node.SetExternalId(0);
425 last_child_id = node.GetId(); 425 last_child_id = node.GetId();
426 } 426 }
427 return true; 427 return true;
428 } 428 }
429 429
430 void StartSync() { 430 bool AssociateModels() {
431 test_user_share_.Reload(); 431 DCHECK(!model_associator_);
432
433 ASSERT_TRUE(CreatePermanentBookmarkNodes());
434 432
435 // Set up model associator. 433 // Set up model associator.
436 model_associator_.reset(new BookmarkModelAssociator( 434 model_associator_.reset(new BookmarkModelAssociator(
437 BookmarkModelFactory::GetForProfile(&profile_), 435 BookmarkModelFactory::GetForProfile(&profile_),
438 &profile_, 436 &profile_,
439 test_user_share_.user_share(), 437 test_user_share_.user_share(),
440 &mock_error_handler_, 438 &mock_error_handler_,
441 kExpectMobileBookmarks)); 439 kExpectMobileBookmarks));
442 440
443 local_merge_result_ = syncer::SyncMergeResult(syncer::BOOKMARKS); 441 local_merge_result_ = syncer::SyncMergeResult(syncer::BOOKMARKS);
444 syncer_merge_result_ = syncer::SyncMergeResult(syncer::BOOKMARKS); 442 syncer_merge_result_ = syncer::SyncMergeResult(syncer::BOOKMARKS);
445 int local_count_before = model_->root_node()->GetTotalNodeCount(); 443 int local_count_before = model_->root_node()->GetTotalNodeCount();
446 int syncer_count_before = GetSyncBookmarkCount(); 444 int syncer_count_before = GetSyncBookmarkCount();
447 445
448 syncer::SyncError error = model_associator_->AssociateModels( 446 syncer::SyncError error = model_associator_->AssociateModels(
449 &local_merge_result_, 447 &local_merge_result_,
450 &syncer_merge_result_); 448 &syncer_merge_result_);
451 EXPECT_FALSE(error.IsSet()); 449 if (error.IsSet())
450 return false;
451
452 base::MessageLoop::current()->RunUntilIdle();
452 453
453 // Verify the merge results were calculated properly. 454 // Verify the merge results were calculated properly.
454 EXPECT_EQ(local_count_before, 455 EXPECT_EQ(local_count_before,
455 local_merge_result_.num_items_before_association()); 456 local_merge_result_.num_items_before_association());
456 EXPECT_EQ(syncer_count_before, 457 EXPECT_EQ(syncer_count_before,
457 syncer_merge_result_.num_items_before_association()); 458 syncer_merge_result_.num_items_before_association());
458 EXPECT_EQ(local_merge_result_.num_items_after_association(), 459 EXPECT_EQ(local_merge_result_.num_items_after_association(),
459 local_merge_result_.num_items_before_association() + 460 local_merge_result_.num_items_before_association() +
460 local_merge_result_.num_items_added() - 461 local_merge_result_.num_items_added() -
461 local_merge_result_.num_items_deleted()); 462 local_merge_result_.num_items_deleted());
462 EXPECT_EQ(syncer_merge_result_.num_items_after_association(), 463 EXPECT_EQ(syncer_merge_result_.num_items_after_association(),
463 syncer_merge_result_.num_items_before_association() + 464 syncer_merge_result_.num_items_before_association() +
464 syncer_merge_result_.num_items_added() - 465 syncer_merge_result_.num_items_added() -
465 syncer_merge_result_.num_items_deleted()); 466 syncer_merge_result_.num_items_deleted());
466 EXPECT_EQ(model_->root_node()->GetTotalNodeCount(), 467 EXPECT_EQ(model_->root_node()->GetTotalNodeCount(),
467 local_merge_result_.num_items_after_association()); 468 local_merge_result_.num_items_after_association());
468 EXPECT_EQ(GetSyncBookmarkCount(), 469 EXPECT_EQ(GetSyncBookmarkCount(),
469 syncer_merge_result_.num_items_after_association()); 470 syncer_merge_result_.num_items_after_association());
471 return true;
472 }
470 473
471 base::MessageLoop::current()->RunUntilIdle(); 474 void StartSync() {
475 test_user_share_.Reload();
476
477 ASSERT_TRUE(CreatePermanentBookmarkNodes());
478 ASSERT_TRUE(AssociateModels());
472 479
473 // Set up change processor. 480 // Set up change processor.
474 change_processor_.reset( 481 change_processor_.reset(
475 new BookmarkChangeProcessor(model_associator_.get(), 482 new BookmarkChangeProcessor(model_associator_.get(),
476 &mock_error_handler_)); 483 &mock_error_handler_));
477 change_processor_->Start(&profile_, test_user_share_.user_share()); 484 change_processor_->Start(&profile_, test_user_share_.user_share());
478 } 485 }
479 486
480 void StopSync() { 487 void StopSync() {
481 change_processor_.reset(); 488 change_processor_.reset();
(...skipping 1255 matching lines...) Expand 10 before | Expand all | Expand 10 after
1737 StartSync(); 1744 StartSync();
1738 1745
1739 WriteTestDataToBookmarkModel(); 1746 WriteTestDataToBookmarkModel();
1740 1747
1741 StopSync(); 1748 StopSync();
1742 1749
1743 // Nuke the sync DB and reload. 1750 // Nuke the sync DB and reload.
1744 TearDown(); 1751 TearDown();
1745 SetUp(); 1752 SetUp();
1746 1753
1747 StartSync(); 1754 // First attempt fails due to a persistence error.
1755 EXPECT_TRUE(CreatePermanentBookmarkNodes());
1756 EXPECT_FALSE(AssociateModels());
1757
1758 // Second attempt succeeds due to the previous error resetting the native
1759 // transaction version.
1760 model_associator_.reset();
1761 EXPECT_TRUE(CreatePermanentBookmarkNodes());
1762 EXPECT_TRUE(AssociateModels());
1748 1763
1749 // Make sure we're back in sync. In real life, the user would need 1764 // Make sure we're back in sync. In real life, the user would need
1750 // to reauthenticate before this happens, but in the test, authentication 1765 // to reauthenticate before this happens, but in the test, authentication
1751 // is sidestepped. 1766 // is sidestepped.
1752 ExpectBookmarkModelMatchesTestData(); 1767 ExpectBookmarkModelMatchesTestData();
1753 ExpectModelMatch(); 1768 ExpectModelMatch();
1754 } 1769 }
1755 1770
1756 // Verify that the bookmark model is updated about whether the 1771 // Verify that the bookmark model is updated about whether the
1757 // associator is currently running. 1772 // associator is currently running.
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1911 EXPECT_EQ(initial_versions[model_->root_node()->id()] + 2, 1926 EXPECT_EQ(initial_versions[model_->root_node()->id()] + 2,
1912 new_versions[model_->root_node()->id()]); 1927 new_versions[model_->root_node()->id()]);
1913 EXPECT_LT(initial_versions[changed_bookmark->id()], 1928 EXPECT_LT(initial_versions[changed_bookmark->id()],
1914 new_versions[changed_bookmark->id()]); 1929 new_versions[changed_bookmark->id()]);
1915 initial_versions.erase(changed_bookmark->id()); 1930 initial_versions.erase(changed_bookmark->id());
1916 ExpectTransactionVersionMatch(model_->bookmark_bar_node(), initial_versions); 1931 ExpectTransactionVersionMatch(model_->bookmark_bar_node(), initial_versions);
1917 ExpectTransactionVersionMatch(model_->other_node(), initial_versions); 1932 ExpectTransactionVersionMatch(model_->other_node(), initial_versions);
1918 ExpectTransactionVersionMatch(model_->mobile_node(), initial_versions); 1933 ExpectTransactionVersionMatch(model_->mobile_node(), initial_versions);
1919 } 1934 }
1920 1935
1936 // Test that sync persistence errors are detected and trigger a failed
1937 // association.
1938 TEST_F(ProfileSyncServiceBookmarkTestWithData, PersistenceError) {
1939 LoadBookmarkModel(DELETE_EXISTING_STORAGE, DONT_SAVE_TO_STORAGE);
1940 StartSync();
1941 WriteTestDataToBookmarkModel();
1942 base::MessageLoop::current()->RunUntilIdle();
1943
1944 BookmarkNodeVersionMap initial_versions;
1945
1946 // Verify transaction versions in sync model and bookmark model (saved as
1947 // transaction version of root node) are equal after
1948 // WriteTestDataToBookmarkModel() created bookmarks.
1949 {
1950 syncer::ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
1951 EXPECT_GT(trans.GetModelVersion(syncer::BOOKMARKS), 0);
1952 GetTransactionVersions(model_->root_node(), &initial_versions);
1953 EXPECT_EQ(trans.GetModelVersion(syncer::BOOKMARKS),
1954 initial_versions[model_->root_node()->id()]);
1955 }
1956 ExpectTransactionVersionMatch(model_->bookmark_bar_node(),
1957 BookmarkNodeVersionMap());
1958 ExpectTransactionVersionMatch(model_->other_node(),
1959 BookmarkNodeVersionMap());
1960 ExpectTransactionVersionMatch(model_->mobile_node(),
1961 BookmarkNodeVersionMap());
1962
1963 // Now shut down sync and artificially increment the native model's version.
1964 StopSync();
1965 int64 root_version = initial_versions[model_->root_node()->id()];
1966 model_->SetNodeMetaInfo(model_->root_node(), kBookmarkTransactionVersionKey,
1967 base::Int64ToString(root_version+1));
1968
1969 // Upon association, bookmarks should fail to associate.
1970 EXPECT_FALSE(AssociateModels());
1971 }
1972
1921 } // namespace 1973 } // namespace
1922 1974
1923 } // namespace browser_sync 1975 } // namespace browser_sync
OLDNEW
« no previous file with comments | « chrome/browser/sync/glue/sync_backend_host.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698