Chromium Code Reviews| Index: sync/engine/syncer_unittest.cc |
| diff --git a/sync/engine/syncer_unittest.cc b/sync/engine/syncer_unittest.cc |
| index 17e5f0924472a710e7d5e6ff27b2085baeaa52e2..344870a2b6b38786e6b6cb5faa3e2d424b00e9c9 100644 |
| --- a/sync/engine/syncer_unittest.cc |
| +++ b/sync/engine/syncer_unittest.cc |
| @@ -1261,13 +1261,10 @@ TEST_F(SyncerTest, TestPurgeWithJournal) { |
| } |
| TEST_F(SyncerTest, ResetVersions) { |
| - // Download the top level pref node and some pref items. |
| - mock_server_->AddUpdateDirectory( |
| - parent_id_, root_id_, "prefs", 1, 10, std::string(), std::string()); |
| - mock_server_->SetLastUpdateServerTag(ModelTypeToRootTag(PREFERENCES)); |
| - mock_server_->AddUpdatePref("id1", parent_id_.GetServerId(), "tag1", 20, 20); |
| - mock_server_->AddUpdatePref("id2", parent_id_.GetServerId(), "tag2", 30, 30); |
| - mock_server_->AddUpdatePref("id3", parent_id_.GetServerId(), "tag3", 40, 40); |
| + // Download some pref items. |
| + mock_server_->AddUpdatePref("id1", "", "tag1", 20, 20); |
| + mock_server_->AddUpdatePref("id2", "", "tag2", 30, 30); |
| + mock_server_->AddUpdatePref("id3", "", "tag3", 40, 40); |
| SyncShareNudge(); |
| { |
| @@ -1280,7 +1277,7 @@ TEST_F(SyncerTest, ResetVersions) { |
| MutableEntry entry2(&wtrans, GET_BY_CLIENT_TAG, "tag2"); |
| entry2.PutIsUnappliedUpdate(true); |
| - MutableEntry entry4(&wtrans, CREATE, PREFERENCES, parent_id_, "name"); |
| + MutableEntry entry4(&wtrans, CREATE, PREFERENCES, "name"); |
| entry4.PutUniqueClientTag("tag4"); |
| entry4.PutIsUnsynced(true); |
| } |
| @@ -2486,13 +2483,18 @@ TEST_F(SyncerTest, CommitsUpdateDoesntAlterEntry) { |
| } |
| TEST_F(SyncerTest, ParentAndChildBothMatch) { |
| + // Disable PREFERENCES which is enabled at the setup step to avoid |
| + // auto-creating |
| + // PREFERENCES root folder and failing the test below that verifies the number |
| + // of children at the root. |
| + DisableDatatype(PREFERENCES); |
| + |
| const FullModelTypeSet all_types = FullModelTypeSet::All(); |
| syncable::Id parent_id = ids_.NewServerId(); |
| syncable::Id child_id = ids_.NewServerId(); |
| syncable::Id parent_local_id; |
| syncable::Id child_local_id; |
| - |
| { |
| WriteTransaction wtrans(FROM_HERE, UNITTEST, directory()); |
| MutableEntry parent(&wtrans, CREATE, BOOKMARKS, root_id_, "Folder"); |
| @@ -4086,12 +4088,10 @@ TEST_F(SyncerTest, ClientTagUpdateClashesWithLocalEntry) { |
| EXPECT_TRUE(ids_.FromNumber(3) < ids_.FromNumber(4)); |
| syncable::Id id1 = TestIdFactory::MakeServer("1"); |
| - mock_server_->AddUpdatePref(id1.GetServerId(), ids_.root().GetServerId(), |
| - "tag1", 10, 100); |
| + mock_server_->AddUpdatePref(id1.GetServerId(), "", "tag1", 10, 100); |
| syncable::Id id4 = TestIdFactory::MakeServer("4"); |
| - mock_server_->AddUpdatePref(id4.GetServerId(), ids_.root().GetServerId(), |
| - "tag2", 11, 110); |
| + mock_server_->AddUpdatePref(id4.GetServerId(), "", "tag2", 11, 110); |
| mock_server_->set_conflict_all_commits(true); |
| @@ -4124,17 +4124,19 @@ TEST_F(SyncerTest, ClientTagUpdateClashesWithLocalEntry) { |
| EXPECT_EQ("tag2", tag2.GetUniqueClientTag()); |
| tag2_metahandle = tag2.GetMetahandle(); |
| + // Preferences type root should have been created by the updates above. |
| + Entry pref_root(&trans, GET_TYPE_ROOT, PREFERENCES); |
| + ASSERT_TRUE(pref_root.good()); |
| + |
| syncable::Directory::Metahandles children; |
| - directory()->GetChildHandlesById(&trans, trans.root_id(), &children); |
| + directory()->GetChildHandlesById(&trans, pref_root.GetId(), &children); |
| ASSERT_EQ(2U, children.size()); |
| } |
| syncable::Id id2 = TestIdFactory::MakeServer("2"); |
| - mock_server_->AddUpdatePref(id2.GetServerId(), ids_.root().GetServerId(), |
| - "tag1", 12, 120); |
| + mock_server_->AddUpdatePref(id2.GetServerId(), "", "tag1", 12, 120); |
| syncable::Id id3 = TestIdFactory::MakeServer("3"); |
| - mock_server_->AddUpdatePref(id3.GetServerId(), ids_.root().GetServerId(), |
| - "tag2", 13, 130); |
| + mock_server_->AddUpdatePref(id3.GetServerId(), "", "tag2", 13, 130); |
| SyncShareNudge(); |
| { |
| @@ -4164,8 +4166,12 @@ TEST_F(SyncerTest, ClientTagUpdateClashesWithLocalEntry) { |
| EXPECT_EQ("tag2", tag2.GetUniqueClientTag()); |
| EXPECT_EQ(tag2_metahandle, tag2.GetMetahandle()); |
| + // Preferences type root should have been created by the updates above. |
| + Entry pref_root(&trans, GET_TYPE_ROOT, PREFERENCES); |
| + ASSERT_TRUE(pref_root.good()); |
| + |
| syncable::Directory::Metahandles children; |
| - directory()->GetChildHandlesById(&trans, trans.root_id(), &children); |
| + directory()->GetChildHandlesById(&trans, pref_root.GetId(), &children); |
| ASSERT_EQ(2U, children.size()); |
| } |
| } |
| @@ -4177,34 +4183,33 @@ TEST_F(SyncerTest, ClientTagClashWithinBatchOfUpdates) { |
| EXPECT_TRUE(ids_.FromNumber(201) < ids_.FromNumber(205)); |
| // Least ID: winner. |
| - mock_server_->AddUpdatePref(ids_.FromNumber(1).GetServerId(), |
| - ids_.root().GetServerId(), "tag a", 1, 10); |
| - mock_server_->AddUpdatePref(ids_.FromNumber(2).GetServerId(), |
| - ids_.root().GetServerId(), "tag a", 11, 110); |
| - mock_server_->AddUpdatePref(ids_.FromNumber(3).GetServerId(), |
| - ids_.root().GetServerId(), "tag a", 12, 120); |
| - mock_server_->AddUpdatePref(ids_.FromNumber(4).GetServerId(), |
| - ids_.root().GetServerId(), "tag a", 13, 130); |
| - |
| - mock_server_->AddUpdatePref(ids_.FromNumber(105).GetServerId(), |
| - ids_.root().GetServerId(), "tag b", 14, 140); |
| - mock_server_->AddUpdatePref(ids_.FromNumber(102).GetServerId(), |
| - ids_.root().GetServerId(), "tag b", 15, 150); |
| + mock_server_->AddUpdatePref(ids_.FromNumber(1).GetServerId(), "", "tag a", 1, |
| + 10); |
| + mock_server_->AddUpdatePref(ids_.FromNumber(2).GetServerId(), "", "tag a", 11, |
| + 110); |
| + mock_server_->AddUpdatePref(ids_.FromNumber(3).GetServerId(), "", "tag a", 12, |
| + 120); |
| + mock_server_->AddUpdatePref(ids_.FromNumber(4).GetServerId(), "", "tag a", 13, |
| + 130); |
| + mock_server_->AddUpdatePref(ids_.FromNumber(105).GetServerId(), "", "tag b", |
| + 14, 140); |
| + mock_server_->AddUpdatePref(ids_.FromNumber(102).GetServerId(), "", "tag b", |
| + 15, 150); |
| // Least ID: winner. |
| - mock_server_->AddUpdatePref(ids_.FromNumber(101).GetServerId(), |
| - ids_.root().GetServerId(), "tag b", 16, 160); |
| - mock_server_->AddUpdatePref(ids_.FromNumber(104).GetServerId(), |
| - ids_.root().GetServerId(), "tag b", 17, 170); |
| - |
| - mock_server_->AddUpdatePref(ids_.FromNumber(205).GetServerId(), |
| - ids_.root().GetServerId(), "tag c", 18, 180); |
| - mock_server_->AddUpdatePref(ids_.FromNumber(202).GetServerId(), |
| - ids_.root().GetServerId(), "tag c", 19, 190); |
| - mock_server_->AddUpdatePref(ids_.FromNumber(204).GetServerId(), |
| - ids_.root().GetServerId(), "tag c", 20, 200); |
| + mock_server_->AddUpdatePref(ids_.FromNumber(101).GetServerId(), "", "tag b", |
| + 16, 160); |
| + mock_server_->AddUpdatePref(ids_.FromNumber(104).GetServerId(), "", "tag b", |
| + 17, 170); |
| + |
| + mock_server_->AddUpdatePref(ids_.FromNumber(205).GetServerId(), "", "tag c", |
| + 18, 180); |
| + mock_server_->AddUpdatePref(ids_.FromNumber(202).GetServerId(), "", "tag c", |
| + 19, 190); |
| + mock_server_->AddUpdatePref(ids_.FromNumber(204).GetServerId(), "", "tag c", |
| + 20, 200); |
| // Least ID: winner. |
| - mock_server_->AddUpdatePref(ids_.FromNumber(201).GetServerId(), |
| - ids_.root().GetServerId(), "tag c", 21, 210); |
| + mock_server_->AddUpdatePref(ids_.FromNumber(201).GetServerId(), "", "tag c", |
| + 21, 210); |
| mock_server_->set_conflict_all_commits(true); |
| @@ -4243,12 +4248,71 @@ TEST_F(SyncerTest, ClientTagClashWithinBatchOfUpdates) { |
| EXPECT_EQ(21, tag_c.GetBaseVersion()); |
| EXPECT_EQ("tag c", tag_c.GetUniqueClientTag()); |
| + // Preferences type root should have been created by the updates above. |
| + Entry pref_root(&trans, GET_TYPE_ROOT, PREFERENCES); |
| + ASSERT_TRUE(pref_root.good()); |
| + |
| + // Verify that we have exactly 3 tagged nodes under the type root. |
| syncable::Directory::Metahandles children; |
| - directory()->GetChildHandlesById(&trans, trans.root_id(), &children); |
| + directory()->GetChildHandlesById(&trans, pref_root.GetId(), &children); |
| ASSERT_EQ(3U, children.size()); |
| } |
| } |
| +// This verifies transition to implicit permanent folders |
|
Nicolas Zea
2015/01/26 23:21:53
nit: period at end.
stanisc
2015/01/29 00:27:37
Done.
|
| +TEST_F(SyncerTest, EntryWithParentIdUpdatedWithEntryWithoutParentId) { |
| + // Make sure SPECIFICS root exists so that we can get its parent ID. |
| + mock_server_->AddUpdateSpecifics( |
| + 1, 0, "Folder", 10, 10, true, 1, DefaultPreferencesSpecifics()); |
| + mock_server_->SetLastUpdateServerTag(ModelTypeToRootTag(PREFERENCES)); |
| + SyncShareNudge(); |
| + |
| + Id pref_root_id; |
| + { |
| + // Preferences type root should have been created by the update above. |
| + // We need it in order to get its ID. |
| + syncable::ReadTransaction trans(FROM_HERE, directory()); |
| + Entry pref_root(&trans, GET_TYPE_ROOT, PREFERENCES); |
| + ASSERT_TRUE(pref_root.good()); |
| + pref_root_id = pref_root.GetId(); |
| + } |
| + |
| + // Add a preference item with explicit parent ID. |
| + mock_server_->AddUpdatePref( |
| + ids_.FromNumber(2).GetServerId(), ids_.FromNumber(1).GetServerId(), |
| + "tag", 1, 10); |
| + |
| + SyncShareNudge(); |
| + |
| + { |
| + syncable::ReadTransaction trans(FROM_HERE, directory()); |
| + Entry pref_entry(&trans, GET_BY_CLIENT_TAG, "tag"); |
| + ASSERT_TRUE(pref_entry.good()); |
| + ASSERT_EQ(pref_root_id, pref_entry.GetParentId()); |
| + } |
| + |
| + // Make another update where the same item get updated, this time |
| + // with implicit parent ID. |
| + mock_server_->AddUpdatePref( |
| + ids_.FromNumber(2).GetServerId(), "", "tag", 2, 20); |
| + |
| + SyncShareNudge(); |
| + |
| + { |
| + syncable::ReadTransaction trans(FROM_HERE, directory()); |
| + Entry pref_entry(&trans, GET_BY_CLIENT_TAG, "tag"); |
| + ASSERT_TRUE(pref_entry.good()); |
| + ASSERT_TRUE(pref_entry.GetParentId().IsNull()); |
| + |
| + // Verify that there is still one node under the type root. |
| + syncable::Directory::Metahandles children; |
| + directory()->GetChildHandlesById(&trans, pref_root_id, &children); |
| + ASSERT_EQ(1U, children.size()); |
| + } |
| +} |
| + |
| + |
| + |
| TEST_F(SyncerTest, UniqueServerTagUpdates) { |
| // As a hurdle, introduce an item whose name is the same as the tag value |
| // we'll use later. |