Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Side by Side Diff: sync/internal_api/sync_manager_impl_unittest.cc

Issue 11636006: WIP: The Bookmark Position Megapatch (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Various updates, including switch suffix to unique_client_tag style Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « sync/internal_api/sync_manager_impl.cc ('k') | sync/internal_api/test/test_entry_factory.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 // Unit tests for the SyncApi. Note that a lot of the underlying 5 // Unit tests for the SyncApi. Note that a lot of the underlying
6 // functionality is provided by the Syncable layer, which has its own 6 // functionality is provided by the Syncable layer, which has its own
7 // unit tests. We'll test SyncApi specific things in this harness. 7 // unit tests. We'll test SyncApi specific things in this harness.
8 8
9 #include <cstddef> 9 #include <cstddef>
10 #include <map> 10 #include <map>
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 #include "sync/protocol/preference_specifics.pb.h" 56 #include "sync/protocol/preference_specifics.pb.h"
57 #include "sync/protocol/proto_value_conversions.h" 57 #include "sync/protocol/proto_value_conversions.h"
58 #include "sync/protocol/sync.pb.h" 58 #include "sync/protocol/sync.pb.h"
59 #include "sync/sessions/sync_session.h" 59 #include "sync/sessions/sync_session.h"
60 #include "sync/syncable/directory.h" 60 #include "sync/syncable/directory.h"
61 #include "sync/syncable/entry.h" 61 #include "sync/syncable/entry.h"
62 #include "sync/syncable/mutable_entry.h" 62 #include "sync/syncable/mutable_entry.h"
63 #include "sync/syncable/nigori_util.h" 63 #include "sync/syncable/nigori_util.h"
64 #include "sync/syncable/read_transaction.h" 64 #include "sync/syncable/read_transaction.h"
65 #include "sync/syncable/syncable_id.h" 65 #include "sync/syncable/syncable_id.h"
66 #include "sync/syncable/syncable_util.h"
66 #include "sync/syncable/write_transaction.h" 67 #include "sync/syncable/write_transaction.h"
67 #include "sync/test/callback_counter.h" 68 #include "sync/test/callback_counter.h"
68 #include "sync/test/engine/fake_sync_scheduler.h" 69 #include "sync/test/engine/fake_sync_scheduler.h"
69 #include "sync/test/fake_encryptor.h" 70 #include "sync/test/fake_encryptor.h"
70 #include "sync/test/fake_extensions_activity_monitor.h" 71 #include "sync/test/fake_extensions_activity_monitor.h"
71 #include "sync/util/cryptographer.h" 72 #include "sync/util/cryptographer.h"
72 #include "sync/util/extensions_activity_monitor.h" 73 #include "sync/util/extensions_activity_monitor.h"
73 #include "sync/util/test_unrecoverable_error_handler.h" 74 #include "sync/util/test_unrecoverable_error_handler.h"
74 #include "sync/util/time.h" 75 #include "sync/util/time.h"
75 #include "testing/gmock/include/gmock/gmock.h" 76 #include "testing/gmock/include/gmock/gmock.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 // newly-created node. 118 // newly-created node.
118 int64 MakeNode(UserShare* share, 119 int64 MakeNode(UserShare* share,
119 ModelType model_type, 120 ModelType model_type,
120 const std::string& client_tag) { 121 const std::string& client_tag) {
121 WriteTransaction trans(FROM_HERE, share); 122 WriteTransaction trans(FROM_HERE, share);
122 ReadNode root_node(&trans); 123 ReadNode root_node(&trans);
123 root_node.InitByRootLookup(); 124 root_node.InitByRootLookup();
124 WriteNode node(&trans); 125 WriteNode node(&trans);
125 WriteNode::InitUniqueByCreationResult result = 126 WriteNode::InitUniqueByCreationResult result =
126 node.InitUniqueByCreation(model_type, root_node, client_tag); 127 node.InitUniqueByCreation(model_type, root_node, client_tag);
127 EXPECT_EQ(WriteNode::INIT_SUCCESS, result); 128 DCHECK_EQ(WriteNode::INIT_SUCCESS, result);
128 node.SetIsFolder(false); 129 node.SetIsFolder(false);
129 return node.GetId(); 130 return node.GetId();
130 } 131 }
131 132
132 // Makes a non-folder child of a non-root node. Returns the id of the 133 // Makes a non-folder child of a non-root node. Returns the id of the
133 // newly-created node. 134 // newly-created node.
134 int64 MakeNodeWithParent(UserShare* share, 135 int64 MakeNodeWithParent(UserShare* share,
135 ModelType model_type, 136 ModelType model_type,
136 const std::string& client_tag,
137 int64 parent_id) { 137 int64 parent_id) {
138 DCHECK_EQ(model_type, BOOKMARKS); // Only bookmarks have hierarchy.
138 WriteTransaction trans(FROM_HERE, share); 139 WriteTransaction trans(FROM_HERE, share);
139 ReadNode parent_node(&trans); 140 ReadNode parent_node(&trans);
140 EXPECT_EQ(BaseNode::INIT_OK, parent_node.InitByIdLookup(parent_id)); 141 DCHECK_EQ(BaseNode::INIT_OK, parent_node.InitByIdLookup(parent_id));
141 WriteNode node(&trans); 142 WriteNode node(&trans);
142 WriteNode::InitUniqueByCreationResult result = 143 DCHECK(node.InitBookmarkByCreation(parent_node, NULL));
143 node.InitUniqueByCreation(model_type, parent_node, client_tag);
144 EXPECT_EQ(WriteNode::INIT_SUCCESS, result);
145 node.SetIsFolder(false); 144 node.SetIsFolder(false);
146 return node.GetId(); 145 return node.GetId();
147 } 146 }
148 147
149 // Makes a folder child of a non-root node. Returns the id of the 148 // Makes a folder child of a non-root node. Returns the id of the
150 // newly-created node. 149 // newly-created node.
151 int64 MakeFolderWithParent(UserShare* share, 150 int64 MakeFolderWithParent(UserShare* share,
152 ModelType model_type, 151 ModelType model_type,
153 int64 parent_id, 152 int64 parent_id,
154 BaseNode* predecessor) { 153 BaseNode* predecessor) {
155 WriteTransaction trans(FROM_HERE, share); 154 WriteTransaction trans(FROM_HERE, share);
156 ReadNode parent_node(&trans); 155 ReadNode parent_node(&trans);
157 EXPECT_EQ(BaseNode::INIT_OK, parent_node.InitByIdLookup(parent_id)); 156 DCHECK_EQ(BaseNode::INIT_OK, parent_node.InitByIdLookup(parent_id));
158 WriteNode node(&trans); 157 WriteNode node(&trans);
159 EXPECT_TRUE(node.InitByCreation(model_type, parent_node, predecessor)); 158 DCHECK(node.InitBookmarkByCreation(parent_node, predecessor));
160 node.SetIsFolder(true); 159 node.SetIsFolder(true);
161 return node.GetId(); 160 return node.GetId();
162 } 161 }
163 162
163 int64 MakeBookmarkWithParent(UserShare* share,
164 int64 parent_id,
165 BaseNode* predecessor) {
166 WriteTransaction trans(FROM_HERE, share);
167 ReadNode parent_node(&trans);
168 DCHECK_EQ(BaseNode::INIT_OK, parent_node.InitByIdLookup(parent_id));
169 WriteNode node(&trans);
170 DCHECK(node.InitBookmarkByCreation(parent_node, predecessor));
171 return node.GetId();
172 }
173
164 // Creates the "synced" root node for a particular datatype. We use the syncable 174 // Creates the "synced" root node for a particular datatype. We use the syncable
165 // methods here so that the syncer treats these nodes as if they were already 175 // methods here so that the syncer treats these nodes as if they were already
166 // received from the server. 176 // received from the server.
167 int64 MakeServerNodeForType(UserShare* share, 177 int64 MakeServerNodeForType(UserShare* share,
168 ModelType model_type) { 178 ModelType model_type) {
169 sync_pb::EntitySpecifics specifics; 179 sync_pb::EntitySpecifics specifics;
170 AddDefaultFieldValue(model_type, &specifics); 180 AddDefaultFieldValue(model_type, &specifics);
171 syncable::WriteTransaction trans( 181 syncable::WriteTransaction trans(
172 FROM_HERE, syncable::UNITTEST, share->directory.get()); 182 FROM_HERE, syncable::UNITTEST, share->directory.get());
173 // Attempt to lookup by nigori tag. 183 // Attempt to lookup by nigori tag.
174 std::string type_tag = ModelTypeToRootTag(model_type); 184 std::string type_tag = ModelTypeToRootTag(model_type);
175 syncable::Id node_id = syncable::Id::CreateFromServerId(type_tag); 185 syncable::Id node_id = syncable::Id::CreateFromServerId(type_tag);
176 syncable::MutableEntry entry(&trans, syncable::CREATE_NEW_UPDATE_ITEM, 186 syncable::MutableEntry entry(&trans, syncable::CREATE_NEW_UPDATE_ITEM,
177 node_id); 187 node_id);
178 EXPECT_TRUE(entry.good()); 188 EXPECT_TRUE(entry.good());
179 entry.Put(syncable::BASE_VERSION, 1); 189 entry.Put(syncable::BASE_VERSION, 1);
180 entry.Put(syncable::SERVER_VERSION, 1); 190 entry.Put(syncable::SERVER_VERSION, 1);
181 entry.Put(syncable::IS_UNAPPLIED_UPDATE, false); 191 entry.Put(syncable::IS_UNAPPLIED_UPDATE, false);
182 entry.Put(syncable::SERVER_PARENT_ID, syncable::GetNullId()); 192 entry.Put(syncable::SERVER_PARENT_ID, syncable::GetNullId());
183 entry.Put(syncable::SERVER_IS_DIR, true); 193 entry.Put(syncable::SERVER_IS_DIR, true);
184 entry.Put(syncable::IS_DIR, true); 194 entry.Put(syncable::IS_DIR, true);
185 entry.Put(syncable::SERVER_SPECIFICS, specifics); 195 entry.Put(syncable::SERVER_SPECIFICS, specifics);
186 entry.Put(syncable::UNIQUE_SERVER_TAG, type_tag); 196 entry.Put(syncable::UNIQUE_SERVER_TAG, type_tag);
187 entry.Put(syncable::NON_UNIQUE_NAME, type_tag); 197 entry.Put(syncable::NON_UNIQUE_NAME, type_tag);
188 entry.Put(syncable::IS_DEL, false); 198 entry.Put(syncable::IS_DEL, false);
189 entry.Put(syncable::SPECIFICS, specifics); 199 entry.Put(syncable::SPECIFICS, specifics);
190 return entry.Get(syncable::META_HANDLE); 200 return entry.Get(syncable::META_HANDLE);
191 } 201 }
192 202
203 int64 GetServerNodeForType(UserShare* share, ModelType type) {
204 ReadTransaction trans(FROM_HERE, share);
205 ReadNode bookmark_root(&trans);
206 EXPECT_EQ(BaseNode::INIT_OK,
207 bookmark_root.InitByTagLookup(ModelTypeToRootTag(BOOKMARKS)));
208 return bookmark_root.GetId();
209 }
210
193 // Simulates creating a "synced" node as a child of the root datatype node. 211 // Simulates creating a "synced" node as a child of the root datatype node.
194 int64 MakeServerNode(UserShare* share, ModelType model_type, 212 int64 MakeServerNode(UserShare* share, ModelType model_type,
195 const std::string& client_tag, 213 const std::string& client_tag,
196 const std::string& hashed_tag, 214 const std::string& hashed_tag,
197 const sync_pb::EntitySpecifics& specifics) { 215 const sync_pb::EntitySpecifics& specifics) {
198 syncable::WriteTransaction trans( 216 syncable::WriteTransaction trans(
199 FROM_HERE, syncable::UNITTEST, share->directory.get()); 217 FROM_HERE, syncable::UNITTEST, share->directory.get());
200 syncable::Entry root_entry(&trans, syncable::GET_BY_SERVER_TAG, 218 syncable::Entry root_entry(&trans, syncable::GET_BY_SERVER_TAG,
201 ModelTypeToRootTag(model_type)); 219 ModelTypeToRootTag(model_type));
202 EXPECT_TRUE(root_entry.good()); 220 EXPECT_TRUE(root_entry.good());
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 275
258 TEST_F(SyncApiTest, BasicTagWrite) { 276 TEST_F(SyncApiTest, BasicTagWrite) {
259 { 277 {
260 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); 278 ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
261 ReadNode root_node(&trans); 279 ReadNode root_node(&trans);
262 root_node.InitByRootLookup(); 280 root_node.InitByRootLookup();
263 EXPECT_EQ(root_node.GetFirstChildId(), 0); 281 EXPECT_EQ(root_node.GetFirstChildId(), 0);
264 } 282 }
265 283
266 ignore_result(MakeNode(test_user_share_.user_share(), 284 ignore_result(MakeNode(test_user_share_.user_share(),
267 BOOKMARKS, "testtag")); 285 AUTOFILL, "testtag"));
268 286
269 { 287 {
270 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); 288 ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
271 ReadNode node(&trans); 289 ReadNode node(&trans);
272 EXPECT_EQ(BaseNode::INIT_OK, 290 EXPECT_EQ(BaseNode::INIT_OK,
273 node.InitByClientTagLookup(BOOKMARKS, "testtag")); 291 node.InitByClientTagLookup(AUTOFILL, "testtag"));
274 292
275 ReadNode root_node(&trans); 293 ReadNode root_node(&trans);
276 root_node.InitByRootLookup(); 294 root_node.InitByRootLookup();
277 EXPECT_NE(node.GetId(), 0); 295 EXPECT_NE(node.GetId(), 0);
278 EXPECT_EQ(node.GetId(), root_node.GetFirstChildId()); 296 EXPECT_EQ(node.GetId(), root_node.GetFirstChildId());
279 } 297 }
280 } 298 }
281 299
282 TEST_F(SyncApiTest, GenerateSyncableHash) { 300 TEST_F(SyncApiTest, GenerateSyncableHash) {
283 EXPECT_EQ("OyaXV5mEzrPS4wbogmtKvRfekAI=", 301 EXPECT_EQ("TrJxl8908A2qDbaLzjxjyUzskpY=",
284 BaseNode::GenerateSyncableHash(BOOKMARKS, "tag1")); 302 syncable::GenerateSyncableHash(THEMES, "tag1"));
285 EXPECT_EQ("iNFQtRFQb+IZcn1kKUJEZDDkLs4=", 303 EXPECT_EQ("iNFQtRFQb+IZcn1kKUJEZDDkLs4=",
286 BaseNode::GenerateSyncableHash(PREFERENCES, "tag1")); 304 syncable::GenerateSyncableHash(PREFERENCES, "tag1"));
287 EXPECT_EQ("gO1cPZQXaM73sHOvSA+tKCKFs58=", 305 EXPECT_EQ("gO1cPZQXaM73sHOvSA+tKCKFs58=",
288 BaseNode::GenerateSyncableHash(AUTOFILL, "tag1")); 306 syncable::GenerateSyncableHash(AUTOFILL, "tag1"));
289 307
290 EXPECT_EQ("A0eYIHXM1/jVwKDDp12Up20IkKY=", 308 EXPECT_EQ("YCbRusldaxqFnrd36Y7cJagN8TA=",
291 BaseNode::GenerateSyncableHash(BOOKMARKS, "tag2")); 309 syncable::GenerateSyncableHash(THEMES, "tag2"));
292 EXPECT_EQ("XYxkF7bhS4eItStFgiOIAU23swI=", 310 EXPECT_EQ("XYxkF7bhS4eItStFgiOIAU23swI=",
293 BaseNode::GenerateSyncableHash(PREFERENCES, "tag2")); 311 syncable::GenerateSyncableHash(PREFERENCES, "tag2"));
294 EXPECT_EQ("GFiWzo5NGhjLlN+OyCfhy28DJTQ=", 312 EXPECT_EQ("GFiWzo5NGhjLlN+OyCfhy28DJTQ=",
295 BaseNode::GenerateSyncableHash(AUTOFILL, "tag2")); 313 syncable::GenerateSyncableHash(AUTOFILL, "tag2"));
296 } 314 }
297 315
298 TEST_F(SyncApiTest, ModelTypesSiloed) { 316 TEST_F(SyncApiTest, ModelTypesSiloed) {
299 { 317 {
300 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); 318 WriteTransaction trans(FROM_HERE, test_user_share_.user_share());
301 ReadNode root_node(&trans); 319 ReadNode root_node(&trans);
302 root_node.InitByRootLookup(); 320 root_node.InitByRootLookup();
303 EXPECT_EQ(root_node.GetFirstChildId(), 0); 321 EXPECT_EQ(root_node.GetFirstChildId(), 0);
304 } 322 }
305 323
306 ignore_result(MakeNode(test_user_share_.user_share(), 324 ignore_result(MakeNode(test_user_share_.user_share(),
307 BOOKMARKS, "collideme")); 325 THEMES, "collideme"));
308 ignore_result(MakeNode(test_user_share_.user_share(), 326 ignore_result(MakeNode(test_user_share_.user_share(),
309 PREFERENCES, "collideme")); 327 PREFERENCES, "collideme"));
310 ignore_result(MakeNode(test_user_share_.user_share(), 328 ignore_result(MakeNode(test_user_share_.user_share(),
311 AUTOFILL, "collideme")); 329 AUTOFILL, "collideme"));
312 330
313 { 331 {
314 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); 332 ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
315 333
316 ReadNode bookmarknode(&trans); 334 ReadNode bookmarknode(&trans);
317 EXPECT_EQ(BaseNode::INIT_OK, 335 EXPECT_EQ(BaseNode::INIT_OK,
318 bookmarknode.InitByClientTagLookup(BOOKMARKS, 336 bookmarknode.InitByClientTagLookup(THEMES,
319 "collideme")); 337 "collideme"));
320 338
321 ReadNode prefnode(&trans); 339 ReadNode prefnode(&trans);
322 EXPECT_EQ(BaseNode::INIT_OK, 340 EXPECT_EQ(BaseNode::INIT_OK,
323 prefnode.InitByClientTagLookup(PREFERENCES, 341 prefnode.InitByClientTagLookup(PREFERENCES,
324 "collideme")); 342 "collideme"));
325 343
326 ReadNode autofillnode(&trans); 344 ReadNode autofillnode(&trans);
327 EXPECT_EQ(BaseNode::INIT_OK, 345 EXPECT_EQ(BaseNode::INIT_OK,
328 autofillnode.InitByClientTagLookup(AUTOFILL, 346 autofillnode.InitByClientTagLookup(AUTOFILL,
329 "collideme")); 347 "collideme"));
330 348
331 EXPECT_NE(bookmarknode.GetId(), prefnode.GetId()); 349 EXPECT_NE(bookmarknode.GetId(), prefnode.GetId());
332 EXPECT_NE(autofillnode.GetId(), prefnode.GetId()); 350 EXPECT_NE(autofillnode.GetId(), prefnode.GetId());
333 EXPECT_NE(bookmarknode.GetId(), autofillnode.GetId()); 351 EXPECT_NE(bookmarknode.GetId(), autofillnode.GetId());
334 } 352 }
335 } 353 }
336 354
337 TEST_F(SyncApiTest, ReadMissingTagsFails) { 355 TEST_F(SyncApiTest, ReadMissingTagsFails) {
338 { 356 {
339 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); 357 ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
340 ReadNode node(&trans); 358 ReadNode node(&trans);
341 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD, 359 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD,
342 node.InitByClientTagLookup(BOOKMARKS, 360 node.InitByClientTagLookup(THEMES,
343 "testtag")); 361 "testtag"));
344 } 362 }
345 { 363 {
346 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); 364 WriteTransaction trans(FROM_HERE, test_user_share_.user_share());
347 WriteNode node(&trans); 365 WriteNode node(&trans);
348 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD, 366 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD,
349 node.InitByClientTagLookup(BOOKMARKS, 367 node.InitByClientTagLookup(THEMES,
350 "testtag")); 368 "testtag"));
351 } 369 }
352 } 370 }
353 371
354 // TODO(chron): Hook this all up to the server and write full integration tests 372 // TODO(chron): Hook this all up to the server and write full integration tests
355 // for update->undelete behavior. 373 // for update->undelete behavior.
356 TEST_F(SyncApiTest, TestDeleteBehavior) { 374 TEST_F(SyncApiTest, TestDeleteBehavior) {
357 int64 node_id; 375 int64 node_id;
358 int64 folder_id; 376 int64 folder_id;
359 std::string test_title("test1"); 377 std::string test_title("test1");
360 378
361 { 379 {
362 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); 380 WriteTransaction trans(FROM_HERE, test_user_share_.user_share());
363 ReadNode root_node(&trans); 381 ReadNode root_node(&trans);
364 root_node.InitByRootLookup(); 382 root_node.InitByRootLookup();
365 383
366 // we'll use this spare folder later 384 // we'll use this spare folder later
367 WriteNode folder_node(&trans); 385 WriteNode folder_node(&trans);
368 EXPECT_TRUE(folder_node.InitByCreation(BOOKMARKS, 386 EXPECT_TRUE(folder_node.InitBookmarkByCreation(root_node, NULL));
369 root_node, NULL));
370 folder_id = folder_node.GetId(); 387 folder_id = folder_node.GetId();
371 388
372 WriteNode wnode(&trans); 389 WriteNode wnode(&trans);
373 WriteNode::InitUniqueByCreationResult result = 390 WriteNode::InitUniqueByCreationResult result =
374 wnode.InitUniqueByCreation(BOOKMARKS, root_node, "testtag"); 391 wnode.InitUniqueByCreation(AUTOFILL, root_node, "testtag");
375 EXPECT_EQ(WriteNode::INIT_SUCCESS, result); 392 EXPECT_EQ(WriteNode::INIT_SUCCESS, result);
376 wnode.SetIsFolder(false); 393 wnode.SetIsFolder(false);
377 wnode.SetTitle(UTF8ToWide(test_title)); 394 wnode.SetTitle(UTF8ToWide(test_title));
378 395
379 node_id = wnode.GetId(); 396 node_id = wnode.GetId();
380 } 397 }
381 398
382 // Ensure we can delete something with a tag. 399 // Ensure we can delete something with a tag.
383 { 400 {
384 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); 401 WriteTransaction trans(FROM_HERE, test_user_share_.user_share());
385 WriteNode wnode(&trans); 402 WriteNode wnode(&trans);
386 EXPECT_EQ(BaseNode::INIT_OK, 403 EXPECT_EQ(BaseNode::INIT_OK,
387 wnode.InitByClientTagLookup(BOOKMARKS, 404 wnode.InitByClientTagLookup(AUTOFILL, "testtag"));
388 "testtag"));
389 EXPECT_FALSE(wnode.GetIsFolder()); 405 EXPECT_FALSE(wnode.GetIsFolder());
390 EXPECT_EQ(wnode.GetTitle(), test_title); 406 EXPECT_EQ(wnode.GetTitle(), test_title);
391 407
392 wnode.Remove(); 408 wnode.Remove();
393 } 409 }
394 410
395 // Lookup of a node which was deleted should return failure, 411 // Lookup of a node which was deleted should return failure,
396 // but have found some data about the node. 412 // but have found some data about the node.
397 { 413 {
398 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); 414 ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
399 ReadNode node(&trans); 415 ReadNode node(&trans);
400 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_IS_DEL, 416 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_IS_DEL,
401 node.InitByClientTagLookup(BOOKMARKS, 417 node.InitByClientTagLookup(AUTOFILL, "testtag"));
402 "testtag"));
403 // Note that for proper function of this API this doesn't need to be 418 // Note that for proper function of this API this doesn't need to be
404 // filled, we're checking just to make sure the DB worked in this test. 419 // filled, we're checking just to make sure the DB worked in this test.
405 EXPECT_EQ(node.GetTitle(), test_title); 420 EXPECT_EQ(node.GetTitle(), test_title);
406 } 421 }
407 422
408 { 423 {
409 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); 424 WriteTransaction trans(FROM_HERE, test_user_share_.user_share());
410 ReadNode folder_node(&trans); 425 ReadNode folder_node(&trans);
411 EXPECT_EQ(BaseNode::INIT_OK, folder_node.InitByIdLookup(folder_id)); 426 EXPECT_EQ(BaseNode::INIT_OK, folder_node.InitByIdLookup(folder_id));
412 427
413 WriteNode wnode(&trans); 428 WriteNode wnode(&trans);
414 // This will undelete the tag. 429 // This will undelete the tag.
415 WriteNode::InitUniqueByCreationResult result = 430 WriteNode::InitUniqueByCreationResult result =
416 wnode.InitUniqueByCreation(BOOKMARKS, folder_node, "testtag"); 431 wnode.InitUniqueByCreation(AUTOFILL, folder_node, "testtag");
417 EXPECT_EQ(WriteNode::INIT_SUCCESS, result); 432 EXPECT_EQ(WriteNode::INIT_SUCCESS, result);
418 EXPECT_EQ(wnode.GetIsFolder(), false); 433 EXPECT_EQ(wnode.GetIsFolder(), false);
419 EXPECT_EQ(wnode.GetParentId(), folder_node.GetId()); 434 EXPECT_EQ(wnode.GetParentId(), folder_node.GetId());
420 EXPECT_EQ(wnode.GetId(), node_id); 435 EXPECT_EQ(wnode.GetId(), node_id);
421 EXPECT_NE(wnode.GetTitle(), test_title); // Title should be cleared 436 EXPECT_NE(wnode.GetTitle(), test_title); // Title should be cleared
422 wnode.SetTitle(UTF8ToWide(test_title)); 437 wnode.SetTitle(UTF8ToWide(test_title));
423 } 438 }
424 439
425 // Now look up should work. 440 // Now look up should work.
426 { 441 {
427 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); 442 ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
428 ReadNode node(&trans); 443 ReadNode node(&trans);
429 EXPECT_EQ(BaseNode::INIT_OK, 444 EXPECT_EQ(BaseNode::INIT_OK,
430 node.InitByClientTagLookup(BOOKMARKS, 445 node.InitByClientTagLookup(AUTOFILL,
431 "testtag")); 446 "testtag"));
432 EXPECT_EQ(node.GetTitle(), test_title); 447 EXPECT_EQ(node.GetTitle(), test_title);
433 EXPECT_EQ(node.GetModelType(), BOOKMARKS); 448 EXPECT_EQ(node.GetModelType(), AUTOFILL);
434 } 449 }
435 } 450 }
436 451
437 TEST_F(SyncApiTest, WriteAndReadPassword) { 452 TEST_F(SyncApiTest, WriteAndReadPassword) {
438 KeyParams params = {"localhost", "username", "passphrase"}; 453 KeyParams params = {"localhost", "username", "passphrase"};
439 { 454 {
440 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); 455 ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
441 trans.GetCryptographer()->AddKey(params); 456 trans.GetCryptographer()->AddKey(params);
442 } 457 }
443 { 458 {
(...skipping 24 matching lines...) Expand all
468 } 483 }
469 } 484 }
470 485
471 TEST_F(SyncApiTest, WriteEncryptedTitle) { 486 TEST_F(SyncApiTest, WriteEncryptedTitle) {
472 KeyParams params = {"localhost", "username", "passphrase"}; 487 KeyParams params = {"localhost", "username", "passphrase"};
473 { 488 {
474 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); 489 ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
475 trans.GetCryptographer()->AddKey(params); 490 trans.GetCryptographer()->AddKey(params);
476 } 491 }
477 test_user_share_.encryption_handler()->EnableEncryptEverything(); 492 test_user_share_.encryption_handler()->EnableEncryptEverything();
493 int bookmark_id;
478 { 494 {
479 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); 495 WriteTransaction trans(FROM_HERE, test_user_share_.user_share());
480 ReadNode root_node(&trans); 496 ReadNode root_node(&trans);
481 root_node.InitByRootLookup(); 497 root_node.InitByRootLookup();
482 498
483 WriteNode bookmark_node(&trans); 499 WriteNode bookmark_node(&trans);
484 WriteNode::InitUniqueByCreationResult result = 500 EXPECT_TRUE(bookmark_node.InitBookmarkByCreation(root_node, NULL));
485 bookmark_node.InitUniqueByCreation(BOOKMARKS, 501 bookmark_id = bookmark_node.GetId();
486 root_node, "foo");
487 EXPECT_EQ(WriteNode::INIT_SUCCESS, result);
488 bookmark_node.SetTitle(UTF8ToWide("foo")); 502 bookmark_node.SetTitle(UTF8ToWide("foo"));
489 503
490 WriteNode pref_node(&trans); 504 WriteNode pref_node(&trans);
491 result = 505 WriteNode::InitUniqueByCreationResult result =
492 pref_node.InitUniqueByCreation(PREFERENCES, root_node, "bar"); 506 pref_node.InitUniqueByCreation(PREFERENCES, root_node, "bar");
493 EXPECT_EQ(WriteNode::INIT_SUCCESS, result); 507 EXPECT_EQ(WriteNode::INIT_SUCCESS, result);
494 pref_node.SetTitle(UTF8ToWide("bar")); 508 pref_node.SetTitle(UTF8ToWide("bar"));
495 } 509 }
496 { 510 {
497 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); 511 ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
498 ReadNode root_node(&trans); 512 ReadNode root_node(&trans);
499 root_node.InitByRootLookup(); 513 root_node.InitByRootLookup();
500 514
501 ReadNode bookmark_node(&trans); 515 ReadNode bookmark_node(&trans);
502 EXPECT_EQ(BaseNode::INIT_OK, 516 EXPECT_EQ(BaseNode::INIT_OK,
503 bookmark_node.InitByClientTagLookup(BOOKMARKS, 517 bookmark_node.InitByIdLookup(bookmark_id));
504 "foo"));
505 EXPECT_EQ("foo", bookmark_node.GetTitle()); 518 EXPECT_EQ("foo", bookmark_node.GetTitle());
506 EXPECT_EQ(kEncryptedString, 519 EXPECT_EQ(kEncryptedString,
507 bookmark_node.GetEntry()->Get(syncable::NON_UNIQUE_NAME)); 520 bookmark_node.GetEntry()->Get(syncable::NON_UNIQUE_NAME));
508 521
509 ReadNode pref_node(&trans); 522 ReadNode pref_node(&trans);
510 EXPECT_EQ(BaseNode::INIT_OK, 523 EXPECT_EQ(BaseNode::INIT_OK,
511 pref_node.InitByClientTagLookup(PREFERENCES, 524 pref_node.InitByClientTagLookup(PREFERENCES,
512 "bar")); 525 "bar"));
513 EXPECT_EQ(kEncryptedString, pref_node.GetTitle()); 526 EXPECT_EQ(kEncryptedString, pref_node.GetTitle());
514 } 527 }
515 } 528 }
516 529
517 TEST_F(SyncApiTest, BaseNodeSetSpecifics) { 530 TEST_F(SyncApiTest, BaseNodeSetSpecifics) {
518 int64 child_id = MakeNode(test_user_share_.user_share(), 531 int64 child_id = MakeNode(test_user_share_.user_share(),
519 BOOKMARKS, "testtag"); 532 THEMES, "testtag");
520 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); 533 WriteTransaction trans(FROM_HERE, test_user_share_.user_share());
521 WriteNode node(&trans); 534 WriteNode node(&trans);
522 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(child_id)); 535 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(child_id));
523 536
537
524 sync_pb::EntitySpecifics entity_specifics; 538 sync_pb::EntitySpecifics entity_specifics;
525 entity_specifics.mutable_bookmark()->set_url("http://www.google.com"); 539 entity_specifics.mutable_theme()->set_custom_theme_name("ThemeName");
526 540
527 EXPECT_NE(entity_specifics.SerializeAsString(), 541 EXPECT_NE(entity_specifics.SerializeAsString(),
528 node.GetEntitySpecifics().SerializeAsString()); 542 node.GetEntitySpecifics().SerializeAsString());
529 node.SetEntitySpecifics(entity_specifics); 543 node.SetEntitySpecifics(entity_specifics);
530 EXPECT_EQ(entity_specifics.SerializeAsString(), 544 EXPECT_EQ(entity_specifics.SerializeAsString(),
531 node.GetEntitySpecifics().SerializeAsString()); 545 node.GetEntitySpecifics().SerializeAsString());
532 } 546 }
533 547
534 TEST_F(SyncApiTest, BaseNodeSetSpecificsPreservesUnknownFields) { 548 TEST_F(SyncApiTest, BaseNodeSetSpecificsPreservesUnknownFields) {
535 int64 child_id = MakeNode(test_user_share_.user_share(), 549 int64 child_id = MakeNode(test_user_share_.user_share(),
536 BOOKMARKS, "testtag"); 550 THEMES, "testtag");
537 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); 551 WriteTransaction trans(FROM_HERE, test_user_share_.user_share());
538 WriteNode node(&trans); 552 WriteNode node(&trans);
539 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(child_id)); 553 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(child_id));
540 EXPECT_TRUE(node.GetEntitySpecifics().unknown_fields().empty()); 554 EXPECT_TRUE(node.GetEntitySpecifics().unknown_fields().empty());
541 555
542 sync_pb::EntitySpecifics entity_specifics; 556 sync_pb::EntitySpecifics entity_specifics;
543 entity_specifics.mutable_bookmark()->set_url("http://www.google.com"); 557 entity_specifics.mutable_theme()->set_custom_theme_name("ThemeName");
544 entity_specifics.mutable_unknown_fields()->AddFixed32(5, 100); 558 entity_specifics.mutable_unknown_fields()->AddFixed32(5, 100);
545 node.SetEntitySpecifics(entity_specifics); 559 node.SetEntitySpecifics(entity_specifics);
546 EXPECT_FALSE(node.GetEntitySpecifics().unknown_fields().empty()); 560 EXPECT_FALSE(node.GetEntitySpecifics().unknown_fields().empty());
547 561
548 entity_specifics.mutable_unknown_fields()->Clear(); 562 entity_specifics.mutable_unknown_fields()->Clear();
549 node.SetEntitySpecifics(entity_specifics); 563 node.SetEntitySpecifics(entity_specifics);
550 EXPECT_FALSE(node.GetEntitySpecifics().unknown_fields().empty()); 564 EXPECT_FALSE(node.GetEntitySpecifics().unknown_fields().empty());
551 } 565 }
552 566
553 namespace { 567 namespace {
(...skipping 19 matching lines...) Expand all
573 } else if (expected_model_type == UNSPECIFIED) { 587 } else if (expected_model_type == UNSPECIFIED) {
574 EXPECT_EQ("Unspecified", type_str); 588 EXPECT_EQ("Unspecified", type_str);
575 } else { 589 } else {
576 ADD_FAILURE(); 590 ADD_FAILURE();
577 } 591 }
578 } 592 }
579 if (is_detailed) { 593 if (is_detailed) {
580 ExpectInt64Value(node.GetParentId(), value, "parentId"); 594 ExpectInt64Value(node.GetParentId(), value, "parentId");
581 ExpectTimeValue(node.GetModificationTime(), value, "modificationTime"); 595 ExpectTimeValue(node.GetModificationTime(), value, "modificationTime");
582 ExpectInt64Value(node.GetExternalId(), value, "externalId"); 596 ExpectInt64Value(node.GetExternalId(), value, "externalId");
583 ExpectInt64Value(node.GetPredecessorId(), value, "predecessorId");
584 ExpectInt64Value(node.GetSuccessorId(), value, "successorId");
585 ExpectInt64Value(node.GetFirstChildId(), value, "firstChildId");
586 { 597 {
587 scoped_ptr<DictionaryValue> expected_entry( 598 scoped_ptr<DictionaryValue> expected_entry(
588 node.GetEntry()->ToValue(NULL)); 599 node.GetEntry()->ToValue(NULL));
589 const Value* entry = NULL; 600 const Value* entry = NULL;
590 EXPECT_TRUE(value.Get("entry", &entry)); 601 EXPECT_TRUE(value.Get("entry", &entry));
591 EXPECT_TRUE(Value::Equals(entry, expected_entry.get())); 602 EXPECT_TRUE(Value::Equals(entry, expected_entry.get()));
592 } 603 }
593 EXPECT_EQ(11u, value.size()); 604 EXPECT_EQ(8u, value.size());
594 } else { 605 } else {
595 EXPECT_EQ(4u, value.size()); 606 EXPECT_EQ(4u, value.size());
596 } 607 }
597 } 608 }
598 609
599 } // namespace 610 } // namespace
600 611
601 TEST_F(SyncApiTest, BaseNodeGetSummaryAsValue) { 612 TEST_F(SyncApiTest, BaseNodeGetSummaryAsValue) {
602 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); 613 ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
603 ReadNode node(&trans); 614 ReadNode node(&trans);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
680 NULL); 691 NULL);
681 ignore_result(MakeFolderWithParent(test_user_share_.user_share(), 692 ignore_result(MakeFolderWithParent(test_user_share_.user_share(),
682 BOOKMARKS, 693 BOOKMARKS,
683 type_root, 694 type_root,
684 NULL)); 695 NULL));
685 int64 child1 = MakeFolderWithParent( 696 int64 child1 = MakeFolderWithParent(
686 test_user_share_.user_share(), 697 test_user_share_.user_share(),
687 BOOKMARKS, 698 BOOKMARKS,
688 parent, 699 parent,
689 NULL); 700 NULL);
690 ignore_result(MakeNodeWithParent( 701 ignore_result(MakeBookmarkWithParent(
691 test_user_share_.user_share(), 702 test_user_share_.user_share(),
692 BOOKMARKS, 703 parent,
693 "c2", 704 NULL));
694 parent)); 705 ignore_result(MakeBookmarkWithParent(
695 ignore_result(MakeNodeWithParent(
696 test_user_share_.user_share(), 706 test_user_share_.user_share(),
697 BOOKMARKS, 707 child1,
698 "c1c1", 708 NULL));
699 child1));
700 709
701 { 710 {
702 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); 711 ReadTransaction trans(FROM_HERE, test_user_share_.user_share());
703 ReadNode type_root_node(&trans); 712 ReadNode type_root_node(&trans);
704 EXPECT_EQ(BaseNode::INIT_OK, 713 EXPECT_EQ(BaseNode::INIT_OK,
705 type_root_node.InitByIdLookup(type_root)); 714 type_root_node.InitByIdLookup(type_root));
706 EXPECT_EQ(6, type_root_node.GetTotalNodeCount()); 715 EXPECT_EQ(6, type_root_node.GetTotalNodeCount());
707 ReadNode node(&trans); 716 ReadNode node(&trans);
708 EXPECT_EQ(BaseNode::INIT_OK, 717 EXPECT_EQ(BaseNode::INIT_OK,
709 node.InitByIdLookup(parent)); 718 node.InitByIdLookup(parent));
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
949 } 958 }
950 959
951 // Looks up an entry by client tag and resets IS_UNSYNCED value to false. 960 // Looks up an entry by client tag and resets IS_UNSYNCED value to false.
952 // Returns true if entry was previously unsynced, false if IS_UNSYNCED was 961 // Returns true if entry was previously unsynced, false if IS_UNSYNCED was
953 // already false. 962 // already false.
954 bool ResetUnsyncedEntry(ModelType type, 963 bool ResetUnsyncedEntry(ModelType type,
955 const std::string& client_tag) { 964 const std::string& client_tag) {
956 UserShare* share = sync_manager_.GetUserShare(); 965 UserShare* share = sync_manager_.GetUserShare();
957 syncable::WriteTransaction trans( 966 syncable::WriteTransaction trans(
958 FROM_HERE, syncable::UNITTEST, share->directory.get()); 967 FROM_HERE, syncable::UNITTEST, share->directory.get());
959 const std::string hash = BaseNode::GenerateSyncableHash(type, client_tag); 968 const std::string hash = syncable::GenerateSyncableHash(type, client_tag);
960 syncable::MutableEntry entry(&trans, syncable::GET_BY_CLIENT_TAG, 969 syncable::MutableEntry entry(&trans, syncable::GET_BY_CLIENT_TAG,
961 hash); 970 hash);
962 EXPECT_TRUE(entry.good()); 971 EXPECT_TRUE(entry.good());
963 if (!entry.Get(IS_UNSYNCED)) 972 if (!entry.Get(IS_UNSYNCED))
964 return false; 973 return false;
965 entry.Put(IS_UNSYNCED, false); 974 entry.Put(IS_UNSYNCED, false);
966 return true; 975 return true;
967 } 976 }
968 977
969 virtual InternalComponentsFactory* GetFactory() { 978 virtual InternalComponentsFactory* GetFactory() {
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1132 void RunGetNodesByIdTest(const char* message_name, bool is_detailed) { 1141 void RunGetNodesByIdTest(const char* message_name, bool is_detailed) {
1133 int64 root_id = kInvalidId; 1142 int64 root_id = kInvalidId;
1134 { 1143 {
1135 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 1144 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
1136 ReadNode root_node(&trans); 1145 ReadNode root_node(&trans);
1137 root_node.InitByRootLookup(); 1146 root_node.InitByRootLookup();
1138 root_id = root_node.GetId(); 1147 root_id = root_node.GetId();
1139 } 1148 }
1140 1149
1141 int64 child_id = 1150 int64 child_id =
1142 MakeNode(sync_manager_.GetUserShare(), BOOKMARKS, "testtag"); 1151 MakeNode(sync_manager_.GetUserShare(), THEMES, "testtag");
1143 1152
1144 StrictMock<MockJsReplyHandler> reply_handler; 1153 StrictMock<MockJsReplyHandler> reply_handler;
1145 1154
1146 JsArgList return_args; 1155 JsArgList return_args;
1147 1156
1148 const int64 ids[] = { root_id, child_id }; 1157 const int64 ids[] = { root_id, child_id };
1149 1158
1150 EXPECT_CALL(reply_handler, 1159 EXPECT_CALL(reply_handler,
1151 HandleJsReply(message_name, _)) 1160 HandleJsReply(message_name, _))
1152 .Times(arraysize(ids)).WillRepeatedly(SaveArg<1>(&return_args)); 1161 .Times(arraysize(ids)).WillRepeatedly(SaveArg<1>(&return_args));
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
1547 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); 1556 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION));
1548 1557
1549 // Create some unencrypted unsynced data. 1558 // Create some unencrypted unsynced data.
1550 int64 folder = MakeFolderWithParent(sync_manager_.GetUserShare(), 1559 int64 folder = MakeFolderWithParent(sync_manager_.GetUserShare(),
1551 BOOKMARKS, 1560 BOOKMARKS,
1552 GetIdForDataType(BOOKMARKS), 1561 GetIdForDataType(BOOKMARKS),
1553 NULL); 1562 NULL);
1554 // First batch_size nodes are children of folder. 1563 // First batch_size nodes are children of folder.
1555 size_t i; 1564 size_t i;
1556 for (i = 0; i < batch_size; ++i) { 1565 for (i = 0; i < batch_size; ++i) {
1557 MakeNodeWithParent(sync_manager_.GetUserShare(), BOOKMARKS, 1566 MakeNodeWithParent(sync_manager_.GetUserShare(), BOOKMARKS, folder);
1558 base::StringPrintf("%"PRIuS"", i), folder);
1559 } 1567 }
1560 // Next batch_size nodes are a different type and on their own. 1568 // Next batch_size nodes are a different type and on their own.
1561 for (; i < 2*batch_size; ++i) { 1569 for (; i < 2*batch_size; ++i) {
1562 MakeNodeWithParent(sync_manager_.GetUserShare(), SESSIONS, 1570 MakeNode(sync_manager_.GetUserShare(), SESSIONS,
1563 base::StringPrintf("%"PRIuS"", i), 1571 base::StringPrintf("%"PRIuS"", i));
1564 GetIdForDataType(SESSIONS));
1565 } 1572 }
1566 // Last batch_size nodes are a third type that will not need encryption. 1573 // Last batch_size nodes are a third type that will not need encryption.
1567 for (; i < 3*batch_size; ++i) { 1574 for (; i < 3*batch_size; ++i) {
1568 MakeNodeWithParent(sync_manager_.GetUserShare(), THEMES, 1575 MakeNode(sync_manager_.GetUserShare(), THEMES,
1569 base::StringPrintf("%"PRIuS"", i), 1576 base::StringPrintf("%"PRIuS"", i));
1570 GetIdForDataType(THEMES));
1571 } 1577 }
1572 1578
1573 { 1579 {
1574 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 1580 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
1575 EXPECT_TRUE(GetEncryptedTypesWithTrans(&trans).Equals( 1581 EXPECT_TRUE(GetEncryptedTypesWithTrans(&trans).Equals(
1576 SyncEncryptionHandler::SensitiveTypes())); 1582 SyncEncryptionHandler::SensitiveTypes()));
1577 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( 1583 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest(
1578 trans.GetWrappedTrans(), 1584 trans.GetWrappedTrans(),
1579 BOOKMARKS, 1585 BOOKMARKS,
1580 false /* not encrypted */)); 1586 false /* not encrypted */));
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after
2056 TEST_F(SyncManagerTest, EncryptBookmarksWithLegacyData) { 2062 TEST_F(SyncManagerTest, EncryptBookmarksWithLegacyData) {
2057 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); 2063 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION));
2058 std::string title; 2064 std::string title;
2059 SyncAPINameToServerName("Google", &title); 2065 SyncAPINameToServerName("Google", &title);
2060 std::string url = "http://www.google.com"; 2066 std::string url = "http://www.google.com";
2061 std::string raw_title2 = ".."; // An invalid cosmo title. 2067 std::string raw_title2 = ".."; // An invalid cosmo title.
2062 std::string title2; 2068 std::string title2;
2063 SyncAPINameToServerName(raw_title2, &title2); 2069 SyncAPINameToServerName(raw_title2, &title2);
2064 std::string url2 = "http://www.bla.com"; 2070 std::string url2 = "http://www.bla.com";
2065 2071
2072 int64 parent = GetServerNodeForType(sync_manager_.GetUserShare(), BOOKMARKS);
2073
2066 // Create a bookmark using the legacy format. 2074 // Create a bookmark using the legacy format.
2067 int64 node_id1 = MakeNode(sync_manager_.GetUserShare(), 2075 int64 node_id1 = MakeBookmarkWithParent(sync_manager_.GetUserShare(),
2068 BOOKMARKS, 2076 parent, NULL);
2069 "testtag"); 2077 int64 node_id2 = MakeBookmarkWithParent(sync_manager_.GetUserShare(),
2070 int64 node_id2 = MakeNode(sync_manager_.GetUserShare(), 2078 parent, NULL);
2071 BOOKMARKS,
2072 "testtag2");
2073 { 2079 {
2074 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 2080 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
2075 WriteNode node(&trans); 2081 WriteNode node(&trans);
2076 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(node_id1)); 2082 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(node_id1));
2077 2083
2078 sync_pb::EntitySpecifics entity_specifics; 2084 sync_pb::EntitySpecifics entity_specifics;
2079 entity_specifics.mutable_bookmark()->set_url(url); 2085 entity_specifics.mutable_bookmark()->set_url(url);
2080 node.SetEntitySpecifics(entity_specifics); 2086 node.SetEntitySpecifics(entity_specifics);
2081 2087
2082 // Set the old style title. 2088 // Set the old style title.
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
2157 } 2163 }
2158 2164
2159 // Create a bookmark and set the title/url, then verify the data was properly 2165 // Create a bookmark and set the title/url, then verify the data was properly
2160 // set. This replicates the unique way bookmarks have of creating sync nodes. 2166 // set. This replicates the unique way bookmarks have of creating sync nodes.
2161 // See BookmarkChangeProcessor::PlaceSyncNode(..). 2167 // See BookmarkChangeProcessor::PlaceSyncNode(..).
2162 TEST_F(SyncManagerTest, CreateLocalBookmark) { 2168 TEST_F(SyncManagerTest, CreateLocalBookmark) {
2163 std::string title = "title"; 2169 std::string title = "title";
2164 std::string url = "url"; 2170 std::string url = "url";
2165 { 2171 {
2166 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 2172 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
2167 ReadNode root_node(&trans); 2173 ReadNode bookmark_root(&trans);
2168 root_node.InitByRootLookup(); 2174 ASSERT_EQ(BaseNode::INIT_OK,
2175 bookmark_root.InitByTagLookup(ModelTypeToRootTag(BOOKMARKS)));
2169 WriteNode node(&trans); 2176 WriteNode node(&trans);
2170 ASSERT_TRUE(node.InitByCreation(BOOKMARKS, root_node, NULL)); 2177 ASSERT_TRUE(node.InitBookmarkByCreation(bookmark_root, NULL));
2171 node.SetIsFolder(false); 2178 node.SetIsFolder(false);
2172 node.SetTitle(UTF8ToWide(title)); 2179 node.SetTitle(UTF8ToWide(title));
2173 2180
2174 sync_pb::BookmarkSpecifics bookmark_specifics(node.GetBookmarkSpecifics()); 2181 sync_pb::BookmarkSpecifics bookmark_specifics(node.GetBookmarkSpecifics());
2175 bookmark_specifics.set_url(url); 2182 bookmark_specifics.set_url(url);
2176 node.SetBookmarkSpecifics(bookmark_specifics); 2183 node.SetBookmarkSpecifics(bookmark_specifics);
2177 } 2184 }
2178 { 2185 {
2179 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 2186 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
2180 ReadNode root_node(&trans); 2187 ReadNode bookmark_root(&trans);
2181 root_node.InitByRootLookup(); 2188 ASSERT_EQ(BaseNode::INIT_OK,
2182 int64 child_id = root_node.GetFirstChildId(); 2189 bookmark_root.InitByTagLookup(ModelTypeToRootTag(BOOKMARKS)));
2190 int64 child_id = bookmark_root.GetFirstChildId();
2183 2191
2184 ReadNode node(&trans); 2192 ReadNode node(&trans);
2185 ASSERT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(child_id)); 2193 ASSERT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(child_id));
2186 EXPECT_FALSE(node.GetIsFolder()); 2194 EXPECT_FALSE(node.GetIsFolder());
2187 EXPECT_EQ(title, node.GetTitle()); 2195 EXPECT_EQ(title, node.GetTitle());
2188 EXPECT_EQ(url, node.GetBookmarkSpecifics().url()); 2196 EXPECT_EQ(url, node.GetBookmarkSpecifics().url());
2189 } 2197 }
2190 } 2198 }
2191 2199
2192 // Verifies WriteNode::UpdateEntryWithEncryption does not make unnecessary 2200 // Verifies WriteNode::UpdateEntryWithEncryption does not make unnecessary
2193 // changes. 2201 // changes.
2194 TEST_F(SyncManagerTest, UpdateEntryWithEncryption) { 2202 TEST_F(SyncManagerTest, UpdateEntryWithEncryption) {
2195 std::string client_tag = "title"; 2203 std::string client_tag = "title";
2196 sync_pb::EntitySpecifics entity_specifics; 2204 sync_pb::EntitySpecifics entity_specifics;
2197 entity_specifics.mutable_bookmark()->set_url("url"); 2205 entity_specifics.mutable_bookmark()->set_url("url");
2198 entity_specifics.mutable_bookmark()->set_title("title"); 2206 entity_specifics.mutable_bookmark()->set_title("title");
2199 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, 2207 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag,
2200 BaseNode::GenerateSyncableHash(BOOKMARKS, 2208 syncable::GenerateSyncableHash(BOOKMARKS,
2201 client_tag), 2209 client_tag),
2202 entity_specifics); 2210 entity_specifics);
2203 // New node shouldn't start off unsynced. 2211 // New node shouldn't start off unsynced.
2204 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); 2212 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag));
2205 // Manually change to the same data. Should not set is_unsynced. 2213 // Manually change to the same data. Should not set is_unsynced.
2206 { 2214 {
2207 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 2215 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
2208 WriteNode node(&trans); 2216 WriteNode node(&trans);
2209 EXPECT_EQ(BaseNode::INIT_OK, 2217 EXPECT_EQ(BaseNode::INIT_OK,
2210 node.InitByClientTagLookup(BOOKMARKS, client_tag)); 2218 node.InitByClientTagLookup(BOOKMARKS, client_tag));
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
2339 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 2347 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
2340 Cryptographer* cryptographer = trans.GetCryptographer(); 2348 Cryptographer* cryptographer = trans.GetCryptographer();
2341 sync_pb::PasswordSpecificsData data; 2349 sync_pb::PasswordSpecificsData data;
2342 data.set_password_value("secret"); 2350 data.set_password_value("secret");
2343 cryptographer->Encrypt( 2351 cryptographer->Encrypt(
2344 data, 2352 data,
2345 entity_specifics.mutable_password()-> 2353 entity_specifics.mutable_password()->
2346 mutable_encrypted()); 2354 mutable_encrypted());
2347 } 2355 }
2348 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, 2356 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag,
2349 BaseNode::GenerateSyncableHash(PASSWORDS, 2357 syncable::GenerateSyncableHash(PASSWORDS,
2350 client_tag), 2358 client_tag),
2351 entity_specifics); 2359 entity_specifics);
2352 // New node shouldn't start off unsynced. 2360 // New node shouldn't start off unsynced.
2353 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); 2361 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag));
2354 2362
2355 // Manually change to the same data via SetEntitySpecifics. Should not set 2363 // Manually change to the same data via SetEntitySpecifics. Should not set
2356 // is_unsynced. 2364 // is_unsynced.
2357 { 2365 {
2358 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 2366 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
2359 WriteNode node(&trans); 2367 WriteNode node(&trans);
(...skipping 14 matching lines...) Expand all
2374 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 2382 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
2375 Cryptographer* cryptographer = trans.GetCryptographer(); 2383 Cryptographer* cryptographer = trans.GetCryptographer();
2376 sync_pb::PasswordSpecificsData data; 2384 sync_pb::PasswordSpecificsData data;
2377 data.set_password_value("secret"); 2385 data.set_password_value("secret");
2378 cryptographer->Encrypt( 2386 cryptographer->Encrypt(
2379 data, 2387 data,
2380 entity_specifics.mutable_password()-> 2388 entity_specifics.mutable_password()->
2381 mutable_encrypted()); 2389 mutable_encrypted());
2382 } 2390 }
2383 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, 2391 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag,
2384 BaseNode::GenerateSyncableHash(PASSWORDS, 2392 syncable::GenerateSyncableHash(PASSWORDS,
2385 client_tag), 2393 client_tag),
2386 entity_specifics); 2394 entity_specifics);
2387 // New node shouldn't start off unsynced. 2395 // New node shouldn't start off unsynced.
2388 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); 2396 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag));
2389 2397
2390 // Manually change to the same data via SetPasswordSpecifics. Should not set 2398 // Manually change to the same data via SetPasswordSpecifics. Should not set
2391 // is_unsynced. 2399 // is_unsynced.
2392 { 2400 {
2393 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 2401 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
2394 WriteNode node(&trans); 2402 WriteNode node(&trans);
(...skipping 30 matching lines...) Expand all
2425 { 2433 {
2426 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 2434 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
2427 Cryptographer* cryptographer = trans.GetCryptographer(); 2435 Cryptographer* cryptographer = trans.GetCryptographer();
2428 sync_pb::PasswordSpecificsData data; 2436 sync_pb::PasswordSpecificsData data;
2429 data.set_password_value("secret"); 2437 data.set_password_value("secret");
2430 cryptographer->Encrypt( 2438 cryptographer->Encrypt(
2431 data, 2439 data,
2432 entity_specifics.mutable_password()->mutable_encrypted()); 2440 entity_specifics.mutable_password()->mutable_encrypted());
2433 } 2441 }
2434 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, 2442 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag,
2435 BaseNode::GenerateSyncableHash(PASSWORDS, 2443 syncable::GenerateSyncableHash(PASSWORDS,
2436 client_tag), 2444 client_tag),
2437 entity_specifics); 2445 entity_specifics);
2438 // New node shouldn't start off unsynced. 2446 // New node shouldn't start off unsynced.
2439 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); 2447 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag));
2440 2448
2441 // Set a new passphrase. Should set is_unsynced. 2449 // Set a new passphrase. Should set is_unsynced.
2442 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); 2450 testing::Mock::VerifyAndClearExpectations(&encryption_observer_);
2443 EXPECT_CALL(encryption_observer_, 2451 EXPECT_CALL(encryption_observer_,
2444 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN)); 2452 OnBootstrapTokenUpdated(_, PASSPHRASE_BOOTSTRAP_TOKEN));
2445 EXPECT_CALL(encryption_observer_, OnPassphraseAccepted()); 2453 EXPECT_CALL(encryption_observer_, OnPassphraseAccepted());
(...skipping 18 matching lines...) Expand all
2464 { 2472 {
2465 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 2473 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
2466 Cryptographer* cryptographer = trans.GetCryptographer(); 2474 Cryptographer* cryptographer = trans.GetCryptographer();
2467 sync_pb::PasswordSpecificsData data; 2475 sync_pb::PasswordSpecificsData data;
2468 data.set_password_value("secret"); 2476 data.set_password_value("secret");
2469 cryptographer->Encrypt( 2477 cryptographer->Encrypt(
2470 data, 2478 data,
2471 entity_specifics.mutable_password()->mutable_encrypted()); 2479 entity_specifics.mutable_password()->mutable_encrypted());
2472 } 2480 }
2473 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag, 2481 MakeServerNode(sync_manager_.GetUserShare(), PASSWORDS, client_tag,
2474 BaseNode::GenerateSyncableHash(PASSWORDS, 2482 syncable::GenerateSyncableHash(PASSWORDS,
2475 client_tag), 2483 client_tag),
2476 entity_specifics); 2484 entity_specifics);
2477 // New node shouldn't start off unsynced. 2485 // New node shouldn't start off unsynced.
2478 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); 2486 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag));
2479 2487
2480 // Force a re-encrypt everything. Should not set is_unsynced. 2488 // Force a re-encrypt everything. Should not set is_unsynced.
2481 testing::Mock::VerifyAndClearExpectations(&encryption_observer_); 2489 testing::Mock::VerifyAndClearExpectations(&encryption_observer_);
2482 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); 2490 EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
2483 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_)); 2491 EXPECT_CALL(encryption_observer_, OnCryptographerStateChanged(_));
2484 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false)); 2492 EXPECT_CALL(encryption_observer_, OnEncryptedTypesChanged(_, false));
2485 sync_manager_.GetEncryptionHandler()->Init(); 2493 sync_manager_.GetEncryptionHandler()->Init();
2486 PumpLoop(); 2494 PumpLoop();
2487 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag)); 2495 EXPECT_FALSE(ResetUnsyncedEntry(PASSWORDS, client_tag));
2488 } 2496 }
2489 2497
2490 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for bookmarks 2498 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for bookmarks
2491 // when we write the same data, but does set it when we write new data. 2499 // when we write the same data, but does set it when we write new data.
2492 TEST_F(SyncManagerTest, SetBookmarkTitle) { 2500 TEST_F(SyncManagerTest, SetBookmarkTitle) {
2493 std::string client_tag = "title"; 2501 std::string client_tag = "title";
2494 sync_pb::EntitySpecifics entity_specifics; 2502 sync_pb::EntitySpecifics entity_specifics;
2495 entity_specifics.mutable_bookmark()->set_url("url"); 2503 entity_specifics.mutable_bookmark()->set_url("url");
2496 entity_specifics.mutable_bookmark()->set_title("title"); 2504 entity_specifics.mutable_bookmark()->set_title("title");
2497 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, 2505 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag,
2498 BaseNode::GenerateSyncableHash(BOOKMARKS, 2506 syncable::GenerateSyncableHash(BOOKMARKS,
2499 client_tag), 2507 client_tag),
2500 entity_specifics); 2508 entity_specifics);
2501 // New node shouldn't start off unsynced. 2509 // New node shouldn't start off unsynced.
2502 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); 2510 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag));
2503 2511
2504 // Manually change to the same title. Should not set is_unsynced. 2512 // Manually change to the same title. Should not set is_unsynced.
2505 { 2513 {
2506 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 2514 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
2507 WriteNode node(&trans); 2515 WriteNode node(&trans);
2508 EXPECT_EQ(BaseNode::INIT_OK, 2516 EXPECT_EQ(BaseNode::INIT_OK,
(...skipping 15 matching lines...) Expand all
2524 2532
2525 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for encrypted 2533 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for encrypted
2526 // bookmarks when we write the same data, but does set it when we write new 2534 // bookmarks when we write the same data, but does set it when we write new
2527 // data. 2535 // data.
2528 TEST_F(SyncManagerTest, SetBookmarkTitleWithEncryption) { 2536 TEST_F(SyncManagerTest, SetBookmarkTitleWithEncryption) {
2529 std::string client_tag = "title"; 2537 std::string client_tag = "title";
2530 sync_pb::EntitySpecifics entity_specifics; 2538 sync_pb::EntitySpecifics entity_specifics;
2531 entity_specifics.mutable_bookmark()->set_url("url"); 2539 entity_specifics.mutable_bookmark()->set_url("url");
2532 entity_specifics.mutable_bookmark()->set_title("title"); 2540 entity_specifics.mutable_bookmark()->set_title("title");
2533 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, 2541 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag,
2534 BaseNode::GenerateSyncableHash(BOOKMARKS, 2542 syncable::GenerateSyncableHash(BOOKMARKS,
2535 client_tag), 2543 client_tag),
2536 entity_specifics); 2544 entity_specifics);
2537 // New node shouldn't start off unsynced. 2545 // New node shouldn't start off unsynced.
2538 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag)); 2546 EXPECT_FALSE(ResetUnsyncedEntry(BOOKMARKS, client_tag));
2539 2547
2540 // Encrypt the datatatype, should set is_unsynced. 2548 // Encrypt the datatatype, should set is_unsynced.
2541 EXPECT_CALL(encryption_observer_, 2549 EXPECT_CALL(encryption_observer_,
2542 OnEncryptedTypesChanged( 2550 OnEncryptedTypesChanged(
2543 HasModelTypes(EncryptableUserTypes()), true)); 2551 HasModelTypes(EncryptableUserTypes()), true));
2544 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); 2552 EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2583 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for non-bookmarks 2591 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for non-bookmarks
2584 // when we write the same data, but does set it when we write new data. 2592 // when we write the same data, but does set it when we write new data.
2585 TEST_F(SyncManagerTest, SetNonBookmarkTitle) { 2593 TEST_F(SyncManagerTest, SetNonBookmarkTitle) {
2586 std::string client_tag = "title"; 2594 std::string client_tag = "title";
2587 sync_pb::EntitySpecifics entity_specifics; 2595 sync_pb::EntitySpecifics entity_specifics;
2588 entity_specifics.mutable_preference()->set_name("name"); 2596 entity_specifics.mutable_preference()->set_name("name");
2589 entity_specifics.mutable_preference()->set_value("value"); 2597 entity_specifics.mutable_preference()->set_value("value");
2590 MakeServerNode(sync_manager_.GetUserShare(), 2598 MakeServerNode(sync_manager_.GetUserShare(),
2591 PREFERENCES, 2599 PREFERENCES,
2592 client_tag, 2600 client_tag,
2593 BaseNode::GenerateSyncableHash(PREFERENCES, 2601 syncable::GenerateSyncableHash(PREFERENCES,
2594 client_tag), 2602 client_tag),
2595 entity_specifics); 2603 entity_specifics);
2596 // New node shouldn't start off unsynced. 2604 // New node shouldn't start off unsynced.
2597 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag)); 2605 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag));
2598 2606
2599 // Manually change to the same title. Should not set is_unsynced. 2607 // Manually change to the same title. Should not set is_unsynced.
2600 { 2608 {
2601 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 2609 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
2602 WriteNode node(&trans); 2610 WriteNode node(&trans);
2603 EXPECT_EQ(BaseNode::INIT_OK, 2611 EXPECT_EQ(BaseNode::INIT_OK,
(...skipping 17 matching lines...) Expand all
2621 // non-bookmarks when we write the same data or when we write new data 2629 // non-bookmarks when we write the same data or when we write new data
2622 // data (should remained kEncryptedString). 2630 // data (should remained kEncryptedString).
2623 TEST_F(SyncManagerTest, SetNonBookmarkTitleWithEncryption) { 2631 TEST_F(SyncManagerTest, SetNonBookmarkTitleWithEncryption) {
2624 std::string client_tag = "title"; 2632 std::string client_tag = "title";
2625 sync_pb::EntitySpecifics entity_specifics; 2633 sync_pb::EntitySpecifics entity_specifics;
2626 entity_specifics.mutable_preference()->set_name("name"); 2634 entity_specifics.mutable_preference()->set_name("name");
2627 entity_specifics.mutable_preference()->set_value("value"); 2635 entity_specifics.mutable_preference()->set_value("value");
2628 MakeServerNode(sync_manager_.GetUserShare(), 2636 MakeServerNode(sync_manager_.GetUserShare(),
2629 PREFERENCES, 2637 PREFERENCES,
2630 client_tag, 2638 client_tag,
2631 BaseNode::GenerateSyncableHash(PREFERENCES, 2639 syncable::GenerateSyncableHash(PREFERENCES,
2632 client_tag), 2640 client_tag),
2633 entity_specifics); 2641 entity_specifics);
2634 // New node shouldn't start off unsynced. 2642 // New node shouldn't start off unsynced.
2635 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag)); 2643 EXPECT_FALSE(ResetUnsyncedEntry(PREFERENCES, client_tag));
2636 2644
2637 // Encrypt the datatatype, should set is_unsynced. 2645 // Encrypt the datatatype, should set is_unsynced.
2638 EXPECT_CALL(encryption_observer_, 2646 EXPECT_CALL(encryption_observer_,
2639 OnEncryptedTypesChanged( 2647 OnEncryptedTypesChanged(
2640 HasModelTypes(EncryptableUserTypes()), true)); 2648 HasModelTypes(EncryptableUserTypes()), true));
2641 EXPECT_CALL(encryption_observer_, OnEncryptionComplete()); 2649 EXPECT_CALL(encryption_observer_, OnEncryptionComplete());
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
2692 Cryptographer* crypto = trans.GetCryptographer(); 2700 Cryptographer* crypto = trans.GetCryptographer();
2693 sync_pb::EntitySpecifics bm_specifics; 2701 sync_pb::EntitySpecifics bm_specifics;
2694 bm_specifics.mutable_bookmark()->set_title("title"); 2702 bm_specifics.mutable_bookmark()->set_title("title");
2695 bm_specifics.mutable_bookmark()->set_url("url"); 2703 bm_specifics.mutable_bookmark()->set_url("url");
2696 sync_pb::EncryptedData encrypted; 2704 sync_pb::EncryptedData encrypted;
2697 crypto->Encrypt(bm_specifics, &encrypted); 2705 crypto->Encrypt(bm_specifics, &encrypted);
2698 entity_specifics.mutable_encrypted()->CopyFrom(encrypted); 2706 entity_specifics.mutable_encrypted()->CopyFrom(encrypted);
2699 AddDefaultFieldValue(BOOKMARKS, &entity_specifics); 2707 AddDefaultFieldValue(BOOKMARKS, &entity_specifics);
2700 } 2708 }
2701 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, 2709 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag,
2702 BaseNode::GenerateSyncableHash(BOOKMARKS, 2710 syncable::GenerateSyncableHash(BOOKMARKS,
2703 client_tag), 2711 client_tag),
2704 entity_specifics); 2712 entity_specifics);
2705 2713
2706 { 2714 {
2707 // Verify the data. 2715 // Verify the data.
2708 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); 2716 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare());
2709 ReadNode node(&trans); 2717 ReadNode node(&trans);
2710 EXPECT_EQ(BaseNode::INIT_OK, 2718 EXPECT_EQ(BaseNode::INIT_OK,
2711 node.InitByClientTagLookup(BOOKMARKS, client_tag)); 2719 node.InitByClientTagLookup(BOOKMARKS, client_tag));
2712 EXPECT_EQ(title, node.GetTitle()); 2720 EXPECT_EQ(title, node.GetTitle());
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
2757 GetTransactionVersion(i->first)); 2765 GetTransactionVersion(i->first));
2758 } 2766 }
2759 } 2767 }
2760 2768
2761 // Create bookmark node to increment transaction version of bookmark model. 2769 // Create bookmark node to increment transaction version of bookmark model.
2762 std::string client_tag = "title"; 2770 std::string client_tag = "title";
2763 sync_pb::EntitySpecifics entity_specifics; 2771 sync_pb::EntitySpecifics entity_specifics;
2764 entity_specifics.mutable_bookmark()->set_url("url"); 2772 entity_specifics.mutable_bookmark()->set_url("url");
2765 entity_specifics.mutable_bookmark()->set_title("title"); 2773 entity_specifics.mutable_bookmark()->set_title("title");
2766 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag, 2774 MakeServerNode(sync_manager_.GetUserShare(), BOOKMARKS, client_tag,
2767 BaseNode::GenerateSyncableHash(BOOKMARKS, 2775 syncable::GenerateSyncableHash(BOOKMARKS,
2768 client_tag), 2776 client_tag),
2769 entity_specifics); 2777 entity_specifics);
2770 2778
2771 { 2779 {
2772 ReadTransaction read_trans(FROM_HERE, sync_manager_.GetUserShare()); 2780 ReadTransaction read_trans(FROM_HERE, sync_manager_.GetUserShare());
2773 for (ModelSafeRoutingInfo::iterator i = routing_info.begin(); 2781 for (ModelSafeRoutingInfo::iterator i = routing_info.begin();
2774 i != routing_info.end(); ++i) { 2782 i != routing_info.end(); ++i) {
2775 EXPECT_EQ(i->first == BOOKMARKS ? 2 : 1, 2783 EXPECT_EQ(i->first == BOOKMARKS ? 2 : 1,
2776 sync_manager_.GetUserShare()->directory-> 2784 sync_manager_.GetUserShare()->directory->
2777 GetTransactionVersion(i->first)); 2785 GetTransactionVersion(i->first));
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after
3072 Difference(ModelTypeSet::All(), disabled_types); 3080 Difference(ModelTypeSet::All(), disabled_types);
3073 3081
3074 // Verify only the non-disabled types remain after cleanup. 3082 // Verify only the non-disabled types remain after cleanup.
3075 sync_manager_.PurgeDisabledTypes(enabled_types, new_enabled_types); 3083 sync_manager_.PurgeDisabledTypes(enabled_types, new_enabled_types);
3076 EXPECT_TRUE(new_enabled_types.Equals(sync_manager_.InitialSyncEndedTypes())); 3084 EXPECT_TRUE(new_enabled_types.Equals(sync_manager_.InitialSyncEndedTypes()));
3077 EXPECT_TRUE(disabled_types.Equals( 3085 EXPECT_TRUE(disabled_types.Equals(
3078 sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All()))); 3086 sync_manager_.GetTypesWithEmptyProgressMarkerToken(ModelTypeSet::All())));
3079 } 3087 }
3080 3088
3081 } // namespace 3089 } // namespace
OLDNEW
« no previous file with comments | « sync/internal_api/sync_manager_impl.cc ('k') | sync/internal_api/test/test_entry_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698