12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/internal_api/public/test/test_entry_factory.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/syncable/directory.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/syncable/entry.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/syncable/mutable_entry.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/syncable/syncable_id.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/syncable/syncable_read_transaction.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/syncable/syncable_util.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/syncable/syncable_write_transaction.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/test/engine/test_id_factory.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using std::string; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using syncable::Id; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using syncable::MutableEntry; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using syncable::UNITTEST; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using syncable::WriteTransaction; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestEntryFactory::TestEntryFactory(syncable::Directory *dir) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : directory_(dir), next_revision_(1) { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestEntryFactory::~TestEntryFactory() { } 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int64 TestEntryFactory::CreateUnappliedNewItemWithParent( 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string& item_id, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sync_pb::EntitySpecifics& specifics, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string& parent_id) { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteTransaction trans(FROM_HERE, UNITTEST, directory_); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MutableEntry entry(&trans, syncable::CREATE_NEW_UPDATE_ITEM, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Id::CreateFromServerId(item_id)); 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(entry.good()); 39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerVersion(GetNextRevision()); 40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsUnappliedUpdate(true); 41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerNonUniqueName(item_id); 43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerParentId(Id::CreateFromServerId(parent_id)); 44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerIsDir(true); 45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerSpecifics(specifics); 46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return entry.GetMetahandle(); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int64 TestEntryFactory::CreateUnappliedNewBookmarkItemWithParent( 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string& item_id, 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const sync_pb::EntitySpecifics& specifics, 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string& parent_id) { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WriteTransaction trans(FROM_HERE, UNITTEST, directory_); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MutableEntry entry(&trans, syncable::CREATE_NEW_UPDATE_ITEM, 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Id::CreateFromServerId(item_id)); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(entry.good()); 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerVersion(GetNextRevision()); 58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsUnappliedUpdate(true); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 60d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerNonUniqueName(item_id); 61d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerParentId(Id::CreateFromServerId(parent_id)); 62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerIsDir(true); 63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerSpecifics(specifics); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return entry.GetMetahandle(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int64 TestEntryFactory::CreateUnappliedNewItem( 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string& item_id, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sync_pb::EntitySpecifics& specifics, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_unique) { 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteTransaction trans(FROM_HERE, UNITTEST, directory_); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MutableEntry entry(&trans, syncable::CREATE_NEW_UPDATE_ITEM, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Id::CreateFromServerId(item_id)); 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(entry.good()); 76d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerVersion(GetNextRevision()); 77d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsUnappliedUpdate(true); 78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerNonUniqueName(item_id); 79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerParentId(syncable::GetNullId()); 80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerIsDir(is_unique); 81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerSpecifics(specifics); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (is_unique) { // For top-level nodes. 83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutUniqueServerTag( 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ModelTypeToRootTag(GetModelTypeFromSpecifics(specifics))); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return entry.GetMetahandle(); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void TestEntryFactory::CreateUnsyncedItem( 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Id& item_id, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Id& parent_id, 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string& name, 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_folder, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ModelType model_type, 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64* metahandle_out) { 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (is_folder) { 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(model_type, BOOKMARKS); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteTransaction trans(FROM_HERE, UNITTEST, directory_); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MutableEntry entry(&trans, syncable::CREATE, model_type, parent_id, name); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(entry.good()); 104d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutId(item_id); 105d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutBaseVersion( 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) item_id.ServerKnows() ? GetNextRevision() : 0); 107d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsUnsynced(true); 108d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsDir(is_folder); 109d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsDel(false); 110d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutParentId(parent_id); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sync_pb::EntitySpecifics default_specifics; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddDefaultFieldValue(model_type, &default_specifics); 113d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutSpecifics(default_specifics); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (item_id.ServerKnows()) { 116d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerSpecifics(default_specifics); 117d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerIsDir(false); 118d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerParentId(parent_id); 119d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerIsDel(false); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (metahandle_out) 122d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) *metahandle_out = entry.GetMetahandle(); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int64 TestEntryFactory::CreateUnappliedAndUnsyncedBookmarkItem( 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const string& name) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 metahandle = 0; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateUnsyncedItem( 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestIdFactory::MakeServer(name), TestIdFactory::root(), 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) name, false, BOOKMARKS, &metahandle); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteTransaction trans(FROM_HERE, UNITTEST, directory_); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MutableEntry entry(&trans, syncable::GET_BY_HANDLE, metahandle); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!entry.good()) { 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return syncable::kInvalidMetaHandle; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 139d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsUnappliedUpdate(true); 140d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerVersion(GetNextRevision()); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return metahandle; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int64 TestEntryFactory::CreateSyncedItem( 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& name, ModelType model_type, bool is_folder) { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteTransaction trans(FROM_HERE, UNITTEST, directory_); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncable::Id parent_id(TestIdFactory::root()); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncable::Id item_id(TestIdFactory::MakeServer(name)); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 version = GetNextRevision(); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MutableEntry entry(&trans, syncable::CREATE, model_type, parent_id, name); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!entry.good()) { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return syncable::kInvalidMetaHandle; 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 159d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutId(item_id); 160d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutBaseVersion(version); 161d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsUnsynced(false); 162d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutNonUniqueName(name); 163d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsDir(is_folder); 164d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsDel(false); 165d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutParentId(parent_id); 166d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 167d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerVersion(GetNextRevision()); 168d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsUnappliedUpdate(false); 169d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerNonUniqueName(name); 170d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerParentId(parent_id); 171d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerIsDir(is_folder); 172d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerIsDel(false); 173d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerSpecifics(entry.GetSpecifics()); 174d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 175d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return entry.GetMetahandle(); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int64 TestEntryFactory::CreateUnappliedRootNode( 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ModelType model_type) { 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) syncable::WriteTransaction trans(FROM_HERE, syncable::UNITTEST, directory_); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sync_pb::EntitySpecifics specifics; 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddDefaultFieldValue(model_type, &specifics); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) syncable::Id node_id = TestIdFactory::MakeServer("xyz"); 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) syncable::MutableEntry entry(&trans, syncable::CREATE_NEW_UPDATE_ITEM, 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) node_id); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(entry.good()); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Make it look like sort of like a pending creation from the server. 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The SERVER_PARENT_ID and UNIQUE_CLIENT_TAG aren't quite right, but 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // it's good enough for our purposes. 190d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerVersion(1); 191d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsUnappliedUpdate(true); 192d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerIsDir(false); 193d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerParentId(TestIdFactory::root()); 194d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerSpecifics(specifics); 195d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutNonUniqueName("xyz"); 196d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 197d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return entry.GetMetahandle(); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestEntryFactory::SetServerSpecificsForItem( 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 meta_handle, 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sync_pb::EntitySpecifics specifics) { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteTransaction trans(FROM_HERE, UNITTEST, directory_); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MutableEntry entry(&trans, syncable::GET_BY_HANDLE, meta_handle); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!entry.good()) { 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 208d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutServerSpecifics(specifics); 209d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsUnappliedUpdate(true); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestEntryFactory::SetLocalSpecificsForItem( 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 meta_handle, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sync_pb::EntitySpecifics specifics) { 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WriteTransaction trans(FROM_HERE, UNITTEST, directory_); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MutableEntry entry(&trans, syncable::GET_BY_HANDLE, meta_handle); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!entry.good()) { 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 221d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutSpecifics(specifics); 222d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) entry.PutIsUnsynced(true); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const sync_pb::EntitySpecifics& TestEntryFactory::GetServerSpecificsForItem( 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 meta_handle) const { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncable::ReadTransaction trans(FROM_HERE, directory_); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncable::Entry entry(&trans, syncable::GET_BY_HANDLE, meta_handle); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(entry.good()); 231d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return entry.GetServerSpecifics(); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const sync_pb::EntitySpecifics& TestEntryFactory::GetLocalSpecificsForItem( 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 meta_handle) const { 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncable::ReadTransaction trans(FROM_HERE, directory_); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncable::Entry entry(&trans, syncable::GET_BY_HANDLE, meta_handle); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(entry.good()); 239d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return entry.GetSpecifics(); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestEntryFactory::GetIsUnsyncedForItem(int64 meta_handle) const { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncable::ReadTransaction trans(FROM_HERE, directory_); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncable::Entry entry(&trans, syncable::GET_BY_HANDLE, meta_handle); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!entry.good()) { 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 249d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return entry.GetIsUnsynced(); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool TestEntryFactory::GetIsUnappliedForItem(int64 meta_handle) const { 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncable::ReadTransaction trans(FROM_HERE, directory_); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) syncable::Entry entry(&trans, syncable::GET_BY_HANDLE, meta_handle); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!entry.good()) { 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 259d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return entry.GetIsUnappliedUpdate(); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int64 TestEntryFactory::GetNextRevision() { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return next_revision_++; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace syncer 267