| Index: sync/engine/directory_commit_contribution_unittest.cc
|
| diff --git a/sync/engine/directory_commit_contribution_unittest.cc b/sync/engine/directory_commit_contribution_unittest.cc
|
| index c38af195fcd7895952120d9a0d9038bfb8183235..475985c2569ba0055dc5771dca0965ec7d484688 100644
|
| --- a/sync/engine/directory_commit_contribution_unittest.cc
|
| +++ b/sync/engine/directory_commit_contribution_unittest.cc
|
| @@ -25,6 +25,7 @@ class DirectoryCommitContributionTest : public ::testing::Test {
|
| syncable::WriteTransaction trans(FROM_HERE, syncable::UNITTEST, dir());
|
| CreateTypeRoot(&trans, dir(), PREFERENCES);
|
| CreateTypeRoot(&trans, dir(), EXTENSIONS);
|
| + CreateTypeRoot(&trans, dir(), BOOKMARKS);
|
| }
|
|
|
| virtual void TearDown() OVERRIDE {
|
| @@ -49,6 +50,32 @@ class DirectoryCommitContributionTest : public ::testing::Test {
|
| return entry.GetMetahandle();
|
| }
|
|
|
| + int64 CreateSyncedItem(syncable::WriteTransaction* trans,
|
| + ModelType type,
|
| + const std::string& tag) {
|
| + syncable::Entry parent_entry(
|
| + trans,
|
| + syncable::GET_BY_SERVER_TAG,
|
| + ModelTypeToRootTag(type));
|
| + syncable::MutableEntry entry(
|
| + trans,
|
| + syncable::CREATE,
|
| + type,
|
| + parent_entry.GetId(),
|
| + tag);
|
| +
|
| + entry.PutId(syncable::Id::CreateFromServerId(
|
| + id_factory_.NewServerId().GetServerId()));
|
| + entry.PutBaseVersion(10);
|
| + entry.PutServerVersion(10);
|
| + entry.PutIsUnappliedUpdate(false);
|
| + entry.PutIsUnsynced(false);
|
| + entry.PutIsDel(false);
|
| + entry.PutServerIsDel(false);
|
| +
|
| + return entry.GetMetahandle();
|
| + }
|
| +
|
| void CreateSuccessfulCommitResponse(
|
| const sync_pb::SyncEntity& entity,
|
| sync_pb::CommitResponse::EntryResponse* response) {
|
| @@ -177,6 +204,82 @@ TEST_F(DirectoryCommitContributionTest, PrepareCommit) {
|
| ext_cc->CleanUp();
|
| }
|
|
|
| +// Check that deletion requests include a model type.
|
| +// This was not always the case, but was implemented to allow us to loosen some
|
| +// other restrictions in the protocol.
|
| +TEST_F(DirectoryCommitContributionTest, DeletedItemsWithSpecifics) {
|
| + int64 pref1;
|
| + {
|
| + syncable::WriteTransaction trans(FROM_HERE, syncable::UNITTEST, dir());
|
| + pref1 = CreateSyncedItem(&trans, PREFERENCES, "pref1");
|
| + syncable::MutableEntry e1(&trans, syncable::GET_BY_HANDLE, pref1);
|
| + e1.PutIsDel(true);
|
| + e1.PutIsUnsynced(true);
|
| + }
|
| +
|
| + DirectoryTypeDebugInfoEmitter emitter(PREFERENCES, &type_observers_);
|
| + scoped_ptr<DirectoryCommitContribution> pref_cc(
|
| + DirectoryCommitContribution::Build(dir(), PREFERENCES, 25, &emitter));
|
| + ASSERT_TRUE(pref_cc);
|
| +
|
| + sync_pb::ClientToServerMessage message;
|
| + pref_cc->AddToCommitMessage(&message);
|
| +
|
| + const sync_pb::CommitMessage& commit_message = message.commit();
|
| + ASSERT_EQ(1, commit_message.entries_size());
|
| + EXPECT_TRUE(
|
| + commit_message.entries(0).specifics().has_preference());
|
| +
|
| + pref_cc->CleanUp();
|
| +}
|
| +
|
| +// As ususal, bookmarks are special. Bookmark deletion is special.
|
| +// Deleted bookmarks include a valid "is folder" bit and their full specifics
|
| +// (especially the meta info, which is what server really wants).
|
| +TEST_F(DirectoryCommitContributionTest, DeletedBookmarksWithSpecifics) {
|
| + int64 bm1;
|
| + {
|
| + syncable::WriteTransaction trans(FROM_HERE, syncable::UNITTEST, dir());
|
| + bm1 = CreateSyncedItem(&trans, BOOKMARKS, "bm1");
|
| + syncable::MutableEntry e1(&trans, syncable::GET_BY_HANDLE, bm1);
|
| +
|
| + e1.PutIsDir(true);
|
| + e1.PutServerIsDir(true);
|
| +
|
| + sync_pb::EntitySpecifics specifics;
|
| + sync_pb::BookmarkSpecifics* bm_specifics = specifics.mutable_bookmark();
|
| + bm_specifics->set_url("http://www.chrome.com");
|
| + bm_specifics->set_title("Chrome");
|
| + sync_pb::MetaInfo* meta_info = bm_specifics->add_meta_info();
|
| + meta_info->set_key("K");
|
| + meta_info->set_value("V");
|
| + e1.PutSpecifics(specifics);
|
| +
|
| + e1.PutIsDel(true);
|
| + e1.PutIsUnsynced(true);
|
| + }
|
| +
|
| + DirectoryTypeDebugInfoEmitter emitter(BOOKMARKS, &type_observers_);
|
| + scoped_ptr<DirectoryCommitContribution> bm_cc(
|
| + DirectoryCommitContribution::Build(dir(), BOOKMARKS, 25, &emitter));
|
| + ASSERT_TRUE(bm_cc);
|
| +
|
| + sync_pb::ClientToServerMessage message;
|
| + bm_cc->AddToCommitMessage(&message);
|
| +
|
| + const sync_pb::CommitMessage& commit_message = message.commit();
|
| + ASSERT_EQ(1, commit_message.entries_size());
|
| +
|
| + const sync_pb::SyncEntity& entity = commit_message.entries(0);
|
| + EXPECT_TRUE(entity.has_folder());
|
| + ASSERT_TRUE(entity.specifics().has_bookmark());
|
| + ASSERT_EQ(1, entity.specifics().bookmark().meta_info_size());
|
| + EXPECT_EQ("K", entity.specifics().bookmark().meta_info(0).key());
|
| + EXPECT_EQ("V", entity.specifics().bookmark().meta_info(0).value());
|
| +
|
| + bm_cc->CleanUp();
|
| +}
|
| +
|
| // Creates some unsynced items, pretends to commit them, and hands back a
|
| // specially crafted response to the syncer in order to test commit response
|
| // processing. The response simulates a succesful commit scenario.
|
|
|