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

Side by Side Diff: sync/engine/apply_updates_command_unittest.cc

Issue 10844005: [Sync] Refactor GetEncryptedTypes usage. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase + add dcheck Created 8 years, 3 months 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
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 #include <string> 5 #include <string>
6 6
7 #include "base/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/stringprintf.h" 10 #include "base/stringprintf.h"
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 workers()->push_back( 58 workers()->push_back(
59 make_scoped_refptr(new FakeModelWorker(GROUP_UI))); 59 make_scoped_refptr(new FakeModelWorker(GROUP_UI)));
60 workers()->push_back( 60 workers()->push_back(
61 make_scoped_refptr(new FakeModelWorker(GROUP_PASSWORD))); 61 make_scoped_refptr(new FakeModelWorker(GROUP_PASSWORD)));
62 (*mutable_routing_info())[BOOKMARKS] = GROUP_UI; 62 (*mutable_routing_info())[BOOKMARKS] = GROUP_UI;
63 (*mutable_routing_info())[PASSWORDS] = GROUP_PASSWORD; 63 (*mutable_routing_info())[PASSWORDS] = GROUP_PASSWORD;
64 (*mutable_routing_info())[NIGORI] = GROUP_PASSIVE; 64 (*mutable_routing_info())[NIGORI] = GROUP_PASSIVE;
65 SyncerCommandTest::SetUp(); 65 SyncerCommandTest::SetUp();
66 entry_factory_.reset(new TestEntryFactory(directory())); 66 entry_factory_.reset(new TestEntryFactory(directory()));
67 ExpectNoGroupsToChange(apply_updates_command_); 67 ExpectNoGroupsToChange(apply_updates_command_);
68
69 syncable::ReadTransaction trans(FROM_HERE, directory());
70 directory()->GetCryptographer(&trans)->SetNigoriHandler(
71 &fake_encryption_handler_);
72 fake_encryption_handler_.set_cryptographer(
73 directory()->GetCryptographer(&trans));
74 } 68 }
75 69
76 protected: 70 protected:
77 DISALLOW_COPY_AND_ASSIGN(ApplyUpdatesCommandTest); 71 DISALLOW_COPY_AND_ASSIGN(ApplyUpdatesCommandTest);
78 72
79 ApplyUpdatesCommand apply_updates_command_; 73 ApplyUpdatesCommand apply_updates_command_;
80 FakeEncryptor encryptor_;
81 TestIdFactory id_factory_; 74 TestIdFactory id_factory_;
82 scoped_ptr<TestEntryFactory> entry_factory_; 75 scoped_ptr<TestEntryFactory> entry_factory_;
83 FakeSyncEncryptionHandler fake_encryption_handler_;
84 }; 76 };
85 77
86 TEST_F(ApplyUpdatesCommandTest, Simple) { 78 TEST_F(ApplyUpdatesCommandTest, Simple) {
87 string root_server_id = syncable::GetNullId().GetServerId(); 79 string root_server_id = syncable::GetNullId().GetServerId();
88 entry_factory_->CreateUnappliedNewItemWithParent("parent", 80 entry_factory_->CreateUnappliedNewItemWithParent("parent",
89 DefaultBookmarkSpecifics(), 81 DefaultBookmarkSpecifics(),
90 root_server_id); 82 root_server_id);
91 entry_factory_->CreateUnappliedNewItemWithParent("child", 83 entry_factory_->CreateUnappliedNewItemWithParent("child",
92 DefaultBookmarkSpecifics(), 84 DefaultBookmarkSpecifics(),
93 "parent"); 85 "parent");
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 << "conflict"; 451 << "conflict";
460 EXPECT_EQ(1, status->conflict_progress()->EncryptionConflictingItemsSize()) 452 EXPECT_EQ(1, status->conflict_progress()->EncryptionConflictingItemsSize())
461 << "The updates that can't be decrypted should be in encryption " 453 << "The updates that can't be decrypted should be in encryption "
462 << "conflict"; 454 << "conflict";
463 EXPECT_EQ(0, status->update_progress()->SuccessfullyAppliedUpdateCount()) 455 EXPECT_EQ(0, status->update_progress()->SuccessfullyAppliedUpdateCount())
464 << "No update that can't be decrypted should be applied"; 456 << "No update that can't be decrypted should be applied";
465 } 457 }
466 } 458 }
467 459
468 TEST_F(ApplyUpdatesCommandTest, SomeUndecryptablePassword) { 460 TEST_F(ApplyUpdatesCommandTest, SomeUndecryptablePassword) {
461 Cryptographer* cryptographer;
469 // Only decryptable password updates should be applied. 462 // Only decryptable password updates should be applied.
470 { 463 {
471 sync_pb::EntitySpecifics specifics; 464 sync_pb::EntitySpecifics specifics;
472 sync_pb::PasswordSpecificsData data; 465 sync_pb::PasswordSpecificsData data;
473 data.set_origin("http://example.com/1"); 466 data.set_origin("http://example.com/1");
474 { 467 {
475 syncable::ReadTransaction trans(FROM_HERE, directory()); 468 syncable::ReadTransaction trans(FROM_HERE, directory());
476 Cryptographer* cryptographer = directory()->GetCryptographer(&trans); 469 cryptographer = directory()->GetCryptographer(&trans);
477 470
478 KeyParams params = {"localhost", "dummy", "foobar"}; 471 KeyParams params = {"localhost", "dummy", "foobar"};
479 cryptographer->AddKey(params); 472 cryptographer->AddKey(params);
480 473
481 cryptographer->Encrypt(data, 474 cryptographer->Encrypt(data,
482 specifics.mutable_password()->mutable_encrypted()); 475 specifics.mutable_password()->mutable_encrypted());
483 } 476 }
484 entry_factory_->CreateUnappliedNewItem("item1", specifics, false); 477 entry_factory_->CreateUnappliedNewItem("item1", specifics, false);
485 } 478 }
486 { 479 {
487 // Create a new cryptographer, independent of the one in the session. 480 // Create a new cryptographer, independent of the one in the session.
488 Cryptographer cryptographer(&encryptor_); 481 Cryptographer other_cryptographer(cryptographer->encryptor());
489 KeyParams params = {"localhost", "dummy", "bazqux"}; 482 KeyParams params = {"localhost", "dummy", "bazqux"};
490 cryptographer.AddKey(params); 483 other_cryptographer.AddKey(params);
491 484
492 sync_pb::EntitySpecifics specifics; 485 sync_pb::EntitySpecifics specifics;
493 sync_pb::PasswordSpecificsData data; 486 sync_pb::PasswordSpecificsData data;
494 data.set_origin("http://example.com/2"); 487 data.set_origin("http://example.com/2");
495 488
496 cryptographer.Encrypt(data, 489 other_cryptographer.Encrypt(data,
497 specifics.mutable_password()->mutable_encrypted()); 490 specifics.mutable_password()->mutable_encrypted());
498 entry_factory_->CreateUnappliedNewItem("item2", specifics, false); 491 entry_factory_->CreateUnappliedNewItem("item2", specifics, false);
499 } 492 }
500 493
501 ExpectGroupToChange(apply_updates_command_, GROUP_PASSWORD); 494 ExpectGroupToChange(apply_updates_command_, GROUP_PASSWORD);
502 apply_updates_command_.ExecuteImpl(session()); 495 apply_updates_command_.ExecuteImpl(session());
503 496
504 sessions::StatusController* status = session()->mutable_status_controller(); 497 sessions::StatusController* status = session()->mutable_status_controller();
505 EXPECT_TRUE(status->HasConflictingUpdates()) 498 EXPECT_TRUE(status->HasConflictingUpdates())
506 << "Updates that can't be decrypted should trigger the syncer to have " 499 << "Updates that can't be decrypted should trigger the syncer to have "
(...skipping 18 matching lines...) Expand all
525 TEST_F(ApplyUpdatesCommandTest, NigoriUpdate) { 518 TEST_F(ApplyUpdatesCommandTest, NigoriUpdate) {
526 // Storing the cryptographer separately is bad, but for this test we 519 // Storing the cryptographer separately is bad, but for this test we
527 // know it's safe. 520 // know it's safe.
528 Cryptographer* cryptographer; 521 Cryptographer* cryptographer;
529 ModelTypeSet encrypted_types; 522 ModelTypeSet encrypted_types;
530 encrypted_types.Put(PASSWORDS); 523 encrypted_types.Put(PASSWORDS);
531 encrypted_types.Put(NIGORI); 524 encrypted_types.Put(NIGORI);
532 { 525 {
533 syncable::ReadTransaction trans(FROM_HERE, directory()); 526 syncable::ReadTransaction trans(FROM_HERE, directory());
534 cryptographer = directory()->GetCryptographer(&trans); 527 cryptographer = directory()->GetCryptographer(&trans);
535 EXPECT_TRUE(cryptographer->GetEncryptedTypes().Equals(encrypted_types)); 528 EXPECT_TRUE(directory()->GetNigoriHandler()->GetEncryptedTypes(&trans)
529 .Equals(encrypted_types));
536 } 530 }
537 531
538 // Nigori node updates should update the Cryptographer. 532 // Nigori node updates should update the Cryptographer.
539 Cryptographer other_cryptographer(&encryptor_); 533 Cryptographer other_cryptographer(cryptographer->encryptor());
540 KeyParams params = {"localhost", "dummy", "foobar"}; 534 KeyParams params = {"localhost", "dummy", "foobar"};
541 other_cryptographer.AddKey(params); 535 other_cryptographer.AddKey(params);
542 536
543 sync_pb::EntitySpecifics specifics; 537 sync_pb::EntitySpecifics specifics;
544 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori(); 538 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori();
545 other_cryptographer.GetKeys(nigori->mutable_encrypted()); 539 other_cryptographer.GetKeys(nigori->mutable_encrypted());
546 nigori->set_encrypt_everything(true); 540 nigori->set_encrypt_everything(true);
547 entry_factory_->CreateUnappliedNewItem( 541 entry_factory_->CreateUnappliedNewItem(
548 ModelTypeToRootTag(NIGORI), specifics, true); 542 ModelTypeToRootTag(NIGORI), specifics, true);
549 EXPECT_FALSE(cryptographer->has_pending_keys()); 543 EXPECT_FALSE(cryptographer->has_pending_keys());
550 544
551 ExpectGroupToChange(apply_updates_command_, GROUP_PASSIVE); 545 ExpectGroupToChange(apply_updates_command_, GROUP_PASSIVE);
552 apply_updates_command_.ExecuteImpl(session()); 546 apply_updates_command_.ExecuteImpl(session());
553 547
554 sessions::StatusController* status = session()->mutable_status_controller(); 548 sessions::StatusController* status = session()->mutable_status_controller();
555 sessions::ScopedModelSafeGroupRestriction r(status, GROUP_PASSIVE); 549 sessions::ScopedModelSafeGroupRestriction r(status, GROUP_PASSIVE);
556 ASSERT_TRUE(status->update_progress()); 550 ASSERT_TRUE(status->update_progress());
557 EXPECT_EQ(1, status->update_progress()->AppliedUpdatesSize()) 551 EXPECT_EQ(1, status->update_progress()->AppliedUpdatesSize())
558 << "All updates should have been attempted"; 552 << "All updates should have been attempted";
559 ASSERT_TRUE(status->conflict_progress()); 553 ASSERT_TRUE(status->conflict_progress());
560 EXPECT_EQ(0, status->conflict_progress()->SimpleConflictingItemsSize()) 554 EXPECT_EQ(0, status->conflict_progress()->SimpleConflictingItemsSize())
561 << "The nigori update shouldn't be in conflict"; 555 << "The nigori update shouldn't be in conflict";
562 EXPECT_EQ(1, status->update_progress()->SuccessfullyAppliedUpdateCount()) 556 EXPECT_EQ(1, status->update_progress()->SuccessfullyAppliedUpdateCount())
563 << "The nigori update should be applied"; 557 << "The nigori update should be applied";
564 558
565 EXPECT_FALSE(cryptographer->is_ready()); 559 EXPECT_FALSE(cryptographer->is_ready());
566 EXPECT_TRUE(cryptographer->has_pending_keys()); 560 EXPECT_TRUE(cryptographer->has_pending_keys());
567 EXPECT_TRUE(cryptographer->GetEncryptedTypes().Equals(ModelTypeSet::All())); 561 {
562 syncable::ReadTransaction trans(FROM_HERE, directory());
563 EXPECT_TRUE(directory()->GetNigoriHandler()->GetEncryptedTypes(&trans)
564 .Equals(ModelTypeSet::All()));
565 }
568 } 566 }
569 567
570 TEST_F(ApplyUpdatesCommandTest, NigoriUpdateForDisabledTypes) { 568 TEST_F(ApplyUpdatesCommandTest, NigoriUpdateForDisabledTypes) {
571 // Storing the cryptographer separately is bad, but for this test we 569 // Storing the cryptographer separately is bad, but for this test we
572 // know it's safe. 570 // know it's safe.
573 Cryptographer* cryptographer; 571 Cryptographer* cryptographer;
574 ModelTypeSet encrypted_types; 572 ModelTypeSet encrypted_types;
575 encrypted_types.Put(PASSWORDS); 573 encrypted_types.Put(PASSWORDS);
576 encrypted_types.Put(NIGORI); 574 encrypted_types.Put(NIGORI);
577 { 575 {
578 syncable::ReadTransaction trans(FROM_HERE, directory()); 576 syncable::ReadTransaction trans(FROM_HERE, directory());
579 cryptographer = directory()->GetCryptographer(&trans); 577 cryptographer = directory()->GetCryptographer(&trans);
580 EXPECT_TRUE(cryptographer->GetEncryptedTypes().Equals(encrypted_types)); 578 EXPECT_TRUE(directory()->GetNigoriHandler()->GetEncryptedTypes(&trans)
579 .Equals(encrypted_types));
581 } 580 }
582 581
583 // Nigori node updates should update the Cryptographer. 582 // Nigori node updates should update the Cryptographer.
584 Cryptographer other_cryptographer(&encryptor_); 583 Cryptographer other_cryptographer(cryptographer->encryptor());
585 KeyParams params = {"localhost", "dummy", "foobar"}; 584 KeyParams params = {"localhost", "dummy", "foobar"};
586 other_cryptographer.AddKey(params); 585 other_cryptographer.AddKey(params);
587 586
588 sync_pb::EntitySpecifics specifics; 587 sync_pb::EntitySpecifics specifics;
589 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori(); 588 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori();
590 other_cryptographer.GetKeys(nigori->mutable_encrypted()); 589 other_cryptographer.GetKeys(nigori->mutable_encrypted());
591 nigori->set_encrypt_everything(true); 590 nigori->set_encrypt_everything(true);
592 entry_factory_->CreateUnappliedNewItem( 591 entry_factory_->CreateUnappliedNewItem(
593 ModelTypeToRootTag(NIGORI), specifics, true); 592 ModelTypeToRootTag(NIGORI), specifics, true);
594 EXPECT_FALSE(cryptographer->has_pending_keys()); 593 EXPECT_FALSE(cryptographer->has_pending_keys());
595 594
596 ExpectGroupToChange(apply_updates_command_, GROUP_PASSIVE); 595 ExpectGroupToChange(apply_updates_command_, GROUP_PASSIVE);
597 apply_updates_command_.ExecuteImpl(session()); 596 apply_updates_command_.ExecuteImpl(session());
598 597
599 sessions::StatusController* status = session()->mutable_status_controller(); 598 sessions::StatusController* status = session()->mutable_status_controller();
600 sessions::ScopedModelSafeGroupRestriction r(status, GROUP_PASSIVE); 599 sessions::ScopedModelSafeGroupRestriction r(status, GROUP_PASSIVE);
601 ASSERT_TRUE(status->update_progress()); 600 ASSERT_TRUE(status->update_progress());
602 EXPECT_EQ(1, status->update_progress()->AppliedUpdatesSize()) 601 EXPECT_EQ(1, status->update_progress()->AppliedUpdatesSize())
603 << "All updates should have been attempted"; 602 << "All updates should have been attempted";
604 ASSERT_TRUE(status->conflict_progress()); 603 ASSERT_TRUE(status->conflict_progress());
605 EXPECT_EQ(0, status->conflict_progress()->SimpleConflictingItemsSize()) 604 EXPECT_EQ(0, status->conflict_progress()->SimpleConflictingItemsSize())
606 << "The nigori update shouldn't be in conflict"; 605 << "The nigori update shouldn't be in conflict";
607 EXPECT_EQ(1, status->update_progress()->SuccessfullyAppliedUpdateCount()) 606 EXPECT_EQ(1, status->update_progress()->SuccessfullyAppliedUpdateCount())
608 << "The nigori update should be applied"; 607 << "The nigori update should be applied";
609 608
610 EXPECT_FALSE(cryptographer->is_ready()); 609 EXPECT_FALSE(cryptographer->is_ready());
611 EXPECT_TRUE(cryptographer->has_pending_keys()); 610 EXPECT_TRUE(cryptographer->has_pending_keys());
612 EXPECT_TRUE(cryptographer->GetEncryptedTypes().Equals(ModelTypeSet::All())); 611 {
612 syncable::ReadTransaction trans(FROM_HERE, directory());
613 EXPECT_TRUE(directory()->GetNigoriHandler()->GetEncryptedTypes(&trans)
614 .Equals(ModelTypeSet::All()));
615 }
613 } 616 }
614 617
615 // Create some local unsynced and unencrypted data. Apply a nigori update that 618 // Create some local unsynced and unencrypted data. Apply a nigori update that
616 // turns on encryption for the unsynced data. Ensure we properly encrypt the 619 // turns on encryption for the unsynced data. Ensure we properly encrypt the
617 // data as part of the nigori update. Apply another nigori update with no 620 // data as part of the nigori update. Apply another nigori update with no
618 // changes. Ensure we ignore already-encrypted unsynced data and that nothing 621 // changes. Ensure we ignore already-encrypted unsynced data and that nothing
619 // breaks. 622 // breaks.
620 TEST_F(ApplyUpdatesCommandTest, EncryptUnsyncedChanges) { 623 TEST_F(ApplyUpdatesCommandTest, EncryptUnsyncedChanges) {
621 // Storing the cryptographer separately is bad, but for this test we 624 // Storing the cryptographer separately is bad, but for this test we
622 // know it's safe. 625 // know it's safe.
623 Cryptographer* cryptographer; 626 Cryptographer* cryptographer;
624 ModelTypeSet encrypted_types; 627 ModelTypeSet encrypted_types;
625 encrypted_types.Put(PASSWORDS); 628 encrypted_types.Put(PASSWORDS);
626 encrypted_types.Put(NIGORI); 629 encrypted_types.Put(NIGORI);
627 { 630 {
628 syncable::ReadTransaction trans(FROM_HERE, directory()); 631 syncable::ReadTransaction trans(FROM_HERE, directory());
629 cryptographer = directory()->GetCryptographer(&trans); 632 cryptographer = directory()->GetCryptographer(&trans);
630 EXPECT_TRUE(cryptographer->GetEncryptedTypes().Equals(encrypted_types)); 633 EXPECT_TRUE(directory()->GetNigoriHandler()->GetEncryptedTypes(&trans)
634 .Equals(encrypted_types));
631 635
632 // With default encrypted_types, this should be true. 636 // With default encrypted_types, this should be true.
633 EXPECT_TRUE(VerifyUnsyncedChangesAreEncrypted(&trans, encrypted_types)); 637 EXPECT_TRUE(VerifyUnsyncedChangesAreEncrypted(&trans, encrypted_types));
634 638
635 Syncer::UnsyncedMetaHandles handles; 639 Syncer::UnsyncedMetaHandles handles;
636 GetUnsyncedEntries(&trans, &handles); 640 GetUnsyncedEntries(&trans, &handles);
637 EXPECT_TRUE(handles.empty()); 641 EXPECT_TRUE(handles.empty());
638 } 642 }
639 643
640 // Create unsynced bookmarks without encryption. 644 // Create unsynced bookmarks without encryption.
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
697 EXPECT_EQ(1, status->update_progress()->SuccessfullyAppliedUpdateCount()) 701 EXPECT_EQ(1, status->update_progress()->SuccessfullyAppliedUpdateCount())
698 << "The nigori update should be applied"; 702 << "The nigori update should be applied";
699 } 703 }
700 EXPECT_FALSE(cryptographer->has_pending_keys()); 704 EXPECT_FALSE(cryptographer->has_pending_keys());
701 EXPECT_TRUE(cryptographer->is_ready()); 705 EXPECT_TRUE(cryptographer->is_ready());
702 { 706 {
703 syncable::ReadTransaction trans(FROM_HERE, directory()); 707 syncable::ReadTransaction trans(FROM_HERE, directory());
704 708
705 // If ProcessUnsyncedChangesForEncryption worked, all our unsynced changes 709 // If ProcessUnsyncedChangesForEncryption worked, all our unsynced changes
706 // should be encrypted now. 710 // should be encrypted now.
707 EXPECT_TRUE(ModelTypeSet::All().Equals( 711 EXPECT_TRUE(directory()->GetNigoriHandler()->GetEncryptedTypes(&trans)
708 cryptographer->GetEncryptedTypes())); 712 .Equals(ModelTypeSet::All()));
709 EXPECT_TRUE(VerifyUnsyncedChangesAreEncrypted(&trans, encrypted_types)); 713 EXPECT_TRUE(VerifyUnsyncedChangesAreEncrypted(&trans, encrypted_types));
710 714
711 Syncer::UnsyncedMetaHandles handles; 715 Syncer::UnsyncedMetaHandles handles;
712 GetUnsyncedEntries(&trans, &handles); 716 GetUnsyncedEntries(&trans, &handles);
713 EXPECT_EQ(2*batch_s+1, handles.size()); 717 EXPECT_EQ(2*batch_s+1, handles.size());
714 } 718 }
715 719
716 // Simulate another nigori update that doesn't change anything. 720 // Simulate another nigori update that doesn't change anything.
717 { 721 {
718 WriteTransaction trans(FROM_HERE, UNITTEST, directory()); 722 WriteTransaction trans(FROM_HERE, UNITTEST, directory());
(...skipping 18 matching lines...) Expand all
737 << "No updates should be in conflict"; 741 << "No updates should be in conflict";
738 EXPECT_EQ(2, status->update_progress()->SuccessfullyAppliedUpdateCount()) 742 EXPECT_EQ(2, status->update_progress()->SuccessfullyAppliedUpdateCount())
739 << "The nigori update should be applied"; 743 << "The nigori update should be applied";
740 } 744 }
741 EXPECT_FALSE(cryptographer->has_pending_keys()); 745 EXPECT_FALSE(cryptographer->has_pending_keys());
742 EXPECT_TRUE(cryptographer->is_ready()); 746 EXPECT_TRUE(cryptographer->is_ready());
743 { 747 {
744 syncable::ReadTransaction trans(FROM_HERE, directory()); 748 syncable::ReadTransaction trans(FROM_HERE, directory());
745 749
746 // All our changes should still be encrypted. 750 // All our changes should still be encrypted.
747 EXPECT_TRUE(ModelTypeSet::All().Equals( 751 EXPECT_TRUE(directory()->GetNigoriHandler()->GetEncryptedTypes(&trans)
748 cryptographer->GetEncryptedTypes())); 752 .Equals(ModelTypeSet::All()));
749 EXPECT_TRUE(VerifyUnsyncedChangesAreEncrypted(&trans, encrypted_types)); 753 EXPECT_TRUE(VerifyUnsyncedChangesAreEncrypted(&trans, encrypted_types));
750 754
751 Syncer::UnsyncedMetaHandles handles; 755 Syncer::UnsyncedMetaHandles handles;
752 GetUnsyncedEntries(&trans, &handles); 756 GetUnsyncedEntries(&trans, &handles);
753 EXPECT_EQ(2*batch_s+1, handles.size()); 757 EXPECT_EQ(2*batch_s+1, handles.size());
754 } 758 }
755 } 759 }
756 760
757 TEST_F(ApplyUpdatesCommandTest, CannotEncryptUnsyncedChanges) { 761 TEST_F(ApplyUpdatesCommandTest, CannotEncryptUnsyncedChanges) {
758 // Storing the cryptographer separately is bad, but for this test we 762 // Storing the cryptographer separately is bad, but for this test we
759 // know it's safe. 763 // know it's safe.
760 Cryptographer* cryptographer; 764 Cryptographer* cryptographer;
761 ModelTypeSet encrypted_types; 765 ModelTypeSet encrypted_types;
762 encrypted_types.Put(PASSWORDS); 766 encrypted_types.Put(PASSWORDS);
763 encrypted_types.Put(NIGORI); 767 encrypted_types.Put(NIGORI);
764 { 768 {
765 syncable::ReadTransaction trans(FROM_HERE, directory()); 769 syncable::ReadTransaction trans(FROM_HERE, directory());
766 cryptographer = directory()->GetCryptographer(&trans); 770 cryptographer = directory()->GetCryptographer(&trans);
767 EXPECT_TRUE(cryptographer->GetEncryptedTypes().Equals(encrypted_types)); 771 EXPECT_TRUE(directory()->GetNigoriHandler()->GetEncryptedTypes(&trans)
772 .Equals(encrypted_types));
768 773
769 // With default encrypted_types, this should be true. 774 // With default encrypted_types, this should be true.
770 EXPECT_TRUE(VerifyUnsyncedChangesAreEncrypted(&trans, encrypted_types)); 775 EXPECT_TRUE(VerifyUnsyncedChangesAreEncrypted(&trans, encrypted_types));
771 776
772 Syncer::UnsyncedMetaHandles handles; 777 Syncer::UnsyncedMetaHandles handles;
773 GetUnsyncedEntries(&trans, &handles); 778 GetUnsyncedEntries(&trans, &handles);
774 EXPECT_TRUE(handles.empty()); 779 EXPECT_TRUE(handles.empty());
775 } 780 }
776 781
777 // Create unsynced bookmarks without encryption. 782 // Create unsynced bookmarks without encryption.
(...skipping 13 matching lines...) Expand all
791 // Next five items are children of the root. 796 // Next five items are children of the root.
792 for (; i < 2*batch_s; ++i) { 797 for (; i < 2*batch_s; ++i) {
793 entry_factory_->CreateUnsyncedItem( 798 entry_factory_->CreateUnsyncedItem(
794 id_factory_.NewLocalId(), id_factory_.root(), 799 id_factory_.NewLocalId(), id_factory_.root(),
795 base::StringPrintf("Item %"PRIuS"", i), false, 800 base::StringPrintf("Item %"PRIuS"", i), false,
796 BOOKMARKS, NULL); 801 BOOKMARKS, NULL);
797 } 802 }
798 803
799 // We encrypt with new keys, triggering the local cryptographer to be unready 804 // We encrypt with new keys, triggering the local cryptographer to be unready
800 // and unable to decrypt data (once updated). 805 // and unable to decrypt data (once updated).
801 Cryptographer other_cryptographer(&encryptor_); 806 Cryptographer other_cryptographer(cryptographer->encryptor());
802 KeyParams params = {"localhost", "dummy", "foobar"}; 807 KeyParams params = {"localhost", "dummy", "foobar"};
803 other_cryptographer.AddKey(params); 808 other_cryptographer.AddKey(params);
804 sync_pb::EntitySpecifics specifics; 809 sync_pb::EntitySpecifics specifics;
805 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori(); 810 sync_pb::NigoriSpecifics* nigori = specifics.mutable_nigori();
806 other_cryptographer.GetKeys(nigori->mutable_encrypted()); 811 other_cryptographer.GetKeys(nigori->mutable_encrypted());
807 nigori->set_encrypt_everything(true); 812 nigori->set_encrypt_everything(true);
808 encrypted_types.Put(BOOKMARKS); 813 encrypted_types.Put(BOOKMARKS);
809 entry_factory_->CreateUnappliedNewItem( 814 entry_factory_->CreateUnappliedNewItem(
810 ModelTypeToRootTag(NIGORI), specifics, true); 815 ModelTypeToRootTag(NIGORI), specifics, true);
811 EXPECT_FALSE(cryptographer->has_pending_keys()); 816 EXPECT_FALSE(cryptographer->has_pending_keys());
(...skipping 25 matching lines...) Expand all
837 EXPECT_EQ(1, status->update_progress()->SuccessfullyAppliedUpdateCount()) 842 EXPECT_EQ(1, status->update_progress()->SuccessfullyAppliedUpdateCount())
838 << "The nigori update should be applied"; 843 << "The nigori update should be applied";
839 EXPECT_FALSE(cryptographer->is_ready()); 844 EXPECT_FALSE(cryptographer->is_ready());
840 EXPECT_TRUE(cryptographer->has_pending_keys()); 845 EXPECT_TRUE(cryptographer->has_pending_keys());
841 { 846 {
842 syncable::ReadTransaction trans(FROM_HERE, directory()); 847 syncable::ReadTransaction trans(FROM_HERE, directory());
843 848
844 // Since we have pending keys, we would have failed to encrypt, but the 849 // Since we have pending keys, we would have failed to encrypt, but the
845 // cryptographer should be updated. 850 // cryptographer should be updated.
846 EXPECT_FALSE(VerifyUnsyncedChangesAreEncrypted(&trans, encrypted_types)); 851 EXPECT_FALSE(VerifyUnsyncedChangesAreEncrypted(&trans, encrypted_types));
847 EXPECT_TRUE(cryptographer->GetEncryptedTypes().Equals( 852 EXPECT_TRUE(directory()->GetNigoriHandler()->GetEncryptedTypes(&trans)
848 ModelTypeSet().All())); 853 .Equals(ModelTypeSet::All()));
849 EXPECT_FALSE(cryptographer->is_ready()); 854 EXPECT_FALSE(cryptographer->is_ready());
850 EXPECT_TRUE(cryptographer->has_pending_keys()); 855 EXPECT_TRUE(cryptographer->has_pending_keys());
851 856
852 Syncer::UnsyncedMetaHandles handles; 857 Syncer::UnsyncedMetaHandles handles;
853 GetUnsyncedEntries(&trans, &handles); 858 GetUnsyncedEntries(&trans, &handles);
854 EXPECT_EQ(2*batch_s+1, handles.size()); 859 EXPECT_EQ(2*batch_s+1, handles.size());
855 } 860 }
856 } 861 }
857 862
858 } // namespace syncer 863 } // namespace syncer
OLDNEW
« no previous file with comments | « chrome/browser/sync/profile_sync_service_bookmark_unittest.cc ('k') | sync/engine/conflict_resolver.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698