| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/sync/syncable/directory_unittest.h" | 5 #include "components/sync/syncable/directory_unittest.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <cstdlib> | 9 #include <cstdlib> |
| 10 | 10 |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 void SyncableDirectoryTest::ValidateEntry(BaseTransaction* trans, | 217 void SyncableDirectoryTest::ValidateEntry(BaseTransaction* trans, |
| 218 int64_t id, | 218 int64_t id, |
| 219 bool check_name, | 219 bool check_name, |
| 220 const std::string& name, | 220 const std::string& name, |
| 221 int64_t base_version, | 221 int64_t base_version, |
| 222 int64_t server_version, | 222 int64_t server_version, |
| 223 bool is_del) { | 223 bool is_del) { |
| 224 Entry e(trans, GET_BY_ID, TestIdFactory::FromNumber(id)); | 224 Entry e(trans, GET_BY_ID, TestIdFactory::FromNumber(id)); |
| 225 ASSERT_TRUE(e.good()); | 225 ASSERT_TRUE(e.good()); |
| 226 if (check_name) | 226 if (check_name) |
| 227 ASSERT_TRUE(name == e.GetNonUniqueName()); | 227 ASSERT_EQ(name, e.GetNonUniqueName()); |
| 228 ASSERT_TRUE(base_version == e.GetBaseVersion()); | 228 ASSERT_EQ(base_version, e.GetBaseVersion()); |
| 229 ASSERT_TRUE(server_version == e.GetServerVersion()); | 229 ASSERT_EQ(server_version, e.GetServerVersion()); |
| 230 ASSERT_TRUE(is_del == e.GetIsDel()); | 230 ASSERT_EQ(is_del, e.GetIsDel()); |
| 231 } | 231 } |
| 232 | 232 |
| 233 TEST_F(SyncableDirectoryTest, TakeSnapshotGetsMetahandlesToPurge) { | 233 TEST_F(SyncableDirectoryTest, TakeSnapshotGetsMetahandlesToPurge) { |
| 234 const int metas_to_create = 50; | 234 const int metas_to_create = 50; |
| 235 MetahandleSet expected_purges; | 235 MetahandleSet expected_purges; |
| 236 MetahandleSet all_handles; | 236 MetahandleSet all_handles; |
| 237 { | 237 { |
| 238 dir()->SetDownloadProgress(BOOKMARKS, BuildProgress(BOOKMARKS)); | 238 dir()->SetDownloadProgress(BOOKMARKS, BuildProgress(BOOKMARKS)); |
| 239 dir()->SetDownloadProgress(PREFERENCES, BuildProgress(PREFERENCES)); | 239 dir()->SetDownloadProgress(PREFERENCES, BuildProgress(PREFERENCES)); |
| 240 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 240 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 254 e.PutServerSpecifics(specs); | 254 e.PutServerSpecifics(specs); |
| 255 } | 255 } |
| 256 } | 256 } |
| 257 | 257 |
| 258 ModelTypeSet to_purge(BOOKMARKS); | 258 ModelTypeSet to_purge(BOOKMARKS); |
| 259 dir()->PurgeEntriesWithTypeIn(to_purge, ModelTypeSet(), ModelTypeSet()); | 259 dir()->PurgeEntriesWithTypeIn(to_purge, ModelTypeSet(), ModelTypeSet()); |
| 260 | 260 |
| 261 Directory::SaveChangesSnapshot snapshot1; | 261 Directory::SaveChangesSnapshot snapshot1; |
| 262 base::AutoLock scoped_lock(dir()->kernel()->save_changes_mutex); | 262 base::AutoLock scoped_lock(dir()->kernel()->save_changes_mutex); |
| 263 dir()->TakeSnapshotForSaveChanges(&snapshot1); | 263 dir()->TakeSnapshotForSaveChanges(&snapshot1); |
| 264 EXPECT_TRUE(expected_purges == snapshot1.metahandles_to_purge); | 264 EXPECT_EQ(expected_purges, snapshot1.metahandles_to_purge); |
| 265 | 265 |
| 266 to_purge.Clear(); | 266 to_purge.Clear(); |
| 267 to_purge.Put(PREFERENCES); | 267 to_purge.Put(PREFERENCES); |
| 268 dir()->PurgeEntriesWithTypeIn(to_purge, ModelTypeSet(), ModelTypeSet()); | 268 dir()->PurgeEntriesWithTypeIn(to_purge, ModelTypeSet(), ModelTypeSet()); |
| 269 | 269 |
| 270 dir()->HandleSaveChangesFailure(snapshot1); | 270 dir()->HandleSaveChangesFailure(snapshot1); |
| 271 | 271 |
| 272 Directory::SaveChangesSnapshot snapshot2; | 272 Directory::SaveChangesSnapshot snapshot2; |
| 273 dir()->TakeSnapshotForSaveChanges(&snapshot2); | 273 dir()->TakeSnapshotForSaveChanges(&snapshot2); |
| 274 EXPECT_TRUE(all_handles == snapshot2.metahandles_to_purge); | 274 EXPECT_EQ(all_handles, snapshot2.metahandles_to_purge); |
| 275 } | 275 } |
| 276 | 276 |
| 277 TEST_F(SyncableDirectoryTest, TakeSnapshotGetsAllDirtyHandlesTest) { | 277 TEST_F(SyncableDirectoryTest, TakeSnapshotGetsAllDirtyHandlesTest) { |
| 278 const int metahandles_to_create = 100; | 278 const int metahandles_to_create = 100; |
| 279 std::vector<int64_t> expected_dirty_metahandles; | 279 std::vector<int64_t> expected_dirty_metahandles; |
| 280 { | 280 { |
| 281 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 281 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| 282 for (int i = 0; i < metahandles_to_create; i++) { | 282 for (int i = 0; i < metahandles_to_create; i++) { |
| 283 MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo"); | 283 MutableEntry e(&trans, CREATE, BOOKMARKS, trans.root_id(), "foo"); |
| 284 expected_dirty_metahandles.push_back(e.GetMetahandle()); | 284 expected_dirty_metahandles.push_back(e.GetMetahandle()); |
| (...skipping 435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 720 | 720 |
| 721 MutableEntry e3(&trans, GET_BY_HANDLE, handle1); | 721 MutableEntry e3(&trans, GET_BY_HANDLE, handle1); |
| 722 ASSERT_TRUE(e3.good()); | 722 ASSERT_TRUE(e3.good()); |
| 723 e3.PutIsUnsynced(true); | 723 e3.PutIsUnsynced(true); |
| 724 } | 724 } |
| 725 dir()->SaveChanges(); | 725 dir()->SaveChanges(); |
| 726 { | 726 { |
| 727 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 727 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| 728 dir()->GetUnsyncedMetaHandles(&trans, &handles); | 728 dir()->GetUnsyncedMetaHandles(&trans, &handles); |
| 729 ASSERT_EQ(1u, handles.size()); | 729 ASSERT_EQ(1u, handles.size()); |
| 730 ASSERT_TRUE(handle1 == handles[0]); | 730 ASSERT_EQ(handle1, handles[0]); |
| 731 | 731 |
| 732 MutableEntry e4(&trans, GET_BY_HANDLE, handle2); | 732 MutableEntry e4(&trans, GET_BY_HANDLE, handle2); |
| 733 ASSERT_TRUE(e4.good()); | 733 ASSERT_TRUE(e4.good()); |
| 734 e4.PutIsUnsynced(true); | 734 e4.PutIsUnsynced(true); |
| 735 } | 735 } |
| 736 dir()->SaveChanges(); | 736 dir()->SaveChanges(); |
| 737 { | 737 { |
| 738 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 738 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| 739 dir()->GetUnsyncedMetaHandles(&trans, &handles); | 739 dir()->GetUnsyncedMetaHandles(&trans, &handles); |
| 740 ASSERT_EQ(2u, handles.size()); | 740 ASSERT_EQ(2u, handles.size()); |
| 741 if (handle1 == handles[0]) { | 741 if (handle1 == handles[0]) { |
| 742 ASSERT_TRUE(handle2 == handles[1]); | 742 ASSERT_EQ(handle2, handles[1]); |
| 743 } else { | 743 } else { |
| 744 ASSERT_TRUE(handle2 == handles[0]); | 744 ASSERT_EQ(handle2, handles[0]); |
| 745 ASSERT_TRUE(handle1 == handles[1]); | 745 ASSERT_EQ(handle1, handles[1]); |
| 746 } | 746 } |
| 747 | 747 |
| 748 MutableEntry e5(&trans, GET_BY_HANDLE, handle1); | 748 MutableEntry e5(&trans, GET_BY_HANDLE, handle1); |
| 749 ASSERT_TRUE(e5.good()); | 749 ASSERT_TRUE(e5.good()); |
| 750 ASSERT_TRUE(e5.GetIsUnsynced()); | 750 ASSERT_TRUE(e5.GetIsUnsynced()); |
| 751 ASSERT_TRUE(e5.PutIsUnsynced(false)); | 751 ASSERT_TRUE(e5.PutIsUnsynced(false)); |
| 752 ASSERT_FALSE(e5.GetIsUnsynced()); | 752 ASSERT_FALSE(e5.GetIsUnsynced()); |
| 753 } | 753 } |
| 754 dir()->SaveChanges(); | 754 dir()->SaveChanges(); |
| 755 { | 755 { |
| 756 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 756 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| 757 dir()->GetUnsyncedMetaHandles(&trans, &handles); | 757 dir()->GetUnsyncedMetaHandles(&trans, &handles); |
| 758 ASSERT_EQ(1u, handles.size()); | 758 ASSERT_EQ(1u, handles.size()); |
| 759 ASSERT_TRUE(handle2 == handles[0]); | 759 ASSERT_EQ(handle2, handles[0]); |
| 760 } | 760 } |
| 761 } | 761 } |
| 762 | 762 |
| 763 TEST_F(SyncableDirectoryTest, TestGetUnappliedUpdates) { | 763 TEST_F(SyncableDirectoryTest, TestGetUnappliedUpdates) { |
| 764 std::vector<int64_t> handles; | 764 std::vector<int64_t> handles; |
| 765 int64_t handle1, handle2; | 765 int64_t handle1, handle2; |
| 766 const FullModelTypeSet all_types = FullModelTypeSet::All(); | 766 const FullModelTypeSet all_types = FullModelTypeSet::All(); |
| 767 { | 767 { |
| 768 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 768 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| 769 | 769 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 794 | 794 |
| 795 MutableEntry e3(&trans, GET_BY_HANDLE, handle1); | 795 MutableEntry e3(&trans, GET_BY_HANDLE, handle1); |
| 796 ASSERT_TRUE(e3.good()); | 796 ASSERT_TRUE(e3.good()); |
| 797 e3.PutIsUnappliedUpdate(true); | 797 e3.PutIsUnappliedUpdate(true); |
| 798 } | 798 } |
| 799 dir()->SaveChanges(); | 799 dir()->SaveChanges(); |
| 800 { | 800 { |
| 801 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 801 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| 802 dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles); | 802 dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles); |
| 803 ASSERT_EQ(1u, handles.size()); | 803 ASSERT_EQ(1u, handles.size()); |
| 804 ASSERT_TRUE(handle1 == handles[0]); | 804 ASSERT_EQ(handle1, handles[0]); |
| 805 | 805 |
| 806 MutableEntry e4(&trans, GET_BY_HANDLE, handle2); | 806 MutableEntry e4(&trans, GET_BY_HANDLE, handle2); |
| 807 ASSERT_TRUE(e4.good()); | 807 ASSERT_TRUE(e4.good()); |
| 808 e4.PutIsUnappliedUpdate(true); | 808 e4.PutIsUnappliedUpdate(true); |
| 809 } | 809 } |
| 810 dir()->SaveChanges(); | 810 dir()->SaveChanges(); |
| 811 { | 811 { |
| 812 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 812 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| 813 dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles); | 813 dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles); |
| 814 ASSERT_EQ(2u, handles.size()); | 814 ASSERT_EQ(2u, handles.size()); |
| 815 if (handle1 == handles[0]) { | 815 if (handle1 == handles[0]) { |
| 816 ASSERT_TRUE(handle2 == handles[1]); | 816 ASSERT_EQ(handle2, handles[1]); |
| 817 } else { | 817 } else { |
| 818 ASSERT_TRUE(handle2 == handles[0]); | 818 ASSERT_EQ(handle2, handles[0]); |
| 819 ASSERT_TRUE(handle1 == handles[1]); | 819 ASSERT_EQ(handle1, handles[1]); |
| 820 } | 820 } |
| 821 | 821 |
| 822 MutableEntry e5(&trans, GET_BY_HANDLE, handle1); | 822 MutableEntry e5(&trans, GET_BY_HANDLE, handle1); |
| 823 ASSERT_TRUE(e5.good()); | 823 ASSERT_TRUE(e5.good()); |
| 824 e5.PutIsUnappliedUpdate(false); | 824 e5.PutIsUnappliedUpdate(false); |
| 825 } | 825 } |
| 826 dir()->SaveChanges(); | 826 dir()->SaveChanges(); |
| 827 { | 827 { |
| 828 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 828 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
| 829 dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles); | 829 dir()->GetUnappliedUpdateMetaHandles(&trans, all_types, &handles); |
| 830 ASSERT_EQ(1u, handles.size()); | 830 ASSERT_EQ(1u, handles.size()); |
| 831 ASSERT_TRUE(handle2 == handles[0]); | 831 ASSERT_EQ(handle2, handles[0]); |
| 832 } | 832 } |
| 833 } | 833 } |
| 834 | 834 |
| 835 TEST_F(SyncableDirectoryTest, DeleteBug_531383) { | 835 TEST_F(SyncableDirectoryTest, DeleteBug_531383) { |
| 836 // Try to evoke a check failure... | 836 // Try to evoke a check failure... |
| 837 TestIdFactory id_factory; | 837 TestIdFactory id_factory; |
| 838 int64_t grandchild_handle; | 838 int64_t grandchild_handle; |
| 839 { | 839 { |
| 840 WriteTransaction wtrans(FROM_HERE, UNITTEST, dir().get()); | 840 WriteTransaction wtrans(FROM_HERE, UNITTEST, dir().get()); |
| 841 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, id_factory.root(), "Bob"); | 841 MutableEntry parent(&wtrans, CREATE, BOOKMARKS, id_factory.root(), "Bob"); |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 945 | 945 |
| 946 // Make sure we can find the entry in the folder. | 946 // Make sure we can find the entry in the folder. |
| 947 { | 947 { |
| 948 ReadTransaction trans(FROM_HERE, dir().get()); | 948 ReadTransaction trans(FROM_HERE, dir().get()); |
| 949 EXPECT_EQ(0, CountEntriesWithName(&trans, trans.root_id(), entry_name)); | 949 EXPECT_EQ(0, CountEntriesWithName(&trans, trans.root_id(), entry_name)); |
| 950 EXPECT_EQ(1, CountEntriesWithName(&trans, folder_id, entry_name)); | 950 EXPECT_EQ(1, CountEntriesWithName(&trans, folder_id, entry_name)); |
| 951 | 951 |
| 952 Entry entry(&trans, GET_BY_ID, entry_id); | 952 Entry entry(&trans, GET_BY_ID, entry_id); |
| 953 ASSERT_TRUE(entry.good()); | 953 ASSERT_TRUE(entry.good()); |
| 954 EXPECT_EQ(entry_handle, entry.GetMetahandle()); | 954 EXPECT_EQ(entry_handle, entry.GetMetahandle()); |
| 955 EXPECT_TRUE(entry.GetNonUniqueName() == entry_name); | 955 EXPECT_EQ(entry_name, entry.GetNonUniqueName()); |
| 956 EXPECT_TRUE(entry.GetParentId() == folder_id); | 956 EXPECT_EQ(folder_id, entry.GetParentId()); |
| 957 } | 957 } |
| 958 } | 958 } |
| 959 | 959 |
| 960 TEST_F(SyncableDirectoryTest, TestParentIdIndexUpdate) { | 960 TEST_F(SyncableDirectoryTest, TestParentIdIndexUpdate) { |
| 961 std::string child_name = "child"; | 961 std::string child_name = "child"; |
| 962 | 962 |
| 963 WriteTransaction wt(FROM_HERE, UNITTEST, dir().get()); | 963 WriteTransaction wt(FROM_HERE, UNITTEST, dir().get()); |
| 964 MutableEntry parent_folder(&wt, CREATE, BOOKMARKS, wt.root_id(), "folder1"); | 964 MutableEntry parent_folder(&wt, CREATE, BOOKMARKS, wt.root_id(), "folder1"); |
| 965 parent_folder.PutIsUnsynced(true); | 965 parent_folder.PutIsUnsynced(true); |
| 966 parent_folder.PutIsDir(true); | 966 parent_folder.PutIsDir(true); |
| (...skipping 1171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2138 | 2138 |
| 2139 const base::DictionaryValue* first_result; | 2139 const base::DictionaryValue* first_result; |
| 2140 ASSERT_TRUE(nodes->GetDictionary(0, &first_result)); | 2140 ASSERT_TRUE(nodes->GetDictionary(0, &first_result)); |
| 2141 EXPECT_TRUE(first_result->HasKey("ID")); | 2141 EXPECT_TRUE(first_result->HasKey("ID")); |
| 2142 EXPECT_TRUE(first_result->HasKey("NON_UNIQUE_NAME")); | 2142 EXPECT_TRUE(first_result->HasKey("NON_UNIQUE_NAME")); |
| 2143 } | 2143 } |
| 2144 | 2144 |
| 2145 } // namespace syncable | 2145 } // namespace syncable |
| 2146 | 2146 |
| 2147 } // namespace syncer | 2147 } // namespace syncer |
| OLD | NEW |