OLD | NEW |
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 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
137 } | 137 } |
138 | 138 |
139 // Makes a non-folder child of a non-root node. Returns the id of the | 139 // Makes a non-folder child of a non-root node. Returns the id of the |
140 // newly-created node. | 140 // newly-created node. |
141 int64 MakeNodeWithParent(UserShare* share, | 141 int64 MakeNodeWithParent(UserShare* share, |
142 ModelType model_type, | 142 ModelType model_type, |
143 const std::string& client_tag, | 143 const std::string& client_tag, |
144 int64 parent_id) { | 144 int64 parent_id) { |
145 WriteTransaction trans(FROM_HERE, share); | 145 WriteTransaction trans(FROM_HERE, share); |
146 ReadNode parent_node(&trans); | 146 ReadNode parent_node(&trans); |
147 EXPECT_TRUE(parent_node.InitByIdLookup(parent_id)); | 147 EXPECT_EQ(BaseNode::INIT_OK, parent_node.InitByIdLookup(parent_id)); |
148 WriteNode node(&trans); | 148 WriteNode node(&trans); |
149 EXPECT_TRUE(node.InitUniqueByCreation(model_type, parent_node, client_tag)); | 149 EXPECT_TRUE(node.InitUniqueByCreation(model_type, parent_node, client_tag)); |
150 node.SetIsFolder(false); | 150 node.SetIsFolder(false); |
151 return node.GetId(); | 151 return node.GetId(); |
152 } | 152 } |
153 | 153 |
154 // Makes a folder child of a non-root node. Returns the id of the | 154 // Makes a folder child of a non-root node. Returns the id of the |
155 // newly-created node. | 155 // newly-created node. |
156 int64 MakeFolderWithParent(UserShare* share, | 156 int64 MakeFolderWithParent(UserShare* share, |
157 ModelType model_type, | 157 ModelType model_type, |
158 int64 parent_id, | 158 int64 parent_id, |
159 BaseNode* predecessor) { | 159 BaseNode* predecessor) { |
160 WriteTransaction trans(FROM_HERE, share); | 160 WriteTransaction trans(FROM_HERE, share); |
161 ReadNode parent_node(&trans); | 161 ReadNode parent_node(&trans); |
162 EXPECT_TRUE(parent_node.InitByIdLookup(parent_id)); | 162 EXPECT_EQ(BaseNode::INIT_OK, parent_node.InitByIdLookup(parent_id)); |
163 WriteNode node(&trans); | 163 WriteNode node(&trans); |
164 EXPECT_TRUE(node.InitByCreation(model_type, parent_node, predecessor)); | 164 EXPECT_TRUE(node.InitByCreation(model_type, parent_node, predecessor)); |
165 node.SetIsFolder(true); | 165 node.SetIsFolder(true); |
166 return node.GetId(); | 166 return node.GetId(); |
167 } | 167 } |
168 | 168 |
169 // Creates the "synced" root node for a particular datatype. We use the syncable | 169 // Creates the "synced" root node for a particular datatype. We use the syncable |
170 // methods here so that the syncer treats these nodes as if they were already | 170 // methods here so that the syncer treats these nodes as if they were already |
171 // received from the server. | 171 // received from the server. |
172 int64 MakeServerNodeForType(UserShare* share, | 172 int64 MakeServerNodeForType(UserShare* share, |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
249 } | 249 } |
250 { | 250 { |
251 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 251 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
252 EXPECT_TRUE(trans.GetWrappedTrans() != NULL); | 252 EXPECT_TRUE(trans.GetWrappedTrans() != NULL); |
253 } | 253 } |
254 { | 254 { |
255 // No entries but root should exist | 255 // No entries but root should exist |
256 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 256 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
257 ReadNode node(&trans); | 257 ReadNode node(&trans); |
258 // Metahandle 1 can be root, sanity check 2 | 258 // Metahandle 1 can be root, sanity check 2 |
259 EXPECT_FALSE(node.InitByIdLookup(2)); | 259 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD, node.InitByIdLookup(2)); |
260 } | 260 } |
261 } | 261 } |
262 | 262 |
263 TEST_F(SyncApiTest, BasicTagWrite) { | 263 TEST_F(SyncApiTest, BasicTagWrite) { |
264 { | 264 { |
265 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 265 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
266 ReadNode root_node(&trans); | 266 ReadNode root_node(&trans); |
267 root_node.InitByRootLookup(); | 267 root_node.InitByRootLookup(); |
268 EXPECT_EQ(root_node.GetFirstChildId(), 0); | 268 EXPECT_EQ(root_node.GetFirstChildId(), 0); |
269 } | 269 } |
270 | 270 |
271 ignore_result(MakeNode(test_user_share_.user_share(), | 271 ignore_result(MakeNode(test_user_share_.user_share(), |
272 syncable::BOOKMARKS, "testtag")); | 272 syncable::BOOKMARKS, "testtag")); |
273 | 273 |
274 { | 274 { |
275 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 275 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
276 ReadNode node(&trans); | 276 ReadNode node(&trans); |
277 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, | 277 EXPECT_EQ(BaseNode::INIT_OK, |
278 "testtag")); | 278 node.InitByClientTagLookup(syncable::BOOKMARKS, "testtag")); |
279 | 279 |
280 ReadNode root_node(&trans); | 280 ReadNode root_node(&trans); |
281 root_node.InitByRootLookup(); | 281 root_node.InitByRootLookup(); |
282 EXPECT_NE(node.GetId(), 0); | 282 EXPECT_NE(node.GetId(), 0); |
283 EXPECT_EQ(node.GetId(), root_node.GetFirstChildId()); | 283 EXPECT_EQ(node.GetId(), root_node.GetFirstChildId()); |
284 } | 284 } |
285 } | 285 } |
286 | 286 |
287 TEST_F(SyncApiTest, GenerateSyncableHash) { | 287 TEST_F(SyncApiTest, GenerateSyncableHash) { |
288 EXPECT_EQ("OyaXV5mEzrPS4wbogmtKvRfekAI=", | 288 EXPECT_EQ("OyaXV5mEzrPS4wbogmtKvRfekAI=", |
(...skipping 23 matching lines...) Expand all Loading... |
312 syncable::BOOKMARKS, "collideme")); | 312 syncable::BOOKMARKS, "collideme")); |
313 ignore_result(MakeNode(test_user_share_.user_share(), | 313 ignore_result(MakeNode(test_user_share_.user_share(), |
314 syncable::PREFERENCES, "collideme")); | 314 syncable::PREFERENCES, "collideme")); |
315 ignore_result(MakeNode(test_user_share_.user_share(), | 315 ignore_result(MakeNode(test_user_share_.user_share(), |
316 syncable::AUTOFILL, "collideme")); | 316 syncable::AUTOFILL, "collideme")); |
317 | 317 |
318 { | 318 { |
319 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 319 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
320 | 320 |
321 ReadNode bookmarknode(&trans); | 321 ReadNode bookmarknode(&trans); |
322 EXPECT_TRUE(bookmarknode.InitByClientTagLookup(syncable::BOOKMARKS, | 322 EXPECT_EQ(BaseNode::INIT_OK, |
323 "collideme")); | 323 bookmarknode.InitByClientTagLookup(syncable::BOOKMARKS, |
| 324 "collideme")); |
324 | 325 |
325 ReadNode prefnode(&trans); | 326 ReadNode prefnode(&trans); |
326 EXPECT_TRUE(prefnode.InitByClientTagLookup(syncable::PREFERENCES, | 327 EXPECT_EQ(BaseNode::INIT_OK, |
327 "collideme")); | 328 prefnode.InitByClientTagLookup(syncable::PREFERENCES, |
| 329 "collideme")); |
328 | 330 |
329 ReadNode autofillnode(&trans); | 331 ReadNode autofillnode(&trans); |
330 EXPECT_TRUE(autofillnode.InitByClientTagLookup(syncable::AUTOFILL, | 332 EXPECT_EQ(BaseNode::INIT_OK, |
331 "collideme")); | 333 autofillnode.InitByClientTagLookup(syncable::AUTOFILL, |
| 334 "collideme")); |
332 | 335 |
333 EXPECT_NE(bookmarknode.GetId(), prefnode.GetId()); | 336 EXPECT_NE(bookmarknode.GetId(), prefnode.GetId()); |
334 EXPECT_NE(autofillnode.GetId(), prefnode.GetId()); | 337 EXPECT_NE(autofillnode.GetId(), prefnode.GetId()); |
335 EXPECT_NE(bookmarknode.GetId(), autofillnode.GetId()); | 338 EXPECT_NE(bookmarknode.GetId(), autofillnode.GetId()); |
336 } | 339 } |
337 } | 340 } |
338 | 341 |
339 TEST_F(SyncApiTest, ReadMissingTagsFails) { | 342 TEST_F(SyncApiTest, ReadMissingTagsFails) { |
340 { | 343 { |
341 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 344 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
342 ReadNode node(&trans); | 345 ReadNode node(&trans); |
343 EXPECT_FALSE(node.InitByClientTagLookup(syncable::BOOKMARKS, | 346 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD, |
344 "testtag")); | 347 node.InitByClientTagLookup(syncable::BOOKMARKS, |
| 348 "testtag")); |
345 } | 349 } |
346 { | 350 { |
347 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 351 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
348 WriteNode node(&trans); | 352 WriteNode node(&trans); |
349 EXPECT_FALSE(node.InitByClientTagLookup(syncable::BOOKMARKS, | 353 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_NOT_GOOD, |
350 "testtag")); | 354 node.InitByClientTagLookup(syncable::BOOKMARKS, |
| 355 "testtag")); |
351 } | 356 } |
352 } | 357 } |
353 | 358 |
354 // TODO(chron): Hook this all up to the server and write full integration tests | 359 // TODO(chron): Hook this all up to the server and write full integration tests |
355 // for update->undelete behavior. | 360 // for update->undelete behavior. |
356 TEST_F(SyncApiTest, TestDeleteBehavior) { | 361 TEST_F(SyncApiTest, TestDeleteBehavior) { |
357 int64 node_id; | 362 int64 node_id; |
358 int64 folder_id; | 363 int64 folder_id; |
359 std::string test_title("test1"); | 364 std::string test_title("test1"); |
360 | 365 |
(...skipping 14 matching lines...) Expand all Loading... |
375 wnode.SetIsFolder(false); | 380 wnode.SetIsFolder(false); |
376 wnode.SetTitle(UTF8ToWide(test_title)); | 381 wnode.SetTitle(UTF8ToWide(test_title)); |
377 | 382 |
378 node_id = wnode.GetId(); | 383 node_id = wnode.GetId(); |
379 } | 384 } |
380 | 385 |
381 // Ensure we can delete something with a tag. | 386 // Ensure we can delete something with a tag. |
382 { | 387 { |
383 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 388 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
384 WriteNode wnode(&trans); | 389 WriteNode wnode(&trans); |
385 EXPECT_TRUE(wnode.InitByClientTagLookup(syncable::BOOKMARKS, | 390 EXPECT_EQ(BaseNode::INIT_OK, |
386 "testtag")); | 391 wnode.InitByClientTagLookup(syncable::BOOKMARKS, |
| 392 "testtag")); |
387 EXPECT_FALSE(wnode.GetIsFolder()); | 393 EXPECT_FALSE(wnode.GetIsFolder()); |
388 EXPECT_EQ(wnode.GetTitle(), test_title); | 394 EXPECT_EQ(wnode.GetTitle(), test_title); |
389 | 395 |
390 wnode.Remove(); | 396 wnode.Remove(); |
391 } | 397 } |
392 | 398 |
393 // Lookup of a node which was deleted should return failure, | 399 // Lookup of a node which was deleted should return failure, |
394 // but have found some data about the node. | 400 // but have found some data about the node. |
395 { | 401 { |
396 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 402 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
397 ReadNode node(&trans); | 403 ReadNode node(&trans); |
398 EXPECT_FALSE(node.InitByClientTagLookup(syncable::BOOKMARKS, | 404 EXPECT_EQ(BaseNode::INIT_FAILED_ENTRY_IS_DEL, |
399 "testtag")); | 405 node.InitByClientTagLookup(syncable::BOOKMARKS, |
| 406 "testtag")); |
400 // Note that for proper function of this API this doesn't need to be | 407 // Note that for proper function of this API this doesn't need to be |
401 // filled, we're checking just to make sure the DB worked in this test. | 408 // filled, we're checking just to make sure the DB worked in this test. |
402 EXPECT_EQ(node.GetTitle(), test_title); | 409 EXPECT_EQ(node.GetTitle(), test_title); |
403 } | 410 } |
404 | 411 |
405 { | 412 { |
406 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 413 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
407 ReadNode folder_node(&trans); | 414 ReadNode folder_node(&trans); |
408 EXPECT_TRUE(folder_node.InitByIdLookup(folder_id)); | 415 EXPECT_EQ(BaseNode::INIT_OK, folder_node.InitByIdLookup(folder_id)); |
409 | 416 |
410 WriteNode wnode(&trans); | 417 WriteNode wnode(&trans); |
411 // This will undelete the tag. | 418 // This will undelete the tag. |
412 EXPECT_TRUE(wnode.InitUniqueByCreation(syncable::BOOKMARKS, | 419 EXPECT_TRUE(wnode.InitUniqueByCreation(syncable::BOOKMARKS, |
413 folder_node, "testtag")); | 420 folder_node, "testtag")); |
414 EXPECT_EQ(wnode.GetIsFolder(), false); | 421 EXPECT_EQ(wnode.GetIsFolder(), false); |
415 EXPECT_EQ(wnode.GetParentId(), folder_node.GetId()); | 422 EXPECT_EQ(wnode.GetParentId(), folder_node.GetId()); |
416 EXPECT_EQ(wnode.GetId(), node_id); | 423 EXPECT_EQ(wnode.GetId(), node_id); |
417 EXPECT_NE(wnode.GetTitle(), test_title); // Title should be cleared | 424 EXPECT_NE(wnode.GetTitle(), test_title); // Title should be cleared |
418 wnode.SetTitle(UTF8ToWide(test_title)); | 425 wnode.SetTitle(UTF8ToWide(test_title)); |
419 } | 426 } |
420 | 427 |
421 // Now look up should work. | 428 // Now look up should work. |
422 { | 429 { |
423 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 430 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
424 ReadNode node(&trans); | 431 ReadNode node(&trans); |
425 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, | 432 EXPECT_EQ(BaseNode::INIT_OK, |
426 "testtag")); | 433 node.InitByClientTagLookup(syncable::BOOKMARKS, |
| 434 "testtag")); |
427 EXPECT_EQ(node.GetTitle(), test_title); | 435 EXPECT_EQ(node.GetTitle(), test_title); |
428 EXPECT_EQ(node.GetModelType(), syncable::BOOKMARKS); | 436 EXPECT_EQ(node.GetModelType(), syncable::BOOKMARKS); |
429 } | 437 } |
430 } | 438 } |
431 | 439 |
432 TEST_F(SyncApiTest, WriteAndReadPassword) { | 440 TEST_F(SyncApiTest, WriteAndReadPassword) { |
433 KeyParams params = {"localhost", "username", "passphrase"}; | 441 KeyParams params = {"localhost", "username", "passphrase"}; |
434 { | 442 { |
435 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 443 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
436 trans.GetCryptographer()->AddKey(params); | 444 trans.GetCryptographer()->AddKey(params); |
437 } | 445 } |
438 { | 446 { |
439 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 447 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
440 ReadNode root_node(&trans); | 448 ReadNode root_node(&trans); |
441 root_node.InitByRootLookup(); | 449 root_node.InitByRootLookup(); |
442 | 450 |
443 WriteNode password_node(&trans); | 451 WriteNode password_node(&trans); |
444 EXPECT_TRUE(password_node.InitUniqueByCreation(syncable::PASSWORDS, | 452 EXPECT_TRUE(password_node.InitUniqueByCreation(syncable::PASSWORDS, |
445 root_node, "foo")); | 453 root_node, "foo")); |
446 sync_pb::PasswordSpecificsData data; | 454 sync_pb::PasswordSpecificsData data; |
447 data.set_password_value("secret"); | 455 data.set_password_value("secret"); |
448 password_node.SetPasswordSpecifics(data); | 456 password_node.SetPasswordSpecifics(data); |
449 } | 457 } |
450 { | 458 { |
451 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 459 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
452 ReadNode root_node(&trans); | 460 ReadNode root_node(&trans); |
453 root_node.InitByRootLookup(); | 461 root_node.InitByRootLookup(); |
454 | 462 |
455 ReadNode password_node(&trans); | 463 ReadNode password_node(&trans); |
456 EXPECT_TRUE(password_node.InitByClientTagLookup(syncable::PASSWORDS, | 464 EXPECT_EQ(BaseNode::INIT_OK, |
457 "foo")); | 465 password_node.InitByClientTagLookup(syncable::PASSWORDS, |
| 466 "foo")); |
458 const sync_pb::PasswordSpecificsData& data = | 467 const sync_pb::PasswordSpecificsData& data = |
459 password_node.GetPasswordSpecifics(); | 468 password_node.GetPasswordSpecifics(); |
460 EXPECT_EQ("secret", data.password_value()); | 469 EXPECT_EQ("secret", data.password_value()); |
461 } | 470 } |
462 } | 471 } |
463 | 472 |
464 TEST_F(SyncApiTest, WriteEncryptedTitle) { | 473 TEST_F(SyncApiTest, WriteEncryptedTitle) { |
465 KeyParams params = {"localhost", "username", "passphrase"}; | 474 KeyParams params = {"localhost", "username", "passphrase"}; |
466 { | 475 { |
467 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 476 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
(...skipping 14 matching lines...) Expand all Loading... |
482 EXPECT_TRUE(pref_node.InitUniqueByCreation(syncable::PREFERENCES, | 491 EXPECT_TRUE(pref_node.InitUniqueByCreation(syncable::PREFERENCES, |
483 root_node, "bar")); | 492 root_node, "bar")); |
484 pref_node.SetTitle(UTF8ToWide("bar")); | 493 pref_node.SetTitle(UTF8ToWide("bar")); |
485 } | 494 } |
486 { | 495 { |
487 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); | 496 ReadTransaction trans(FROM_HERE, test_user_share_.user_share()); |
488 ReadNode root_node(&trans); | 497 ReadNode root_node(&trans); |
489 root_node.InitByRootLookup(); | 498 root_node.InitByRootLookup(); |
490 | 499 |
491 ReadNode bookmark_node(&trans); | 500 ReadNode bookmark_node(&trans); |
492 EXPECT_TRUE(bookmark_node.InitByClientTagLookup(syncable::BOOKMARKS, | 501 EXPECT_EQ(BaseNode::INIT_OK, |
493 "foo")); | 502 bookmark_node.InitByClientTagLookup(syncable::BOOKMARKS, |
| 503 "foo")); |
494 EXPECT_EQ("foo", bookmark_node.GetTitle()); | 504 EXPECT_EQ("foo", bookmark_node.GetTitle()); |
495 EXPECT_EQ(kEncryptedString, | 505 EXPECT_EQ(kEncryptedString, |
496 bookmark_node.GetEntry()->Get(syncable::NON_UNIQUE_NAME)); | 506 bookmark_node.GetEntry()->Get(syncable::NON_UNIQUE_NAME)); |
497 | 507 |
498 ReadNode pref_node(&trans); | 508 ReadNode pref_node(&trans); |
499 EXPECT_TRUE(pref_node.InitByClientTagLookup(syncable::PREFERENCES, | 509 EXPECT_EQ(BaseNode::INIT_OK, |
500 "bar")); | 510 pref_node.InitByClientTagLookup(syncable::PREFERENCES, |
| 511 "bar")); |
501 EXPECT_EQ(kEncryptedString, pref_node.GetTitle()); | 512 EXPECT_EQ(kEncryptedString, pref_node.GetTitle()); |
502 } | 513 } |
503 } | 514 } |
504 | 515 |
505 TEST_F(SyncApiTest, BaseNodeSetSpecifics) { | 516 TEST_F(SyncApiTest, BaseNodeSetSpecifics) { |
506 int64 child_id = MakeNode(test_user_share_.user_share(), | 517 int64 child_id = MakeNode(test_user_share_.user_share(), |
507 syncable::BOOKMARKS, "testtag"); | 518 syncable::BOOKMARKS, "testtag"); |
508 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 519 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
509 WriteNode node(&trans); | 520 WriteNode node(&trans); |
510 EXPECT_TRUE(node.InitByIdLookup(child_id)); | 521 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(child_id)); |
511 | 522 |
512 sync_pb::EntitySpecifics entity_specifics; | 523 sync_pb::EntitySpecifics entity_specifics; |
513 entity_specifics.mutable_bookmark()->set_url("http://www.google.com"); | 524 entity_specifics.mutable_bookmark()->set_url("http://www.google.com"); |
514 | 525 |
515 EXPECT_NE(entity_specifics.SerializeAsString(), | 526 EXPECT_NE(entity_specifics.SerializeAsString(), |
516 node.GetEntitySpecifics().SerializeAsString()); | 527 node.GetEntitySpecifics().SerializeAsString()); |
517 node.SetEntitySpecifics(entity_specifics); | 528 node.SetEntitySpecifics(entity_specifics); |
518 EXPECT_EQ(entity_specifics.SerializeAsString(), | 529 EXPECT_EQ(entity_specifics.SerializeAsString(), |
519 node.GetEntitySpecifics().SerializeAsString()); | 530 node.GetEntitySpecifics().SerializeAsString()); |
520 } | 531 } |
521 | 532 |
522 TEST_F(SyncApiTest, BaseNodeSetSpecificsPreservesUnknownFields) { | 533 TEST_F(SyncApiTest, BaseNodeSetSpecificsPreservesUnknownFields) { |
523 int64 child_id = MakeNode(test_user_share_.user_share(), | 534 int64 child_id = MakeNode(test_user_share_.user_share(), |
524 syncable::BOOKMARKS, "testtag"); | 535 syncable::BOOKMARKS, "testtag"); |
525 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 536 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
526 WriteNode node(&trans); | 537 WriteNode node(&trans); |
527 EXPECT_TRUE(node.InitByIdLookup(child_id)); | 538 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(child_id)); |
528 EXPECT_TRUE(node.GetEntitySpecifics().unknown_fields().empty()); | 539 EXPECT_TRUE(node.GetEntitySpecifics().unknown_fields().empty()); |
529 | 540 |
530 sync_pb::EntitySpecifics entity_specifics; | 541 sync_pb::EntitySpecifics entity_specifics; |
531 entity_specifics.mutable_bookmark()->set_url("http://www.google.com"); | 542 entity_specifics.mutable_bookmark()->set_url("http://www.google.com"); |
532 entity_specifics.mutable_unknown_fields()->AddFixed32(5, 100); | 543 entity_specifics.mutable_unknown_fields()->AddFixed32(5, 100); |
533 node.SetEntitySpecifics(entity_specifics); | 544 node.SetEntitySpecifics(entity_specifics); |
534 EXPECT_FALSE(node.GetEntitySpecifics().unknown_fields().empty()); | 545 EXPECT_FALSE(node.GetEntitySpecifics().unknown_fields().empty()); |
535 | 546 |
536 entity_specifics.mutable_unknown_fields()->Clear(); | 547 entity_specifics.mutable_unknown_fields()->Clear(); |
537 node.SetEntitySpecifics(entity_specifics); | 548 node.SetEntitySpecifics(entity_specifics); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
611 } | 622 } |
612 | 623 |
613 TEST_F(SyncApiTest, EmptyTags) { | 624 TEST_F(SyncApiTest, EmptyTags) { |
614 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); | 625 WriteTransaction trans(FROM_HERE, test_user_share_.user_share()); |
615 ReadNode root_node(&trans); | 626 ReadNode root_node(&trans); |
616 root_node.InitByRootLookup(); | 627 root_node.InitByRootLookup(); |
617 WriteNode node(&trans); | 628 WriteNode node(&trans); |
618 std::string empty_tag; | 629 std::string empty_tag; |
619 EXPECT_FALSE(node.InitUniqueByCreation( | 630 EXPECT_FALSE(node.InitUniqueByCreation( |
620 syncable::TYPED_URLS, root_node, empty_tag)); | 631 syncable::TYPED_URLS, root_node, empty_tag)); |
621 EXPECT_FALSE(node.InitByTagLookup(empty_tag)); | 632 EXPECT_EQ(BaseNode::INIT_FAILED_PRECONDITION, |
| 633 node.InitByTagLookup(empty_tag)); |
622 } | 634 } |
623 | 635 |
624 namespace { | 636 namespace { |
625 | 637 |
626 class TestHttpPostProviderInterface : public HttpPostProviderInterface { | 638 class TestHttpPostProviderInterface : public HttpPostProviderInterface { |
627 public: | 639 public: |
628 virtual ~TestHttpPostProviderInterface() {} | 640 virtual ~TestHttpPostProviderInterface() {} |
629 | 641 |
630 virtual void SetUserAgent(const char* user_agent) OVERRIDE {} | 642 virtual void SetUserAgent(const char* user_agent) OVERRIDE {} |
631 virtual void SetExtraRequestHeaders(const char* headers) OVERRIDE {} | 643 virtual void SetExtraRequestHeaders(const char* headers) OVERRIDE {} |
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
834 } else { | 846 } else { |
835 DCHECK_NE(nigori_status, WRITE_TO_NIGORI); | 847 DCHECK_NE(nigori_status, WRITE_TO_NIGORI); |
836 } | 848 } |
837 if (encryption_status == FULL_ENCRYPTION) | 849 if (encryption_status == FULL_ENCRYPTION) |
838 cryptographer->set_encrypt_everything(); | 850 cryptographer->set_encrypt_everything(); |
839 if (nigori_status == WRITE_TO_NIGORI) { | 851 if (nigori_status == WRITE_TO_NIGORI) { |
840 sync_pb::NigoriSpecifics nigori; | 852 sync_pb::NigoriSpecifics nigori; |
841 cryptographer->GetKeys(nigori.mutable_encrypted()); | 853 cryptographer->GetKeys(nigori.mutable_encrypted()); |
842 cryptographer->UpdateNigoriFromEncryptedTypes(&nigori); | 854 cryptographer->UpdateNigoriFromEncryptedTypes(&nigori); |
843 WriteNode node(&trans); | 855 WriteNode node(&trans); |
844 EXPECT_TRUE(node.InitByIdLookup(nigori_id)); | 856 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(nigori_id)); |
845 node.SetNigoriSpecifics(nigori); | 857 node.SetNigoriSpecifics(nigori); |
846 } | 858 } |
847 return cryptographer->is_ready(); | 859 return cryptographer->is_ready(); |
848 } | 860 } |
849 | 861 |
850 int64 GetIdForDataType(ModelType type) { | 862 int64 GetIdForDataType(ModelType type) { |
851 if (type_roots_.count(type) == 0) | 863 if (type_roots_.count(type) == 0) |
852 return 0; | 864 return 0; |
853 return type_roots_[type]; | 865 return type_roots_[type]; |
854 } | 866 } |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
935 sync_manager_.UpdateEnabledTypes(); | 947 sync_manager_.UpdateEnabledTypes(); |
936 EXPECT_EQ(2, update_enabled_types_call_count_); | 948 EXPECT_EQ(2, update_enabled_types_call_count_); |
937 } | 949 } |
938 | 950 |
939 TEST_F(SyncManagerTest, DoNotSyncTabsInNigoriNode) { | 951 TEST_F(SyncManagerTest, DoNotSyncTabsInNigoriNode) { |
940 const syncable::ModelTypeSet encrypted_types(syncable::TYPED_URLS); | 952 const syncable::ModelTypeSet encrypted_types(syncable::TYPED_URLS); |
941 sync_manager_.MaybeSetSyncTabsInNigoriNode(encrypted_types); | 953 sync_manager_.MaybeSetSyncTabsInNigoriNode(encrypted_types); |
942 | 954 |
943 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 955 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
944 ReadNode node(&trans); | 956 ReadNode node(&trans); |
945 ASSERT_TRUE(node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); | 957 ASSERT_EQ(BaseNode::INIT_OK, |
| 958 node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); |
946 EXPECT_FALSE(node.GetNigoriSpecifics().sync_tabs()); | 959 EXPECT_FALSE(node.GetNigoriSpecifics().sync_tabs()); |
947 } | 960 } |
948 | 961 |
949 TEST_F(SyncManagerTest, SyncTabsInNigoriNode) { | 962 TEST_F(SyncManagerTest, SyncTabsInNigoriNode) { |
950 const syncable::ModelTypeSet encrypted_types(syncable::SESSIONS); | 963 const syncable::ModelTypeSet encrypted_types(syncable::SESSIONS); |
951 sync_manager_.MaybeSetSyncTabsInNigoriNode(encrypted_types); | 964 sync_manager_.MaybeSetSyncTabsInNigoriNode(encrypted_types); |
952 | 965 |
953 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 966 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
954 ReadNode node(&trans); | 967 ReadNode node(&trans); |
955 ASSERT_TRUE(node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); | 968 ASSERT_EQ(BaseNode::INIT_OK, |
| 969 node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); |
956 EXPECT_TRUE(node.GetNigoriSpecifics().sync_tabs()); | 970 EXPECT_TRUE(node.GetNigoriSpecifics().sync_tabs()); |
957 } | 971 } |
958 | 972 |
959 TEST_F(SyncManagerTest, ProcessJsMessage) { | 973 TEST_F(SyncManagerTest, ProcessJsMessage) { |
960 const JsArgList kNoArgs; | 974 const JsArgList kNoArgs; |
961 | 975 |
962 StrictMock<MockJsReplyHandler> reply_handler; | 976 StrictMock<MockJsReplyHandler> reply_handler; |
963 | 977 |
964 ListValue false_args; | 978 ListValue false_args; |
965 false_args.Append(Value::CreateBooleanValue(false)); | 979 false_args.Append(Value::CreateBooleanValue(false)); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1007 EXPECT_EQ(1u, return_args.Get().GetSize()); | 1021 EXPECT_EQ(1u, return_args.Get().GetSize()); |
1008 ListValue* nodes = NULL; | 1022 ListValue* nodes = NULL; |
1009 ASSERT_TRUE(return_args.Get().GetList(0, &nodes)); | 1023 ASSERT_TRUE(return_args.Get().GetList(0, &nodes)); |
1010 ASSERT_TRUE(nodes); | 1024 ASSERT_TRUE(nodes); |
1011 EXPECT_EQ(1u, nodes->GetSize()); | 1025 EXPECT_EQ(1u, nodes->GetSize()); |
1012 DictionaryValue* node_info = NULL; | 1026 DictionaryValue* node_info = NULL; |
1013 EXPECT_TRUE(nodes->GetDictionary(0, &node_info)); | 1027 EXPECT_TRUE(nodes->GetDictionary(0, &node_info)); |
1014 ASSERT_TRUE(node_info); | 1028 ASSERT_TRUE(node_info); |
1015 ReadTransaction trans(FROM_HERE, sync_manager.GetUserShare()); | 1029 ReadTransaction trans(FROM_HERE, sync_manager.GetUserShare()); |
1016 ReadNode node(&trans); | 1030 ReadNode node(&trans); |
1017 EXPECT_TRUE(node.InitByIdLookup(id)); | 1031 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(id)); |
1018 CheckNodeValue(node, *node_info, is_detailed); | 1032 CheckNodeValue(node, *node_info, is_detailed); |
1019 } | 1033 } |
1020 | 1034 |
1021 class SyncManagerGetNodesByIdTest : public SyncManagerTest { | 1035 class SyncManagerGetNodesByIdTest : public SyncManagerTest { |
1022 protected: | 1036 protected: |
1023 virtual ~SyncManagerGetNodesByIdTest() {} | 1037 virtual ~SyncManagerGetNodesByIdTest() {} |
1024 | 1038 |
1025 void RunGetNodesByIdTest(const char* message_name, bool is_detailed) { | 1039 void RunGetNodesByIdTest(const char* message_name, bool is_detailed) { |
1026 int64 root_id = kInvalidId; | 1040 int64 root_id = kInvalidId; |
1027 { | 1041 { |
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1324 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | 1338 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); |
1325 PumpLoop(); | 1339 PumpLoop(); |
1326 | 1340 |
1327 const syncable::ModelTypeSet encrypted_types = | 1341 const syncable::ModelTypeSet encrypted_types = |
1328 sync_manager_.GetEncryptedDataTypesForTest(); | 1342 sync_manager_.GetEncryptedDataTypesForTest(); |
1329 EXPECT_TRUE(encrypted_types.Has(syncable::PASSWORDS)); | 1343 EXPECT_TRUE(encrypted_types.Has(syncable::PASSWORDS)); |
1330 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); | 1344 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); |
1331 { | 1345 { |
1332 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1346 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1333 ReadNode node(&trans); | 1347 ReadNode node(&trans); |
1334 EXPECT_TRUE(node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); | 1348 EXPECT_EQ(BaseNode::INIT_OK, |
| 1349 node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); |
1335 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); | 1350 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); |
1336 EXPECT_TRUE(nigori.has_encrypted()); | 1351 EXPECT_TRUE(nigori.has_encrypted()); |
1337 Cryptographer* cryptographer = trans.GetCryptographer(); | 1352 Cryptographer* cryptographer = trans.GetCryptographer(); |
1338 EXPECT_TRUE(cryptographer->is_ready()); | 1353 EXPECT_TRUE(cryptographer->is_ready()); |
1339 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); | 1354 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); |
1340 } | 1355 } |
1341 } | 1356 } |
1342 | 1357 |
1343 // Attempt to refresh encryption when nigori not downloaded. | 1358 // Attempt to refresh encryption when nigori not downloaded. |
1344 TEST_F(SyncManagerTest, RefreshEncryptionNotReady) { | 1359 TEST_F(SyncManagerTest, RefreshEncryptionNotReady) { |
(...skipping 18 matching lines...) Expand all Loading... |
1363 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | 1378 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); |
1364 PumpLoop(); | 1379 PumpLoop(); |
1365 | 1380 |
1366 const syncable::ModelTypeSet encrypted_types = | 1381 const syncable::ModelTypeSet encrypted_types = |
1367 sync_manager_.GetEncryptedDataTypesForTest(); | 1382 sync_manager_.GetEncryptedDataTypesForTest(); |
1368 EXPECT_TRUE(encrypted_types.Has(syncable::PASSWORDS)); // Hardcoded. | 1383 EXPECT_TRUE(encrypted_types.Has(syncable::PASSWORDS)); // Hardcoded. |
1369 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); | 1384 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); |
1370 { | 1385 { |
1371 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1386 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1372 ReadNode node(&trans); | 1387 ReadNode node(&trans); |
1373 EXPECT_TRUE(node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); | 1388 EXPECT_EQ(BaseNode::INIT_OK, |
| 1389 node.InitByIdLookup(GetIdForDataType(syncable::NIGORI))); |
1374 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); | 1390 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); |
1375 EXPECT_TRUE(nigori.has_encrypted()); | 1391 EXPECT_TRUE(nigori.has_encrypted()); |
1376 Cryptographer* cryptographer = trans.GetCryptographer(); | 1392 Cryptographer* cryptographer = trans.GetCryptographer(); |
1377 EXPECT_TRUE(cryptographer->is_ready()); | 1393 EXPECT_TRUE(cryptographer->is_ready()); |
1378 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); | 1394 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); |
1379 } | 1395 } |
1380 } | 1396 } |
1381 | 1397 |
1382 TEST_F(SyncManagerTest, EncryptDataTypesWithNoData) { | 1398 TEST_F(SyncManagerTest, EncryptDataTypesWithNoData) { |
1383 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); | 1399 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1508 TEST_F(SyncManagerTest, SetInitialGaiaPass) { | 1524 TEST_F(SyncManagerTest, SetInitialGaiaPass) { |
1509 EXPECT_FALSE(SetUpEncryption(DONT_WRITE_NIGORI, UNINITIALIZED)); | 1525 EXPECT_FALSE(SetUpEncryption(DONT_WRITE_NIGORI, UNINITIALIZED)); |
1510 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); | 1526 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); |
1511 EXPECT_CALL(observer_, OnPassphraseAccepted()); | 1527 EXPECT_CALL(observer_, OnPassphraseAccepted()); |
1512 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1528 EXPECT_CALL(observer_, OnEncryptionComplete()); |
1513 sync_manager_.SetEncryptionPassphrase("new_passphrase", false); | 1529 sync_manager_.SetEncryptionPassphrase("new_passphrase", false); |
1514 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); | 1530 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); |
1515 { | 1531 { |
1516 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1532 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1517 ReadNode node(&trans); | 1533 ReadNode node(&trans); |
1518 EXPECT_TRUE(node.InitByTagLookup(kNigoriTag)); | 1534 EXPECT_EQ(BaseNode::INIT_OK, node.InitByTagLookup(kNigoriTag)); |
1519 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); | 1535 sync_pb::NigoriSpecifics nigori = node.GetNigoriSpecifics(); |
1520 Cryptographer* cryptographer = trans.GetCryptographer(); | 1536 Cryptographer* cryptographer = trans.GetCryptographer(); |
1521 EXPECT_TRUE(cryptographer->is_ready()); | 1537 EXPECT_TRUE(cryptographer->is_ready()); |
1522 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); | 1538 EXPECT_TRUE(cryptographer->CanDecrypt(nigori.encrypted())); |
1523 } | 1539 } |
1524 } | 1540 } |
1525 | 1541 |
1526 // Test that when there are no pending keys and we have on the old GAIA | 1542 // Test that when there are no pending keys and we have on the old GAIA |
1527 // password, we update and re-encrypt everything with the new GAIA password. | 1543 // password, we update and re-encrypt everything with the new GAIA password. |
1528 // (case 1 in SyncManager::SyncInternal::SetEncryptionPassphrase) | 1544 // (case 1 in SyncManager::SyncInternal::SetEncryptionPassphrase) |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1584 { | 1600 { |
1585 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1601 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1586 Cryptographer* cryptographer = trans.GetCryptographer(); | 1602 Cryptographer* cryptographer = trans.GetCryptographer(); |
1587 EXPECT_TRUE(cryptographer->is_ready()); | 1603 EXPECT_TRUE(cryptographer->is_ready()); |
1588 // Verify the default key has changed. | 1604 // Verify the default key has changed. |
1589 sync_pb::EncryptedData encrypted; | 1605 sync_pb::EncryptedData encrypted; |
1590 cryptographer->GetKeys(&encrypted); | 1606 cryptographer->GetKeys(&encrypted); |
1591 EXPECT_FALSE(verifier.CanDecrypt(encrypted)); | 1607 EXPECT_FALSE(verifier.CanDecrypt(encrypted)); |
1592 | 1608 |
1593 ReadNode password_node(&trans); | 1609 ReadNode password_node(&trans); |
1594 EXPECT_TRUE(password_node.InitByClientTagLookup(syncable::PASSWORDS, | 1610 EXPECT_EQ(BaseNode::INIT_OK, |
1595 "foo")); | 1611 password_node.InitByClientTagLookup(syncable::PASSWORDS, |
| 1612 "foo")); |
1596 const sync_pb::PasswordSpecificsData& data = | 1613 const sync_pb::PasswordSpecificsData& data = |
1597 password_node.GetPasswordSpecifics(); | 1614 password_node.GetPasswordSpecifics(); |
1598 EXPECT_EQ("secret", data.password_value()); | 1615 EXPECT_EQ("secret", data.password_value()); |
1599 } | 1616 } |
1600 } | 1617 } |
1601 | 1618 |
1602 // Manually set the pending keys in the cryptographer/nigori to reflect the data | 1619 // Manually set the pending keys in the cryptographer/nigori to reflect the data |
1603 // being encrypted with a new (unprovided) GAIA password, then supply the | 1620 // being encrypted with a new (unprovided) GAIA password, then supply the |
1604 // password. | 1621 // password. |
1605 // (case 7 in SyncManager::SyncInternal::SetDecryptionPassphrase) | 1622 // (case 7 in SyncManager::SyncInternal::SetDecryptionPassphrase) |
1606 TEST_F(SyncManagerTest, SupplyPendingGAIAPass) { | 1623 TEST_F(SyncManagerTest, SupplyPendingGAIAPass) { |
1607 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); | 1624 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); |
1608 Cryptographer other_cryptographer(&encryptor_); | 1625 Cryptographer other_cryptographer(&encryptor_); |
1609 { | 1626 { |
1610 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1627 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1611 Cryptographer* cryptographer = trans.GetCryptographer(); | 1628 Cryptographer* cryptographer = trans.GetCryptographer(); |
1612 std::string bootstrap_token; | 1629 std::string bootstrap_token; |
1613 cryptographer->GetBootstrapToken(&bootstrap_token); | 1630 cryptographer->GetBootstrapToken(&bootstrap_token); |
1614 other_cryptographer.Bootstrap(bootstrap_token); | 1631 other_cryptographer.Bootstrap(bootstrap_token); |
1615 | 1632 |
1616 // Now update the nigori to reflect the new keys, and update the | 1633 // Now update the nigori to reflect the new keys, and update the |
1617 // cryptographer to have pending keys. | 1634 // cryptographer to have pending keys. |
1618 KeyParams params = {"localhost", "dummy", "passphrase2"}; | 1635 KeyParams params = {"localhost", "dummy", "passphrase2"}; |
1619 other_cryptographer.AddKey(params); | 1636 other_cryptographer.AddKey(params); |
1620 WriteNode node(&trans); | 1637 WriteNode node(&trans); |
1621 EXPECT_TRUE(node.InitByTagLookup(kNigoriTag)); | 1638 EXPECT_EQ(BaseNode::INIT_OK, node.InitByTagLookup(kNigoriTag)); |
1622 sync_pb::NigoriSpecifics nigori; | 1639 sync_pb::NigoriSpecifics nigori; |
1623 other_cryptographer.GetKeys(nigori.mutable_encrypted()); | 1640 other_cryptographer.GetKeys(nigori.mutable_encrypted()); |
1624 cryptographer->Update(nigori); | 1641 cryptographer->Update(nigori); |
1625 EXPECT_TRUE(cryptographer->has_pending_keys()); | 1642 EXPECT_TRUE(cryptographer->has_pending_keys()); |
1626 node.SetNigoriSpecifics(nigori); | 1643 node.SetNigoriSpecifics(nigori); |
1627 } | 1644 } |
1628 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); | 1645 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); |
1629 EXPECT_CALL(observer_, OnPassphraseAccepted()); | 1646 EXPECT_CALL(observer_, OnPassphraseAccepted()); |
1630 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1647 EXPECT_CALL(observer_, OnEncryptionComplete()); |
1631 sync_manager_.SetDecryptionPassphrase("passphrase2"); | 1648 sync_manager_.SetDecryptionPassphrase("passphrase2"); |
(...skipping 23 matching lines...) Expand all Loading... |
1655 Cryptographer* cryptographer = trans.GetCryptographer(); | 1672 Cryptographer* cryptographer = trans.GetCryptographer(); |
1656 std::string bootstrap_token; | 1673 std::string bootstrap_token; |
1657 cryptographer->GetBootstrapToken(&bootstrap_token); | 1674 cryptographer->GetBootstrapToken(&bootstrap_token); |
1658 other_cryptographer.Bootstrap(bootstrap_token); | 1675 other_cryptographer.Bootstrap(bootstrap_token); |
1659 | 1676 |
1660 // Now update the nigori to reflect the new keys, and update the | 1677 // Now update the nigori to reflect the new keys, and update the |
1661 // cryptographer to have pending keys. | 1678 // cryptographer to have pending keys. |
1662 KeyParams params = {"localhost", "dummy", "old_gaia"}; | 1679 KeyParams params = {"localhost", "dummy", "old_gaia"}; |
1663 other_cryptographer.AddKey(params); | 1680 other_cryptographer.AddKey(params); |
1664 WriteNode node(&trans); | 1681 WriteNode node(&trans); |
1665 EXPECT_TRUE(node.InitByTagLookup(kNigoriTag)); | 1682 EXPECT_EQ(BaseNode::INIT_OK, node.InitByTagLookup(kNigoriTag)); |
1666 sync_pb::NigoriSpecifics nigori; | 1683 sync_pb::NigoriSpecifics nigori; |
1667 other_cryptographer.GetKeys(nigori.mutable_encrypted()); | 1684 other_cryptographer.GetKeys(nigori.mutable_encrypted()); |
1668 node.SetNigoriSpecifics(nigori); | 1685 node.SetNigoriSpecifics(nigori); |
1669 cryptographer->Update(nigori); | 1686 cryptographer->Update(nigori); |
1670 | 1687 |
1671 // other_cryptographer now contains all encryption keys, and is encrypting | 1688 // other_cryptographer now contains all encryption keys, and is encrypting |
1672 // with the newest gaia. | 1689 // with the newest gaia. |
1673 KeyParams new_params = {"localhost", "dummy", "new_gaia"}; | 1690 KeyParams new_params = {"localhost", "dummy", "new_gaia"}; |
1674 other_cryptographer.AddKey(new_params); | 1691 other_cryptographer.AddKey(new_params); |
1675 } | 1692 } |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1726 Cryptographer* cryptographer = trans.GetCryptographer(); | 1743 Cryptographer* cryptographer = trans.GetCryptographer(); |
1727 std::string bootstrap_token; | 1744 std::string bootstrap_token; |
1728 cryptographer->GetBootstrapToken(&bootstrap_token); | 1745 cryptographer->GetBootstrapToken(&bootstrap_token); |
1729 other_cryptographer.Bootstrap(bootstrap_token); | 1746 other_cryptographer.Bootstrap(bootstrap_token); |
1730 | 1747 |
1731 // Now update the nigori to reflect the new keys, and update the | 1748 // Now update the nigori to reflect the new keys, and update the |
1732 // cryptographer to have pending keys. | 1749 // cryptographer to have pending keys. |
1733 KeyParams params = {"localhost", "dummy", "explicit"}; | 1750 KeyParams params = {"localhost", "dummy", "explicit"}; |
1734 other_cryptographer.AddKey(params); | 1751 other_cryptographer.AddKey(params); |
1735 WriteNode node(&trans); | 1752 WriteNode node(&trans); |
1736 EXPECT_TRUE(node.InitByTagLookup(kNigoriTag)); | 1753 EXPECT_EQ(BaseNode::INIT_OK, node.InitByTagLookup(kNigoriTag)); |
1737 sync_pb::NigoriSpecifics nigori; | 1754 sync_pb::NigoriSpecifics nigori; |
1738 other_cryptographer.GetKeys(nigori.mutable_encrypted()); | 1755 other_cryptographer.GetKeys(nigori.mutable_encrypted()); |
1739 cryptographer->Update(nigori); | 1756 cryptographer->Update(nigori); |
1740 EXPECT_TRUE(cryptographer->has_pending_keys()); | 1757 EXPECT_TRUE(cryptographer->has_pending_keys()); |
1741 nigori.set_using_explicit_passphrase(true); | 1758 nigori.set_using_explicit_passphrase(true); |
1742 node.SetNigoriSpecifics(nigori); | 1759 node.SetNigoriSpecifics(nigori); |
1743 } | 1760 } |
1744 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); | 1761 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); |
1745 EXPECT_CALL(observer_, OnPassphraseAccepted()); | 1762 EXPECT_CALL(observer_, OnPassphraseAccepted()); |
1746 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1763 EXPECT_CALL(observer_, OnEncryptionComplete()); |
(...skipping 18 matching lines...) Expand all Loading... |
1765 EXPECT_FALSE(SetUpEncryption(DONT_WRITE_NIGORI, UNINITIALIZED)); | 1782 EXPECT_FALSE(SetUpEncryption(DONT_WRITE_NIGORI, UNINITIALIZED)); |
1766 Cryptographer other_cryptographer(&encryptor_); | 1783 Cryptographer other_cryptographer(&encryptor_); |
1767 { | 1784 { |
1768 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1785 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1769 Cryptographer* cryptographer = trans.GetCryptographer(); | 1786 Cryptographer* cryptographer = trans.GetCryptographer(); |
1770 // Now update the nigori to reflect the new keys, and update the | 1787 // Now update the nigori to reflect the new keys, and update the |
1771 // cryptographer to have pending keys. | 1788 // cryptographer to have pending keys. |
1772 KeyParams params = {"localhost", "dummy", "passphrase"}; | 1789 KeyParams params = {"localhost", "dummy", "passphrase"}; |
1773 other_cryptographer.AddKey(params); | 1790 other_cryptographer.AddKey(params); |
1774 WriteNode node(&trans); | 1791 WriteNode node(&trans); |
1775 EXPECT_TRUE(node.InitByTagLookup(kNigoriTag)); | 1792 EXPECT_EQ(BaseNode::INIT_OK, node.InitByTagLookup(kNigoriTag)); |
1776 sync_pb::NigoriSpecifics nigori; | 1793 sync_pb::NigoriSpecifics nigori; |
1777 other_cryptographer.GetKeys(nigori.mutable_encrypted()); | 1794 other_cryptographer.GetKeys(nigori.mutable_encrypted()); |
1778 node.SetNigoriSpecifics(nigori); | 1795 node.SetNigoriSpecifics(nigori); |
1779 cryptographer->Update(nigori); | 1796 cryptographer->Update(nigori); |
1780 EXPECT_FALSE(cryptographer->is_ready()); | 1797 EXPECT_FALSE(cryptographer->is_ready()); |
1781 } | 1798 } |
1782 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); | 1799 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); |
1783 EXPECT_CALL(observer_, OnPassphraseAccepted()); | 1800 EXPECT_CALL(observer_, OnPassphraseAccepted()); |
1784 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1801 EXPECT_CALL(observer_, OnEncryptionComplete()); |
1785 sync_manager_.SetEncryptionPassphrase("passphrase", false); | 1802 sync_manager_.SetEncryptionPassphrase("passphrase", false); |
(...skipping 20 matching lines...) Expand all Loading... |
1806 node_id = password_node.GetId(); | 1823 node_id = password_node.GetId(); |
1807 } | 1824 } |
1808 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); | 1825 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); |
1809 EXPECT_CALL(observer_, OnPassphraseAccepted()); | 1826 EXPECT_CALL(observer_, OnPassphraseAccepted()); |
1810 EXPECT_CALL(observer_, OnEncryptionComplete()); | 1827 EXPECT_CALL(observer_, OnEncryptionComplete()); |
1811 sync_manager_.SetEncryptionPassphrase("new_passphrase", true); | 1828 sync_manager_.SetEncryptionPassphrase("new_passphrase", true); |
1812 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); | 1829 EXPECT_FALSE(sync_manager_.EncryptEverythingEnabledForTest()); |
1813 { | 1830 { |
1814 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1831 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1815 ReadNode password_node(&trans); | 1832 ReadNode password_node(&trans); |
1816 EXPECT_FALSE(password_node.InitByClientTagLookup(syncable::PASSWORDS, | 1833 EXPECT_EQ(BaseNode::INIT_FAILED_DECRYPT_IF_NECESSARY, |
1817 tag)); | 1834 password_node.InitByClientTagLookup(syncable::PASSWORDS, |
| 1835 tag)); |
1818 } | 1836 } |
1819 { | 1837 { |
1820 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1838 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1821 ReadNode password_node(&trans); | 1839 ReadNode password_node(&trans); |
1822 EXPECT_FALSE(password_node.InitByIdLookup(node_id)); | 1840 EXPECT_EQ(BaseNode::INIT_FAILED_DECRYPT_IF_NECESSARY, |
| 1841 password_node.InitByIdLookup(node_id)); |
1823 } | 1842 } |
1824 } | 1843 } |
1825 | 1844 |
1826 TEST_F(SyncManagerTest, NudgeDelayTest) { | 1845 TEST_F(SyncManagerTest, NudgeDelayTest) { |
1827 EXPECT_EQ(sync_manager_.GetNudgeDelayTimeDelta(syncable::BOOKMARKS), | 1846 EXPECT_EQ(sync_manager_.GetNudgeDelayTimeDelta(syncable::BOOKMARKS), |
1828 base::TimeDelta::FromMilliseconds( | 1847 base::TimeDelta::FromMilliseconds( |
1829 SyncManager::kDefaultNudgeDelayMilliseconds)); | 1848 SyncManager::kDefaultNudgeDelayMilliseconds)); |
1830 | 1849 |
1831 EXPECT_EQ(sync_manager_.GetNudgeDelayTimeDelta(syncable::AUTOFILL), | 1850 EXPECT_EQ(sync_manager_.GetNudgeDelayTimeDelta(syncable::AUTOFILL), |
1832 base::TimeDelta::FromSeconds( | 1851 base::TimeDelta::FromSeconds( |
(...skipping 18 matching lines...) Expand all Loading... |
1851 // Create a bookmark using the legacy format. | 1870 // Create a bookmark using the legacy format. |
1852 int64 node_id1 = MakeNode(sync_manager_.GetUserShare(), | 1871 int64 node_id1 = MakeNode(sync_manager_.GetUserShare(), |
1853 syncable::BOOKMARKS, | 1872 syncable::BOOKMARKS, |
1854 "testtag"); | 1873 "testtag"); |
1855 int64 node_id2 = MakeNode(sync_manager_.GetUserShare(), | 1874 int64 node_id2 = MakeNode(sync_manager_.GetUserShare(), |
1856 syncable::BOOKMARKS, | 1875 syncable::BOOKMARKS, |
1857 "testtag2"); | 1876 "testtag2"); |
1858 { | 1877 { |
1859 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1878 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1860 WriteNode node(&trans); | 1879 WriteNode node(&trans); |
1861 EXPECT_TRUE(node.InitByIdLookup(node_id1)); | 1880 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(node_id1)); |
1862 | 1881 |
1863 sync_pb::EntitySpecifics entity_specifics; | 1882 sync_pb::EntitySpecifics entity_specifics; |
1864 entity_specifics.mutable_bookmark()->set_url(url); | 1883 entity_specifics.mutable_bookmark()->set_url(url); |
1865 node.SetEntitySpecifics(entity_specifics); | 1884 node.SetEntitySpecifics(entity_specifics); |
1866 | 1885 |
1867 // Set the old style title. | 1886 // Set the old style title. |
1868 syncable::MutableEntry* node_entry = node.entry_; | 1887 syncable::MutableEntry* node_entry = node.entry_; |
1869 node_entry->Put(syncable::NON_UNIQUE_NAME, title); | 1888 node_entry->Put(syncable::NON_UNIQUE_NAME, title); |
1870 | 1889 |
1871 WriteNode node2(&trans); | 1890 WriteNode node2(&trans); |
1872 EXPECT_TRUE(node2.InitByIdLookup(node_id2)); | 1891 EXPECT_EQ(BaseNode::INIT_OK, node2.InitByIdLookup(node_id2)); |
1873 | 1892 |
1874 sync_pb::EntitySpecifics entity_specifics2; | 1893 sync_pb::EntitySpecifics entity_specifics2; |
1875 entity_specifics2.mutable_bookmark()->set_url(url2); | 1894 entity_specifics2.mutable_bookmark()->set_url(url2); |
1876 node2.SetEntitySpecifics(entity_specifics2); | 1895 node2.SetEntitySpecifics(entity_specifics2); |
1877 | 1896 |
1878 // Set the old style title. | 1897 // Set the old style title. |
1879 syncable::MutableEntry* node_entry2 = node2.entry_; | 1898 syncable::MutableEntry* node_entry2 = node2.entry_; |
1880 node_entry2->Put(syncable::NON_UNIQUE_NAME, title2); | 1899 node_entry2->Put(syncable::NON_UNIQUE_NAME, title2); |
1881 } | 1900 } |
1882 | 1901 |
1883 { | 1902 { |
1884 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1903 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1885 ReadNode node(&trans); | 1904 ReadNode node(&trans); |
1886 EXPECT_TRUE(node.InitByIdLookup(node_id1)); | 1905 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(node_id1)); |
1887 EXPECT_EQ(syncable::BOOKMARKS, node.GetModelType()); | 1906 EXPECT_EQ(syncable::BOOKMARKS, node.GetModelType()); |
1888 EXPECT_EQ(title, node.GetTitle()); | 1907 EXPECT_EQ(title, node.GetTitle()); |
1889 EXPECT_EQ(title, node.GetBookmarkSpecifics().title()); | 1908 EXPECT_EQ(title, node.GetBookmarkSpecifics().title()); |
1890 EXPECT_EQ(url, node.GetBookmarkSpecifics().url()); | 1909 EXPECT_EQ(url, node.GetBookmarkSpecifics().url()); |
1891 | 1910 |
1892 ReadNode node2(&trans); | 1911 ReadNode node2(&trans); |
1893 EXPECT_TRUE(node2.InitByIdLookup(node_id2)); | 1912 EXPECT_EQ(BaseNode::INIT_OK, node2.InitByIdLookup(node_id2)); |
1894 EXPECT_EQ(syncable::BOOKMARKS, node2.GetModelType()); | 1913 EXPECT_EQ(syncable::BOOKMARKS, node2.GetModelType()); |
1895 // We should de-canonicalize the title in GetTitle(), but the title in the | 1914 // We should de-canonicalize the title in GetTitle(), but the title in the |
1896 // specifics should be stored in the server legal form. | 1915 // specifics should be stored in the server legal form. |
1897 EXPECT_EQ(raw_title2, node2.GetTitle()); | 1916 EXPECT_EQ(raw_title2, node2.GetTitle()); |
1898 EXPECT_EQ(title2, node2.GetBookmarkSpecifics().title()); | 1917 EXPECT_EQ(title2, node2.GetBookmarkSpecifics().title()); |
1899 EXPECT_EQ(url2, node2.GetBookmarkSpecifics().url()); | 1918 EXPECT_EQ(url2, node2.GetBookmarkSpecifics().url()); |
1900 } | 1919 } |
1901 | 1920 |
1902 { | 1921 { |
1903 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1922 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
(...skipping 15 matching lines...) Expand all Loading... |
1919 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1938 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1920 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( | 1939 EXPECT_TRUE(GetEncryptedTypes(&trans).Equals( |
1921 syncable::ModelTypeSet::All())); | 1940 syncable::ModelTypeSet::All())); |
1922 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( | 1941 EXPECT_TRUE(syncable::VerifyDataTypeEncryptionForTest( |
1923 trans.GetWrappedTrans(), | 1942 trans.GetWrappedTrans(), |
1924 trans.GetCryptographer(), | 1943 trans.GetCryptographer(), |
1925 syncable::BOOKMARKS, | 1944 syncable::BOOKMARKS, |
1926 true /* is encrypted */)); | 1945 true /* is encrypted */)); |
1927 | 1946 |
1928 ReadNode node(&trans); | 1947 ReadNode node(&trans); |
1929 EXPECT_TRUE(node.InitByIdLookup(node_id1)); | 1948 EXPECT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(node_id1)); |
1930 EXPECT_EQ(syncable::BOOKMARKS, node.GetModelType()); | 1949 EXPECT_EQ(syncable::BOOKMARKS, node.GetModelType()); |
1931 EXPECT_EQ(title, node.GetTitle()); | 1950 EXPECT_EQ(title, node.GetTitle()); |
1932 EXPECT_EQ(title, node.GetBookmarkSpecifics().title()); | 1951 EXPECT_EQ(title, node.GetBookmarkSpecifics().title()); |
1933 EXPECT_EQ(url, node.GetBookmarkSpecifics().url()); | 1952 EXPECT_EQ(url, node.GetBookmarkSpecifics().url()); |
1934 | 1953 |
1935 ReadNode node2(&trans); | 1954 ReadNode node2(&trans); |
1936 EXPECT_TRUE(node2.InitByIdLookup(node_id2)); | 1955 EXPECT_EQ(BaseNode::INIT_OK, node2.InitByIdLookup(node_id2)); |
1937 EXPECT_EQ(syncable::BOOKMARKS, node2.GetModelType()); | 1956 EXPECT_EQ(syncable::BOOKMARKS, node2.GetModelType()); |
1938 // We should de-canonicalize the title in GetTitle(), but the title in the | 1957 // We should de-canonicalize the title in GetTitle(), but the title in the |
1939 // specifics should be stored in the server legal form. | 1958 // specifics should be stored in the server legal form. |
1940 EXPECT_EQ(raw_title2, node2.GetTitle()); | 1959 EXPECT_EQ(raw_title2, node2.GetTitle()); |
1941 EXPECT_EQ(title2, node2.GetBookmarkSpecifics().title()); | 1960 EXPECT_EQ(title2, node2.GetBookmarkSpecifics().title()); |
1942 EXPECT_EQ(url2, node2.GetBookmarkSpecifics().url()); | 1961 EXPECT_EQ(url2, node2.GetBookmarkSpecifics().url()); |
1943 } | 1962 } |
1944 } | 1963 } |
1945 | 1964 |
1946 // Create a bookmark and set the title/url, then verify the data was properly | 1965 // Create a bookmark and set the title/url, then verify the data was properly |
(...skipping 12 matching lines...) Expand all Loading... |
1959 node.SetTitle(UTF8ToWide(title)); | 1978 node.SetTitle(UTF8ToWide(title)); |
1960 node.SetURL(url); | 1979 node.SetURL(url); |
1961 } | 1980 } |
1962 { | 1981 { |
1963 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 1982 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1964 ReadNode root_node(&trans); | 1983 ReadNode root_node(&trans); |
1965 root_node.InitByRootLookup(); | 1984 root_node.InitByRootLookup(); |
1966 int64 child_id = root_node.GetFirstChildId(); | 1985 int64 child_id = root_node.GetFirstChildId(); |
1967 | 1986 |
1968 ReadNode node(&trans); | 1987 ReadNode node(&trans); |
1969 ASSERT_TRUE(node.InitByIdLookup(child_id)); | 1988 ASSERT_EQ(BaseNode::INIT_OK, node.InitByIdLookup(child_id)); |
1970 EXPECT_FALSE(node.GetIsFolder()); | 1989 EXPECT_FALSE(node.GetIsFolder()); |
1971 EXPECT_EQ(title, node.GetTitle()); | 1990 EXPECT_EQ(title, node.GetTitle()); |
1972 EXPECT_EQ(url, node.GetURL()); | 1991 EXPECT_EQ(url, node.GetURL()); |
1973 } | 1992 } |
1974 } | 1993 } |
1975 | 1994 |
1976 // Verifies WriteNode::UpdateEntryWithEncryption does not make unnecessary | 1995 // Verifies WriteNode::UpdateEntryWithEncryption does not make unnecessary |
1977 // changes. | 1996 // changes. |
1978 TEST_F(SyncManagerTest, UpdateEntryWithEncryption) { | 1997 TEST_F(SyncManagerTest, UpdateEntryWithEncryption) { |
1979 std::string client_tag = "title"; | 1998 std::string client_tag = "title"; |
1980 sync_pb::EntitySpecifics entity_specifics; | 1999 sync_pb::EntitySpecifics entity_specifics; |
1981 entity_specifics.mutable_bookmark()->set_url("url"); | 2000 entity_specifics.mutable_bookmark()->set_url("url"); |
1982 entity_specifics.mutable_bookmark()->set_title("title"); | 2001 entity_specifics.mutable_bookmark()->set_title("title"); |
1983 MakeServerNode(sync_manager_.GetUserShare(), syncable::BOOKMARKS, client_tag, | 2002 MakeServerNode(sync_manager_.GetUserShare(), syncable::BOOKMARKS, client_tag, |
1984 BaseNode::GenerateSyncableHash(syncable::BOOKMARKS, | 2003 BaseNode::GenerateSyncableHash(syncable::BOOKMARKS, |
1985 client_tag), | 2004 client_tag), |
1986 entity_specifics); | 2005 entity_specifics); |
1987 // New node shouldn't start off unsynced. | 2006 // New node shouldn't start off unsynced. |
1988 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); | 2007 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); |
1989 // Manually change to the same data. Should not set is_unsynced. | 2008 // Manually change to the same data. Should not set is_unsynced. |
1990 { | 2009 { |
1991 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2010 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
1992 WriteNode node(&trans); | 2011 WriteNode node(&trans); |
1993 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); | 2012 EXPECT_EQ(BaseNode::INIT_OK, |
| 2013 node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); |
1994 node.SetEntitySpecifics(entity_specifics); | 2014 node.SetEntitySpecifics(entity_specifics); |
1995 } | 2015 } |
1996 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); | 2016 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); |
1997 | 2017 |
1998 // Encrypt the datatatype, should set is_unsynced. | 2018 // Encrypt the datatatype, should set is_unsynced. |
1999 EXPECT_CALL(observer_, | 2019 EXPECT_CALL(observer_, |
2000 OnEncryptedTypesChanged( | 2020 OnEncryptedTypesChanged( |
2001 HasModelTypes(syncable::ModelTypeSet::All()), true)); | 2021 HasModelTypes(syncable::ModelTypeSet::All()), true)); |
2002 EXPECT_CALL(observer_, OnEncryptionComplete()); | 2022 EXPECT_CALL(observer_, OnEncryptionComplete()); |
2003 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); | 2023 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); |
2004 | 2024 |
2005 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | 2025 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); |
2006 PumpLoop(); | 2026 PumpLoop(); |
2007 { | 2027 { |
2008 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2028 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2009 ReadNode node(&trans); | 2029 ReadNode node(&trans); |
2010 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); | 2030 EXPECT_EQ(BaseNode::INIT_OK, |
| 2031 node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); |
2011 const syncable::Entry* node_entry = node.GetEntry(); | 2032 const syncable::Entry* node_entry = node.GetEntry(); |
2012 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2033 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
2013 EXPECT_TRUE(specifics.has_encrypted()); | 2034 EXPECT_TRUE(specifics.has_encrypted()); |
2014 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); | 2035 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); |
2015 Cryptographer* cryptographer = trans.GetCryptographer(); | 2036 Cryptographer* cryptographer = trans.GetCryptographer(); |
2016 EXPECT_TRUE(cryptographer->is_ready()); | 2037 EXPECT_TRUE(cryptographer->is_ready()); |
2017 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( | 2038 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( |
2018 specifics.encrypted())); | 2039 specifics.encrypted())); |
2019 } | 2040 } |
2020 EXPECT_TRUE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); | 2041 EXPECT_TRUE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); |
2021 | 2042 |
2022 // Set a new passphrase. Should set is_unsynced. | 2043 // Set a new passphrase. Should set is_unsynced. |
2023 testing::Mock::VerifyAndClearExpectations(&observer_); | 2044 testing::Mock::VerifyAndClearExpectations(&observer_); |
2024 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); | 2045 EXPECT_CALL(observer_, OnBootstrapTokenUpdated(_)); |
2025 EXPECT_CALL(observer_, OnPassphraseAccepted()); | 2046 EXPECT_CALL(observer_, OnPassphraseAccepted()); |
2026 EXPECT_CALL(observer_, OnEncryptionComplete()); | 2047 EXPECT_CALL(observer_, OnEncryptionComplete()); |
2027 sync_manager_.SetEncryptionPassphrase("new_passphrase", true); | 2048 sync_manager_.SetEncryptionPassphrase("new_passphrase", true); |
2028 { | 2049 { |
2029 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2050 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2030 ReadNode node(&trans); | 2051 ReadNode node(&trans); |
2031 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); | 2052 EXPECT_EQ(BaseNode::INIT_OK, |
| 2053 node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); |
2032 const syncable::Entry* node_entry = node.GetEntry(); | 2054 const syncable::Entry* node_entry = node.GetEntry(); |
2033 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2055 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
2034 EXPECT_TRUE(specifics.has_encrypted()); | 2056 EXPECT_TRUE(specifics.has_encrypted()); |
2035 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); | 2057 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); |
2036 Cryptographer* cryptographer = trans.GetCryptographer(); | 2058 Cryptographer* cryptographer = trans.GetCryptographer(); |
2037 EXPECT_TRUE(cryptographer->is_ready()); | 2059 EXPECT_TRUE(cryptographer->is_ready()); |
2038 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( | 2060 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( |
2039 specifics.encrypted())); | 2061 specifics.encrypted())); |
2040 } | 2062 } |
2041 EXPECT_TRUE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); | 2063 EXPECT_TRUE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); |
2042 | 2064 |
2043 // Force a re-encrypt everything. Should not set is_unsynced. | 2065 // Force a re-encrypt everything. Should not set is_unsynced. |
2044 testing::Mock::VerifyAndClearExpectations(&observer_); | 2066 testing::Mock::VerifyAndClearExpectations(&observer_); |
2045 EXPECT_CALL(observer_, OnEncryptionComplete()); | 2067 EXPECT_CALL(observer_, OnEncryptionComplete()); |
2046 | 2068 |
2047 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | 2069 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); |
2048 PumpLoop(); | 2070 PumpLoop(); |
2049 | 2071 |
2050 { | 2072 { |
2051 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2073 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2052 ReadNode node(&trans); | 2074 ReadNode node(&trans); |
2053 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); | 2075 EXPECT_EQ(BaseNode::INIT_OK, |
| 2076 node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); |
2054 const syncable::Entry* node_entry = node.GetEntry(); | 2077 const syncable::Entry* node_entry = node.GetEntry(); |
2055 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2078 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
2056 EXPECT_TRUE(specifics.has_encrypted()); | 2079 EXPECT_TRUE(specifics.has_encrypted()); |
2057 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); | 2080 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); |
2058 Cryptographer* cryptographer = trans.GetCryptographer(); | 2081 Cryptographer* cryptographer = trans.GetCryptographer(); |
2059 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( | 2082 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( |
2060 specifics.encrypted())); | 2083 specifics.encrypted())); |
2061 } | 2084 } |
2062 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); | 2085 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); |
2063 | 2086 |
2064 // Manually change to the same data. Should not set is_unsynced. | 2087 // Manually change to the same data. Should not set is_unsynced. |
2065 { | 2088 { |
2066 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2089 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2067 WriteNode node(&trans); | 2090 WriteNode node(&trans); |
2068 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); | 2091 EXPECT_EQ(BaseNode::INIT_OK, |
| 2092 node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); |
2069 node.SetEntitySpecifics(entity_specifics); | 2093 node.SetEntitySpecifics(entity_specifics); |
2070 const syncable::Entry* node_entry = node.GetEntry(); | 2094 const syncable::Entry* node_entry = node.GetEntry(); |
2071 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2095 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
2072 EXPECT_TRUE(specifics.has_encrypted()); | 2096 EXPECT_TRUE(specifics.has_encrypted()); |
2073 EXPECT_FALSE(node_entry->Get(IS_UNSYNCED)); | 2097 EXPECT_FALSE(node_entry->Get(IS_UNSYNCED)); |
2074 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); | 2098 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); |
2075 Cryptographer* cryptographer = trans.GetCryptographer(); | 2099 Cryptographer* cryptographer = trans.GetCryptographer(); |
2076 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( | 2100 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( |
2077 specifics.encrypted())); | 2101 specifics.encrypted())); |
2078 } | 2102 } |
2079 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); | 2103 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); |
2080 | 2104 |
2081 // Manually change to different data. Should set is_unsynced. | 2105 // Manually change to different data. Should set is_unsynced. |
2082 { | 2106 { |
2083 entity_specifics.mutable_bookmark()->set_url("url2"); | 2107 entity_specifics.mutable_bookmark()->set_url("url2"); |
2084 entity_specifics.mutable_bookmark()->set_title("title2"); | 2108 entity_specifics.mutable_bookmark()->set_title("title2"); |
2085 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2109 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2086 WriteNode node(&trans); | 2110 WriteNode node(&trans); |
2087 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); | 2111 EXPECT_EQ(BaseNode::INIT_OK, |
| 2112 node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); |
2088 node.SetEntitySpecifics(entity_specifics); | 2113 node.SetEntitySpecifics(entity_specifics); |
2089 const syncable::Entry* node_entry = node.GetEntry(); | 2114 const syncable::Entry* node_entry = node.GetEntry(); |
2090 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2115 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
2091 EXPECT_TRUE(specifics.has_encrypted()); | 2116 EXPECT_TRUE(specifics.has_encrypted()); |
2092 EXPECT_TRUE(node_entry->Get(IS_UNSYNCED)); | 2117 EXPECT_TRUE(node_entry->Get(IS_UNSYNCED)); |
2093 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); | 2118 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); |
2094 Cryptographer* cryptographer = trans.GetCryptographer(); | 2119 Cryptographer* cryptographer = trans.GetCryptographer(); |
2095 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( | 2120 EXPECT_TRUE(cryptographer->CanDecryptUsingDefaultKey( |
2096 specifics.encrypted())); | 2121 specifics.encrypted())); |
2097 } | 2122 } |
(...skipping 20 matching lines...) Expand all Loading... |
2118 client_tag), | 2143 client_tag), |
2119 entity_specifics); | 2144 entity_specifics); |
2120 // New node shouldn't start off unsynced. | 2145 // New node shouldn't start off unsynced. |
2121 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PASSWORDS, client_tag)); | 2146 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PASSWORDS, client_tag)); |
2122 | 2147 |
2123 // Manually change to the same data via SetEntitySpecifics. Should not set | 2148 // Manually change to the same data via SetEntitySpecifics. Should not set |
2124 // is_unsynced. | 2149 // is_unsynced. |
2125 { | 2150 { |
2126 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2151 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2127 WriteNode node(&trans); | 2152 WriteNode node(&trans); |
2128 EXPECT_TRUE(node.InitByClientTagLookup(syncable::PASSWORDS, client_tag)); | 2153 EXPECT_EQ(BaseNode::INIT_OK, |
| 2154 node.InitByClientTagLookup(syncable::PASSWORDS, client_tag)); |
2129 node.SetEntitySpecifics(entity_specifics); | 2155 node.SetEntitySpecifics(entity_specifics); |
2130 } | 2156 } |
2131 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PASSWORDS, client_tag)); | 2157 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PASSWORDS, client_tag)); |
2132 } | 2158 } |
2133 | 2159 |
2134 // Passwords have their own handling for encryption. Verify it does not result | 2160 // Passwords have their own handling for encryption. Verify it does not result |
2135 // in unnecessary writes via SetPasswordSpecifics. | 2161 // in unnecessary writes via SetPasswordSpecifics. |
2136 TEST_F(SyncManagerTest, UpdatePasswordSetPasswordSpecifics) { | 2162 TEST_F(SyncManagerTest, UpdatePasswordSetPasswordSpecifics) { |
2137 std::string client_tag = "title"; | 2163 std::string client_tag = "title"; |
2138 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); | 2164 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, DEFAULT_ENCRYPTION)); |
(...skipping 13 matching lines...) Expand all Loading... |
2152 client_tag), | 2178 client_tag), |
2153 entity_specifics); | 2179 entity_specifics); |
2154 // New node shouldn't start off unsynced. | 2180 // New node shouldn't start off unsynced. |
2155 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PASSWORDS, client_tag)); | 2181 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PASSWORDS, client_tag)); |
2156 | 2182 |
2157 // Manually change to the same data via SetPasswordSpecifics. Should not set | 2183 // Manually change to the same data via SetPasswordSpecifics. Should not set |
2158 // is_unsynced. | 2184 // is_unsynced. |
2159 { | 2185 { |
2160 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2186 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2161 WriteNode node(&trans); | 2187 WriteNode node(&trans); |
2162 EXPECT_TRUE(node.InitByClientTagLookup(syncable::PASSWORDS, client_tag)); | 2188 EXPECT_EQ(BaseNode::INIT_OK, |
| 2189 node.InitByClientTagLookup(syncable::PASSWORDS, client_tag)); |
2163 node.SetPasswordSpecifics(node.GetPasswordSpecifics()); | 2190 node.SetPasswordSpecifics(node.GetPasswordSpecifics()); |
2164 } | 2191 } |
2165 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PASSWORDS, client_tag)); | 2192 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PASSWORDS, client_tag)); |
2166 | 2193 |
2167 // Manually change to different data. Should set is_unsynced. | 2194 // Manually change to different data. Should set is_unsynced. |
2168 { | 2195 { |
2169 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2196 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2170 WriteNode node(&trans); | 2197 WriteNode node(&trans); |
2171 EXPECT_TRUE(node.InitByClientTagLookup(syncable::PASSWORDS, client_tag)); | 2198 EXPECT_EQ(BaseNode::INIT_OK, |
| 2199 node.InitByClientTagLookup(syncable::PASSWORDS, client_tag)); |
2172 Cryptographer* cryptographer = trans.GetCryptographer(); | 2200 Cryptographer* cryptographer = trans.GetCryptographer(); |
2173 sync_pb::PasswordSpecificsData data; | 2201 sync_pb::PasswordSpecificsData data; |
2174 data.set_password_value("secret2"); | 2202 data.set_password_value("secret2"); |
2175 cryptographer->Encrypt( | 2203 cryptographer->Encrypt( |
2176 data, | 2204 data, |
2177 entity_specifics.mutable_password()->mutable_encrypted()); | 2205 entity_specifics.mutable_password()->mutable_encrypted()); |
2178 node.SetPasswordSpecifics(data); | 2206 node.SetPasswordSpecifics(data); |
2179 const syncable::Entry* node_entry = node.GetEntry(); | 2207 const syncable::Entry* node_entry = node.GetEntry(); |
2180 EXPECT_TRUE(node_entry->Get(IS_UNSYNCED)); | 2208 EXPECT_TRUE(node_entry->Get(IS_UNSYNCED)); |
2181 } | 2209 } |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2253 BaseNode::GenerateSyncableHash(syncable::BOOKMARKS, | 2281 BaseNode::GenerateSyncableHash(syncable::BOOKMARKS, |
2254 client_tag), | 2282 client_tag), |
2255 entity_specifics); | 2283 entity_specifics); |
2256 // New node shouldn't start off unsynced. | 2284 // New node shouldn't start off unsynced. |
2257 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); | 2285 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); |
2258 | 2286 |
2259 // Manually change to the same title. Should not set is_unsynced. | 2287 // Manually change to the same title. Should not set is_unsynced. |
2260 { | 2288 { |
2261 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2289 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2262 WriteNode node(&trans); | 2290 WriteNode node(&trans); |
2263 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); | 2291 EXPECT_EQ(BaseNode::INIT_OK, |
| 2292 node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); |
2264 node.SetTitle(UTF8ToWide(client_tag)); | 2293 node.SetTitle(UTF8ToWide(client_tag)); |
2265 } | 2294 } |
2266 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); | 2295 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); |
2267 | 2296 |
2268 // Manually change to new title. Should set is_unsynced. | 2297 // Manually change to new title. Should set is_unsynced. |
2269 { | 2298 { |
2270 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2299 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2271 WriteNode node(&trans); | 2300 WriteNode node(&trans); |
2272 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); | 2301 EXPECT_EQ(BaseNode::INIT_OK, |
| 2302 node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); |
2273 node.SetTitle(UTF8ToWide("title2")); | 2303 node.SetTitle(UTF8ToWide("title2")); |
2274 } | 2304 } |
2275 EXPECT_TRUE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); | 2305 EXPECT_TRUE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); |
2276 } | 2306 } |
2277 | 2307 |
2278 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for encrypted | 2308 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for encrypted |
2279 // bookmarks when we write the same data, but does set it when we write new | 2309 // bookmarks when we write the same data, but does set it when we write new |
2280 // data. | 2310 // data. |
2281 TEST_F(SyncManagerTest, SetBookmarkTitleWithEncryption) { | 2311 TEST_F(SyncManagerTest, SetBookmarkTitleWithEncryption) { |
2282 std::string client_tag = "title"; | 2312 std::string client_tag = "title"; |
(...skipping 15 matching lines...) Expand all Loading... |
2298 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); | 2328 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); |
2299 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | 2329 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); |
2300 PumpLoop(); | 2330 PumpLoop(); |
2301 EXPECT_TRUE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); | 2331 EXPECT_TRUE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); |
2302 | 2332 |
2303 // Manually change to the same title. Should not set is_unsynced. | 2333 // Manually change to the same title. Should not set is_unsynced. |
2304 // NON_UNIQUE_NAME should be kEncryptedString. | 2334 // NON_UNIQUE_NAME should be kEncryptedString. |
2305 { | 2335 { |
2306 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2336 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2307 WriteNode node(&trans); | 2337 WriteNode node(&trans); |
2308 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); | 2338 EXPECT_EQ(BaseNode::INIT_OK, |
| 2339 node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); |
2309 node.SetTitle(UTF8ToWide(client_tag)); | 2340 node.SetTitle(UTF8ToWide(client_tag)); |
2310 const syncable::Entry* node_entry = node.GetEntry(); | 2341 const syncable::Entry* node_entry = node.GetEntry(); |
2311 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2342 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
2312 EXPECT_TRUE(specifics.has_encrypted()); | 2343 EXPECT_TRUE(specifics.has_encrypted()); |
2313 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); | 2344 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); |
2314 } | 2345 } |
2315 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); | 2346 EXPECT_FALSE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); |
2316 | 2347 |
2317 // Manually change to new title. Should set is_unsynced. NON_UNIQUE_NAME | 2348 // Manually change to new title. Should set is_unsynced. NON_UNIQUE_NAME |
2318 // should still be kEncryptedString. | 2349 // should still be kEncryptedString. |
2319 { | 2350 { |
2320 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2351 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2321 WriteNode node(&trans); | 2352 WriteNode node(&trans); |
2322 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); | 2353 EXPECT_EQ(BaseNode::INIT_OK, |
| 2354 node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); |
2323 node.SetTitle(UTF8ToWide("title2")); | 2355 node.SetTitle(UTF8ToWide("title2")); |
2324 const syncable::Entry* node_entry = node.GetEntry(); | 2356 const syncable::Entry* node_entry = node.GetEntry(); |
2325 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2357 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
2326 EXPECT_TRUE(specifics.has_encrypted()); | 2358 EXPECT_TRUE(specifics.has_encrypted()); |
2327 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); | 2359 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); |
2328 } | 2360 } |
2329 EXPECT_TRUE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); | 2361 EXPECT_TRUE(ResetUnsyncedEntry(syncable::BOOKMARKS, client_tag)); |
2330 } | 2362 } |
2331 | 2363 |
2332 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for non-bookmarks | 2364 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for non-bookmarks |
2333 // when we write the same data, but does set it when we write new data. | 2365 // when we write the same data, but does set it when we write new data. |
2334 TEST_F(SyncManagerTest, SetNonBookmarkTitle) { | 2366 TEST_F(SyncManagerTest, SetNonBookmarkTitle) { |
2335 std::string client_tag = "title"; | 2367 std::string client_tag = "title"; |
2336 sync_pb::EntitySpecifics entity_specifics; | 2368 sync_pb::EntitySpecifics entity_specifics; |
2337 entity_specifics.mutable_preference()->set_name("name"); | 2369 entity_specifics.mutable_preference()->set_name("name"); |
2338 entity_specifics.mutable_preference()->set_value("value"); | 2370 entity_specifics.mutable_preference()->set_value("value"); |
2339 MakeServerNode(sync_manager_.GetUserShare(), | 2371 MakeServerNode(sync_manager_.GetUserShare(), |
2340 syncable::PREFERENCES, | 2372 syncable::PREFERENCES, |
2341 client_tag, | 2373 client_tag, |
2342 BaseNode::GenerateSyncableHash(syncable::PREFERENCES, | 2374 BaseNode::GenerateSyncableHash(syncable::PREFERENCES, |
2343 client_tag), | 2375 client_tag), |
2344 entity_specifics); | 2376 entity_specifics); |
2345 // New node shouldn't start off unsynced. | 2377 // New node shouldn't start off unsynced. |
2346 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PREFERENCES, client_tag)); | 2378 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PREFERENCES, client_tag)); |
2347 | 2379 |
2348 // Manually change to the same title. Should not set is_unsynced. | 2380 // Manually change to the same title. Should not set is_unsynced. |
2349 { | 2381 { |
2350 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2382 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2351 WriteNode node(&trans); | 2383 WriteNode node(&trans); |
2352 EXPECT_TRUE(node.InitByClientTagLookup(syncable::PREFERENCES, client_tag)); | 2384 EXPECT_EQ(BaseNode::INIT_OK, |
| 2385 node.InitByClientTagLookup(syncable::PREFERENCES, client_tag)); |
2353 node.SetTitle(UTF8ToWide(client_tag)); | 2386 node.SetTitle(UTF8ToWide(client_tag)); |
2354 } | 2387 } |
2355 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PREFERENCES, client_tag)); | 2388 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PREFERENCES, client_tag)); |
2356 | 2389 |
2357 // Manually change to new title. Should set is_unsynced. | 2390 // Manually change to new title. Should set is_unsynced. |
2358 { | 2391 { |
2359 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2392 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2360 WriteNode node(&trans); | 2393 WriteNode node(&trans); |
2361 EXPECT_TRUE(node.InitByClientTagLookup(syncable::PREFERENCES, client_tag)); | 2394 EXPECT_EQ(BaseNode::INIT_OK, |
| 2395 node.InitByClientTagLookup(syncable::PREFERENCES, client_tag)); |
2362 node.SetTitle(UTF8ToWide("title2")); | 2396 node.SetTitle(UTF8ToWide("title2")); |
2363 } | 2397 } |
2364 EXPECT_TRUE(ResetUnsyncedEntry(syncable::PREFERENCES, client_tag)); | 2398 EXPECT_TRUE(ResetUnsyncedEntry(syncable::PREFERENCES, client_tag)); |
2365 } | 2399 } |
2366 | 2400 |
2367 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for encrypted | 2401 // Verify SetTitle(..) doesn't unnecessarily set IS_UNSYNCED for encrypted |
2368 // non-bookmarks when we write the same data or when we write new data | 2402 // non-bookmarks when we write the same data or when we write new data |
2369 // data (should remained kEncryptedString). | 2403 // data (should remained kEncryptedString). |
2370 TEST_F(SyncManagerTest, SetNonBookmarkTitleWithEncryption) { | 2404 TEST_F(SyncManagerTest, SetNonBookmarkTitleWithEncryption) { |
2371 std::string client_tag = "title"; | 2405 std::string client_tag = "title"; |
(...skipping 17 matching lines...) Expand all Loading... |
2389 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); | 2423 EXPECT_TRUE(SetUpEncryption(WRITE_TO_NIGORI, FULL_ENCRYPTION)); |
2390 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); | 2424 sync_manager_.RefreshNigori(kTestChromeVersion, base::Bind(&DoNothing)); |
2391 PumpLoop(); | 2425 PumpLoop(); |
2392 EXPECT_TRUE(ResetUnsyncedEntry(syncable::PREFERENCES, client_tag)); | 2426 EXPECT_TRUE(ResetUnsyncedEntry(syncable::PREFERENCES, client_tag)); |
2393 | 2427 |
2394 // Manually change to the same title. Should not set is_unsynced. | 2428 // Manually change to the same title. Should not set is_unsynced. |
2395 // NON_UNIQUE_NAME should be kEncryptedString. | 2429 // NON_UNIQUE_NAME should be kEncryptedString. |
2396 { | 2430 { |
2397 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2431 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2398 WriteNode node(&trans); | 2432 WriteNode node(&trans); |
2399 EXPECT_TRUE(node.InitByClientTagLookup(syncable::PREFERENCES, client_tag)); | 2433 EXPECT_EQ(BaseNode::INIT_OK, |
| 2434 node.InitByClientTagLookup(syncable::PREFERENCES, client_tag)); |
2400 node.SetTitle(UTF8ToWide(client_tag)); | 2435 node.SetTitle(UTF8ToWide(client_tag)); |
2401 const syncable::Entry* node_entry = node.GetEntry(); | 2436 const syncable::Entry* node_entry = node.GetEntry(); |
2402 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2437 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
2403 EXPECT_TRUE(specifics.has_encrypted()); | 2438 EXPECT_TRUE(specifics.has_encrypted()); |
2404 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); | 2439 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); |
2405 } | 2440 } |
2406 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PREFERENCES, client_tag)); | 2441 EXPECT_FALSE(ResetUnsyncedEntry(syncable::PREFERENCES, client_tag)); |
2407 | 2442 |
2408 // Manually change to new title. Should not set is_unsynced because the | 2443 // Manually change to new title. Should not set is_unsynced because the |
2409 // NON_UNIQUE_NAME should still be kEncryptedString. | 2444 // NON_UNIQUE_NAME should still be kEncryptedString. |
2410 { | 2445 { |
2411 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2446 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2412 WriteNode node(&trans); | 2447 WriteNode node(&trans); |
2413 EXPECT_TRUE(node.InitByClientTagLookup(syncable::PREFERENCES, client_tag)); | 2448 EXPECT_EQ(BaseNode::INIT_OK, |
| 2449 node.InitByClientTagLookup(syncable::PREFERENCES, client_tag)); |
2414 node.SetTitle(UTF8ToWide("title2")); | 2450 node.SetTitle(UTF8ToWide("title2")); |
2415 const syncable::Entry* node_entry = node.GetEntry(); | 2451 const syncable::Entry* node_entry = node.GetEntry(); |
2416 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2452 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
2417 EXPECT_TRUE(specifics.has_encrypted()); | 2453 EXPECT_TRUE(specifics.has_encrypted()); |
2418 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); | 2454 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); |
2419 EXPECT_FALSE(node_entry->Get(IS_UNSYNCED)); | 2455 EXPECT_FALSE(node_entry->Get(IS_UNSYNCED)); |
2420 } | 2456 } |
2421 } | 2457 } |
2422 | 2458 |
2423 // Create an encrypted entry when the cryptographer doesn't think the type is | 2459 // Create an encrypted entry when the cryptographer doesn't think the type is |
(...skipping 19 matching lines...) Expand all Loading... |
2443 } | 2479 } |
2444 MakeServerNode(sync_manager_.GetUserShare(), syncable::BOOKMARKS, client_tag, | 2480 MakeServerNode(sync_manager_.GetUserShare(), syncable::BOOKMARKS, client_tag, |
2445 BaseNode::GenerateSyncableHash(syncable::BOOKMARKS, | 2481 BaseNode::GenerateSyncableHash(syncable::BOOKMARKS, |
2446 client_tag), | 2482 client_tag), |
2447 entity_specifics); | 2483 entity_specifics); |
2448 | 2484 |
2449 { | 2485 { |
2450 // Verify the data. | 2486 // Verify the data. |
2451 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2487 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2452 ReadNode node(&trans); | 2488 ReadNode node(&trans); |
2453 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); | 2489 EXPECT_EQ(BaseNode::INIT_OK, |
| 2490 node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); |
2454 EXPECT_EQ(title, node.GetTitle()); | 2491 EXPECT_EQ(title, node.GetTitle()); |
2455 EXPECT_EQ(GURL(url), node.GetURL()); | 2492 EXPECT_EQ(GURL(url), node.GetURL()); |
2456 } | 2493 } |
2457 | 2494 |
2458 { | 2495 { |
2459 // Overwrite the url (which overwrites the specifics). | 2496 // Overwrite the url (which overwrites the specifics). |
2460 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2497 WriteTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2461 WriteNode node(&trans); | 2498 WriteNode node(&trans); |
2462 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); | 2499 EXPECT_EQ(BaseNode::INIT_OK, |
| 2500 node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); |
2463 node.SetURL(GURL(url2)); | 2501 node.SetURL(GURL(url2)); |
2464 } | 2502 } |
2465 | 2503 |
2466 { | 2504 { |
2467 // Verify it's still encrypted and it has the most recent url. | 2505 // Verify it's still encrypted and it has the most recent url. |
2468 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); | 2506 ReadTransaction trans(FROM_HERE, sync_manager_.GetUserShare()); |
2469 ReadNode node(&trans); | 2507 ReadNode node(&trans); |
2470 EXPECT_TRUE(node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); | 2508 EXPECT_EQ(BaseNode::INIT_OK, |
| 2509 node.InitByClientTagLookup(syncable::BOOKMARKS, client_tag)); |
2471 EXPECT_EQ(title, node.GetTitle()); | 2510 EXPECT_EQ(title, node.GetTitle()); |
2472 EXPECT_EQ(GURL(url2), node.GetURL()); | 2511 EXPECT_EQ(GURL(url2), node.GetURL()); |
2473 const syncable::Entry* node_entry = node.GetEntry(); | 2512 const syncable::Entry* node_entry = node.GetEntry(); |
2474 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); | 2513 EXPECT_EQ(kEncryptedString, node_entry->Get(NON_UNIQUE_NAME)); |
2475 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); | 2514 const sync_pb::EntitySpecifics& specifics = node_entry->Get(SPECIFICS); |
2476 EXPECT_TRUE(specifics.has_encrypted()); | 2515 EXPECT_TRUE(specifics.has_encrypted()); |
2477 } | 2516 } |
2478 } | 2517 } |
2479 | 2518 |
2480 } // namespace browser_sync | 2519 } // namespace browser_sync |
OLD | NEW |