OLD | NEW |
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 // Syncer unit tests. Unfortunately a lot of these tests | 5 // Syncer unit tests. Unfortunately a lot of these tests |
6 // are outdated and need to be reworked and updated. | 6 // are outdated and need to be reworked and updated. |
7 | 7 |
8 #include <algorithm> | 8 #include <algorithm> |
9 #include <limits> | 9 #include <limits> |
10 #include <list> | 10 #include <list> |
(...skipping 1432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1443 grandchild.Put(syncable::IS_UNSYNCED, true); | 1443 grandchild.Put(syncable::IS_UNSYNCED, true); |
1444 grandchild.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); | 1444 grandchild.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); |
1445 grandchild.Put(syncable::BASE_VERSION, 1); | 1445 grandchild.Put(syncable::BASE_VERSION, 1); |
1446 } | 1446 } |
1447 { | 1447 { |
1448 // Create three deleted items which deletions we expect to be sent to the | 1448 // Create three deleted items which deletions we expect to be sent to the |
1449 // server. | 1449 // server. |
1450 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), | 1450 MutableEntry parent(&wtrans, syncable::CREATE, wtrans.root_id(), |
1451 "Pete"); | 1451 "Pete"); |
1452 ASSERT_TRUE(parent.good()); | 1452 ASSERT_TRUE(parent.good()); |
| 1453 parent.Put(syncable::ID, ids_.FromNumber(103)); |
1453 parent.Put(syncable::IS_UNSYNCED, true); | 1454 parent.Put(syncable::IS_UNSYNCED, true); |
1454 parent.Put(syncable::IS_DIR, true); | 1455 parent.Put(syncable::IS_DIR, true); |
1455 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); | 1456 parent.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); |
1456 parent.Put(syncable::IS_DEL, true); | 1457 parent.Put(syncable::IS_DEL, true); |
1457 parent.Put(syncable::ID, ids_.FromNumber(103)); | |
1458 parent.Put(syncable::BASE_VERSION, 1); | 1458 parent.Put(syncable::BASE_VERSION, 1); |
1459 parent.Put(syncable::MTIME, now_minus_2h); | 1459 parent.Put(syncable::MTIME, now_minus_2h); |
1460 MutableEntry child(&wtrans, syncable::CREATE, ids_.FromNumber(103), | 1460 MutableEntry child(&wtrans, syncable::CREATE, ids_.FromNumber(103), |
1461 "Pete"); | 1461 "Pete"); |
1462 ASSERT_TRUE(child.good()); | 1462 ASSERT_TRUE(child.good()); |
| 1463 child.Put(syncable::ID, ids_.FromNumber(104)); |
1463 child.Put(syncable::IS_UNSYNCED, true); | 1464 child.Put(syncable::IS_UNSYNCED, true); |
1464 child.Put(syncable::IS_DIR, true); | 1465 child.Put(syncable::IS_DIR, true); |
1465 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); | 1466 child.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); |
1466 child.Put(syncable::IS_DEL, true); | 1467 child.Put(syncable::IS_DEL, true); |
1467 child.Put(syncable::ID, ids_.FromNumber(104)); | |
1468 child.Put(syncable::BASE_VERSION, 1); | 1468 child.Put(syncable::BASE_VERSION, 1); |
1469 child.Put(syncable::MTIME, now_minus_2h); | 1469 child.Put(syncable::MTIME, now_minus_2h); |
1470 MutableEntry grandchild(&wtrans, syncable::CREATE, ids_.FromNumber(104), | 1470 MutableEntry grandchild(&wtrans, syncable::CREATE, ids_.FromNumber(104), |
1471 "Pete"); | 1471 "Pete"); |
1472 ASSERT_TRUE(grandchild.good()); | 1472 ASSERT_TRUE(grandchild.good()); |
| 1473 grandchild.Put(syncable::ID, ids_.FromNumber(105)); |
1473 grandchild.Put(syncable::IS_UNSYNCED, true); | 1474 grandchild.Put(syncable::IS_UNSYNCED, true); |
1474 grandchild.Put(syncable::ID, ids_.FromNumber(105)); | |
1475 grandchild.Put(syncable::IS_DEL, true); | 1475 grandchild.Put(syncable::IS_DEL, true); |
1476 grandchild.Put(syncable::IS_DIR, false); | 1476 grandchild.Put(syncable::IS_DIR, false); |
1477 grandchild.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); | 1477 grandchild.Put(syncable::SPECIFICS, DefaultBookmarkSpecifics()); |
1478 grandchild.Put(syncable::BASE_VERSION, 1); | 1478 grandchild.Put(syncable::BASE_VERSION, 1); |
1479 grandchild.Put(syncable::MTIME, now_minus_2h); | 1479 grandchild.Put(syncable::MTIME, now_minus_2h); |
1480 } | 1480 } |
1481 } | 1481 } |
1482 | 1482 |
1483 SyncShareNudge(); | 1483 SyncShareNudge(); |
1484 EXPECT_EQ(6u, session_->status_controller().unsynced_handles().size()); | 1484 EXPECT_EQ(6u, session_->status_controller().unsynced_handles().size()); |
(...skipping 2217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3702 EXPECT_EQ("clientperm", perm_folder.Get(UNIQUE_CLIENT_TAG)); | 3702 EXPECT_EQ("clientperm", perm_folder.Get(UNIQUE_CLIENT_TAG)); |
3703 EXPECT_EQ("clientname", perm_folder.Get(NON_UNIQUE_NAME)); | 3703 EXPECT_EQ("clientname", perm_folder.Get(NON_UNIQUE_NAME)); |
3704 EXPECT_EQ(local_bookmark.SerializeAsString(), | 3704 EXPECT_EQ(local_bookmark.SerializeAsString(), |
3705 perm_folder.Get(SPECIFICS).SerializeAsString()); | 3705 perm_folder.Get(SPECIFICS).SerializeAsString()); |
3706 EXPECT_TRUE(perm_folder.Get(ID).ServerKnows()); | 3706 EXPECT_TRUE(perm_folder.Get(ID).ServerKnows()); |
3707 } | 3707 } |
3708 } | 3708 } |
3709 | 3709 |
3710 TEST_F(SyncerTest, ClientTagConflictWithDeletedLocalEntry) { | 3710 TEST_F(SyncerTest, ClientTagConflictWithDeletedLocalEntry) { |
3711 { | 3711 { |
| 3712 // Create a deleted local entry with a unique client tag. |
3712 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); | 3713 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); |
3713 MutableEntry perm_folder(&trans, CREATE, ids_.root(), "clientname"); | 3714 MutableEntry perm_folder(&trans, CREATE, ids_.root(), "clientname"); |
3714 ASSERT_TRUE(perm_folder.good()); | 3715 ASSERT_TRUE(perm_folder.good()); |
3715 ASSERT_FALSE(perm_folder.Get(ID).ServerKnows()); | 3716 ASSERT_FALSE(perm_folder.Get(ID).ServerKnows()); |
3716 perm_folder.Put(UNIQUE_CLIENT_TAG, "clientperm"); | 3717 perm_folder.Put(UNIQUE_CLIENT_TAG, "clientperm"); |
3717 perm_folder.Put(SPECIFICS, DefaultBookmarkSpecifics()); | 3718 perm_folder.Put(SPECIFICS, DefaultBookmarkSpecifics()); |
3718 perm_folder.Put(IS_UNSYNCED, true); | 3719 perm_folder.Put(IS_UNSYNCED, true); |
| 3720 |
| 3721 // Note: IS_DEL && !ServerKnows() will clear the UNSYNCED bit. |
| 3722 // (We never attempt to commit server-unknown deleted items, so this |
| 3723 // helps us clean up those entries). |
3719 perm_folder.Put(IS_DEL, true); | 3724 perm_folder.Put(IS_DEL, true); |
3720 } | 3725 } |
3721 | 3726 |
| 3727 // Prepare an update with the same unique client tag. |
3722 mock_server_->AddUpdateDirectory(1, 0, "permitem_renamed", 10, 100); | 3728 mock_server_->AddUpdateDirectory(1, 0, "permitem_renamed", 10, 100); |
3723 mock_server_->SetLastUpdateClientTag("clientperm"); | 3729 mock_server_->SetLastUpdateClientTag("clientperm"); |
3724 mock_server_->set_conflict_all_commits(true); | |
3725 | 3730 |
3726 SyncShareNudge(); | 3731 SyncShareNudge(); |
3727 // This should cause client tag overwrite. | 3732 // The local entry will be overwritten. |
3728 { | 3733 { |
3729 ReadTransaction trans(FROM_HERE, directory()); | 3734 ReadTransaction trans(FROM_HERE, directory()); |
3730 | 3735 |
3731 Entry perm_folder(&trans, GET_BY_CLIENT_TAG, "clientperm"); | 3736 Entry perm_folder(&trans, GET_BY_CLIENT_TAG, "clientperm"); |
3732 ASSERT_TRUE(perm_folder.good()); | 3737 ASSERT_TRUE(perm_folder.good()); |
3733 ASSERT_TRUE(perm_folder.Get(ID).ServerKnows()); | 3738 ASSERT_TRUE(perm_folder.Get(ID).ServerKnows()); |
3734 EXPECT_TRUE(perm_folder.Get(IS_DEL)); | 3739 EXPECT_FALSE(perm_folder.Get(IS_DEL)); |
3735 EXPECT_FALSE(perm_folder.Get(IS_UNAPPLIED_UPDATE)); | 3740 EXPECT_FALSE(perm_folder.Get(IS_UNAPPLIED_UPDATE)); |
3736 EXPECT_TRUE(perm_folder.Get(IS_UNSYNCED)); | 3741 EXPECT_FALSE(perm_folder.Get(IS_UNSYNCED)); |
3737 EXPECT_EQ(perm_folder.Get(BASE_VERSION), 10); | 3742 EXPECT_EQ(perm_folder.Get(BASE_VERSION), 10); |
3738 EXPECT_EQ(perm_folder.Get(UNIQUE_CLIENT_TAG), "clientperm"); | 3743 EXPECT_EQ(perm_folder.Get(UNIQUE_CLIENT_TAG), "clientperm"); |
3739 } | 3744 } |
3740 } | 3745 } |
3741 | 3746 |
3742 TEST_F(SyncerTest, ClientTagUpdateClashesWithLocalEntry) { | 3747 TEST_F(SyncerTest, ClientTagUpdateClashesWithLocalEntry) { |
3743 // This test is written assuming that ID comparison | 3748 // This test is written assuming that ID comparison |
3744 // will work out in a particular way. | 3749 // will work out in a particular way. |
3745 EXPECT_TRUE(ids_.FromNumber(1) < ids_.FromNumber(2)); | 3750 EXPECT_TRUE(ids_.FromNumber(1) < ids_.FromNumber(2)); |
3746 EXPECT_TRUE(ids_.FromNumber(3) < ids_.FromNumber(4)); | 3751 EXPECT_TRUE(ids_.FromNumber(3) < ids_.FromNumber(4)); |
(...skipping 1012 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4759 | 4764 |
4760 TEST_F(SyncerPositionTiebreakingTest, MidLowHigh) { | 4765 TEST_F(SyncerPositionTiebreakingTest, MidLowHigh) { |
4761 Add(mid_id_); | 4766 Add(mid_id_); |
4762 Add(low_id_); | 4767 Add(low_id_); |
4763 Add(high_id_); | 4768 Add(high_id_); |
4764 SyncShareNudge(); | 4769 SyncShareNudge(); |
4765 ExpectLocalOrderIsByServerId(); | 4770 ExpectLocalOrderIsByServerId(); |
4766 } | 4771 } |
4767 | 4772 |
4768 } // namespace browser_sync | 4773 } // namespace browser_sync |
OLD | NEW |