OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "sync/syncable/directory_unittest.h" | 5 #include "sync/syncable/directory_unittest.h" |
6 | 6 |
7 #include "base/strings/stringprintf.h" | 7 #include "base/strings/stringprintf.h" |
8 #include "base/test/values_test_util.h" | 8 #include "base/test/values_test_util.h" |
9 #include "sync/internal_api/public/base/attachment_id_proto.h" | 9 #include "sync/internal_api/public/base/attachment_id_proto.h" |
10 #include "sync/syncable/syncable_proto_util.h" | 10 #include "sync/syncable/syncable_proto_util.h" |
(...skipping 1621 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1632 base::PlatformThread::Join(threads[i]); | 1632 base::PlatformThread::Join(threads[i]); |
1633 } | 1633 } |
1634 } | 1634 } |
1635 | 1635 |
1636 // Verify that Directory is notifed when a MutableEntry's AttachmentMetadata | 1636 // Verify that Directory is notifed when a MutableEntry's AttachmentMetadata |
1637 // changes. | 1637 // changes. |
1638 TEST_F(SyncableDirectoryTest, MutableEntry_PutAttachmentMetadata) { | 1638 TEST_F(SyncableDirectoryTest, MutableEntry_PutAttachmentMetadata) { |
1639 sync_pb::AttachmentMetadata attachment_metadata; | 1639 sync_pb::AttachmentMetadata attachment_metadata; |
1640 sync_pb::AttachmentMetadataRecord* record = attachment_metadata.add_record(); | 1640 sync_pb::AttachmentMetadataRecord* record = attachment_metadata.add_record(); |
1641 sync_pb::AttachmentIdProto attachment_id_proto = | 1641 sync_pb::AttachmentIdProto attachment_id_proto = |
1642 syncer::CreateAttachmentIdProto(); | 1642 syncer::CreateAttachmentIdProto(0, 0); |
1643 *record->mutable_id() = attachment_id_proto; | 1643 *record->mutable_id() = attachment_id_proto; |
1644 ASSERT_FALSE(dir()->IsAttachmentLinked(attachment_id_proto)); | 1644 ASSERT_FALSE(dir()->IsAttachmentLinked(attachment_id_proto)); |
1645 { | 1645 { |
1646 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 1646 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
1647 | 1647 |
1648 // Create an entry with attachment metadata and see that the attachment id | 1648 // Create an entry with attachment metadata and see that the attachment id |
1649 // is not linked. | 1649 // is not linked. |
1650 MutableEntry entry( | 1650 MutableEntry entry( |
1651 &trans, CREATE, PREFERENCES, trans.root_id(), "some entry"); | 1651 &trans, CREATE, PREFERENCES, trans.root_id(), "some entry"); |
1652 entry.PutId(TestIdFactory::FromNumber(-1)); | 1652 entry.PutId(TestIdFactory::FromNumber(-1)); |
(...skipping 23 matching lines...) Expand all Loading... |
1676 ASSERT_TRUE(metahandles.empty()); | 1676 ASSERT_TRUE(metahandles.empty()); |
1677 } | 1677 } |
1678 ASSERT_FALSE(dir()->IsAttachmentLinked(attachment_id_proto)); | 1678 ASSERT_FALSE(dir()->IsAttachmentLinked(attachment_id_proto)); |
1679 } | 1679 } |
1680 | 1680 |
1681 // Verify that UpdateAttachmentId updates attachment_id and is_on_server flag. | 1681 // Verify that UpdateAttachmentId updates attachment_id and is_on_server flag. |
1682 TEST_F(SyncableDirectoryTest, MutableEntry_UpdateAttachmentId) { | 1682 TEST_F(SyncableDirectoryTest, MutableEntry_UpdateAttachmentId) { |
1683 sync_pb::AttachmentMetadata attachment_metadata; | 1683 sync_pb::AttachmentMetadata attachment_metadata; |
1684 sync_pb::AttachmentMetadataRecord* r1 = attachment_metadata.add_record(); | 1684 sync_pb::AttachmentMetadataRecord* r1 = attachment_metadata.add_record(); |
1685 sync_pb::AttachmentMetadataRecord* r2 = attachment_metadata.add_record(); | 1685 sync_pb::AttachmentMetadataRecord* r2 = attachment_metadata.add_record(); |
1686 *r1->mutable_id() = syncer::CreateAttachmentIdProto(); | 1686 *r1->mutable_id() = syncer::CreateAttachmentIdProto(0, 0); |
1687 *r2->mutable_id() = syncer::CreateAttachmentIdProto(); | 1687 *r2->mutable_id() = syncer::CreateAttachmentIdProto(0, 0); |
1688 sync_pb::AttachmentIdProto attachment_id_proto = r1->id(); | 1688 sync_pb::AttachmentIdProto attachment_id_proto = r1->id(); |
1689 | 1689 |
1690 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); | 1690 WriteTransaction trans(FROM_HERE, UNITTEST, dir().get()); |
1691 | 1691 |
1692 MutableEntry entry( | 1692 MutableEntry entry( |
1693 &trans, CREATE, PREFERENCES, trans.root_id(), "some entry"); | 1693 &trans, CREATE, PREFERENCES, trans.root_id(), "some entry"); |
1694 entry.PutId(TestIdFactory::FromNumber(-1)); | 1694 entry.PutId(TestIdFactory::FromNumber(-1)); |
1695 entry.PutAttachmentMetadata(attachment_metadata); | 1695 entry.PutAttachmentMetadata(attachment_metadata); |
1696 | 1696 |
1697 const sync_pb::AttachmentMetadata& entry_metadata = | 1697 const sync_pb::AttachmentMetadata& entry_metadata = |
1698 entry.GetAttachmentMetadata(); | 1698 entry.GetAttachmentMetadata(); |
1699 ASSERT_EQ(2, entry_metadata.record_size()); | 1699 ASSERT_EQ(2, entry_metadata.record_size()); |
1700 ASSERT_FALSE(entry_metadata.record(0).is_on_server()); | 1700 ASSERT_FALSE(entry_metadata.record(0).is_on_server()); |
1701 ASSERT_FALSE(entry_metadata.record(1).is_on_server()); | 1701 ASSERT_FALSE(entry_metadata.record(1).is_on_server()); |
1702 ASSERT_FALSE(entry.GetIsUnsynced()); | 1702 ASSERT_FALSE(entry.GetIsUnsynced()); |
1703 | 1703 |
1704 entry.MarkAttachmentAsOnServer(attachment_id_proto); | 1704 entry.MarkAttachmentAsOnServer(attachment_id_proto); |
1705 | 1705 |
1706 ASSERT_TRUE(entry_metadata.record(0).is_on_server()); | 1706 ASSERT_TRUE(entry_metadata.record(0).is_on_server()); |
1707 ASSERT_FALSE(entry_metadata.record(1).is_on_server()); | 1707 ASSERT_FALSE(entry_metadata.record(1).is_on_server()); |
1708 ASSERT_TRUE(entry.GetIsUnsynced()); | 1708 ASSERT_TRUE(entry.GetIsUnsynced()); |
1709 } | 1709 } |
1710 | 1710 |
1711 // Verify that deleted entries with attachments will retain the attachments. | 1711 // Verify that deleted entries with attachments will retain the attachments. |
1712 TEST_F(SyncableDirectoryTest, Directory_DeleteDoesNotUnlinkAttachments) { | 1712 TEST_F(SyncableDirectoryTest, Directory_DeleteDoesNotUnlinkAttachments) { |
1713 sync_pb::AttachmentMetadata attachment_metadata; | 1713 sync_pb::AttachmentMetadata attachment_metadata; |
1714 sync_pb::AttachmentMetadataRecord* record = attachment_metadata.add_record(); | 1714 sync_pb::AttachmentMetadataRecord* record = attachment_metadata.add_record(); |
1715 sync_pb::AttachmentIdProto attachment_id_proto = | 1715 sync_pb::AttachmentIdProto attachment_id_proto = |
1716 syncer::CreateAttachmentIdProto(); | 1716 syncer::CreateAttachmentIdProto(0, 0); |
1717 *record->mutable_id() = attachment_id_proto; | 1717 *record->mutable_id() = attachment_id_proto; |
1718 ASSERT_FALSE(dir()->IsAttachmentLinked(attachment_id_proto)); | 1718 ASSERT_FALSE(dir()->IsAttachmentLinked(attachment_id_proto)); |
1719 const Id id = TestIdFactory::FromNumber(-1); | 1719 const Id id = TestIdFactory::FromNumber(-1); |
1720 | 1720 |
1721 // Create an entry with attachment metadata and see that the attachment id | 1721 // Create an entry with attachment metadata and see that the attachment id |
1722 // is linked. | 1722 // is linked. |
1723 CreateEntryWithAttachmentMetadata( | 1723 CreateEntryWithAttachmentMetadata( |
1724 PREFERENCES, "some entry", id, attachment_metadata); | 1724 PREFERENCES, "some entry", id, attachment_metadata); |
1725 ASSERT_TRUE(dir()->IsAttachmentLinked(attachment_id_proto)); | 1725 ASSERT_TRUE(dir()->IsAttachmentLinked(attachment_id_proto)); |
1726 | 1726 |
1727 // Delete the entry and see that it's still linked because the entry hasn't | 1727 // Delete the entry and see that it's still linked because the entry hasn't |
1728 // yet been purged. | 1728 // yet been purged. |
1729 DeleteEntry(id); | 1729 DeleteEntry(id); |
1730 ASSERT_TRUE(dir()->IsAttachmentLinked(attachment_id_proto)); | 1730 ASSERT_TRUE(dir()->IsAttachmentLinked(attachment_id_proto)); |
1731 | 1731 |
1732 // Reload the Directory, purging the deleted entry, and see that the | 1732 // Reload the Directory, purging the deleted entry, and see that the |
1733 // attachment is no longer linked. | 1733 // attachment is no longer linked. |
1734 SimulateSaveAndReloadDir(); | 1734 SimulateSaveAndReloadDir(); |
1735 ASSERT_FALSE(dir()->IsAttachmentLinked(attachment_id_proto)); | 1735 ASSERT_FALSE(dir()->IsAttachmentLinked(attachment_id_proto)); |
1736 } | 1736 } |
1737 | 1737 |
1738 // Verify that a given attachment can be referenced by multiple entries and that | 1738 // Verify that a given attachment can be referenced by multiple entries and that |
1739 // any one of the references is sufficient to ensure it remains linked. | 1739 // any one of the references is sufficient to ensure it remains linked. |
1740 TEST_F(SyncableDirectoryTest, Directory_LastReferenceUnlinksAttachments) { | 1740 TEST_F(SyncableDirectoryTest, Directory_LastReferenceUnlinksAttachments) { |
1741 // Create one attachment. | 1741 // Create one attachment. |
1742 sync_pb::AttachmentMetadata attachment_metadata; | 1742 sync_pb::AttachmentMetadata attachment_metadata; |
1743 sync_pb::AttachmentMetadataRecord* record = attachment_metadata.add_record(); | 1743 sync_pb::AttachmentMetadataRecord* record = attachment_metadata.add_record(); |
1744 sync_pb::AttachmentIdProto attachment_id_proto = | 1744 sync_pb::AttachmentIdProto attachment_id_proto = |
1745 syncer::CreateAttachmentIdProto(); | 1745 syncer::CreateAttachmentIdProto(0, 0); |
1746 *record->mutable_id() = attachment_id_proto; | 1746 *record->mutable_id() = attachment_id_proto; |
1747 | 1747 |
1748 // Create two entries, each referencing the attachment. | 1748 // Create two entries, each referencing the attachment. |
1749 const Id id1 = TestIdFactory::FromNumber(-1); | 1749 const Id id1 = TestIdFactory::FromNumber(-1); |
1750 const Id id2 = TestIdFactory::FromNumber(-2); | 1750 const Id id2 = TestIdFactory::FromNumber(-2); |
1751 CreateEntryWithAttachmentMetadata( | 1751 CreateEntryWithAttachmentMetadata( |
1752 PREFERENCES, "some entry", id1, attachment_metadata); | 1752 PREFERENCES, "some entry", id1, attachment_metadata); |
1753 CreateEntryWithAttachmentMetadata( | 1753 CreateEntryWithAttachmentMetadata( |
1754 PREFERENCES, "some other entry", id2, attachment_metadata); | 1754 PREFERENCES, "some other entry", id2, attachment_metadata); |
1755 | 1755 |
1756 // See that the attachment is considered linked. | 1756 // See that the attachment is considered linked. |
1757 ASSERT_TRUE(dir()->IsAttachmentLinked(attachment_id_proto)); | 1757 ASSERT_TRUE(dir()->IsAttachmentLinked(attachment_id_proto)); |
1758 | 1758 |
1759 // Delete the first entry, reload the Directory, see that the attachment is | 1759 // Delete the first entry, reload the Directory, see that the attachment is |
1760 // still linked. | 1760 // still linked. |
1761 DeleteEntry(id1); | 1761 DeleteEntry(id1); |
1762 SimulateSaveAndReloadDir(); | 1762 SimulateSaveAndReloadDir(); |
1763 ASSERT_TRUE(dir()->IsAttachmentLinked(attachment_id_proto)); | 1763 ASSERT_TRUE(dir()->IsAttachmentLinked(attachment_id_proto)); |
1764 | 1764 |
1765 // Delete the second entry, reload the Directory, see that the attachment is | 1765 // Delete the second entry, reload the Directory, see that the attachment is |
1766 // no loner linked. | 1766 // no loner linked. |
1767 DeleteEntry(id2); | 1767 DeleteEntry(id2); |
1768 SimulateSaveAndReloadDir(); | 1768 SimulateSaveAndReloadDir(); |
1769 ASSERT_FALSE(dir()->IsAttachmentLinked(attachment_id_proto)); | 1769 ASSERT_FALSE(dir()->IsAttachmentLinked(attachment_id_proto)); |
1770 } | 1770 } |
1771 | 1771 |
1772 TEST_F(SyncableDirectoryTest, Directory_GetAttachmentIdsToUpload) { | 1772 TEST_F(SyncableDirectoryTest, Directory_GetAttachmentIdsToUpload) { |
1773 // Create one attachment, referenced by two entries. | 1773 // Create one attachment, referenced by two entries. |
1774 AttachmentId attachment_id = AttachmentId::Create(); | 1774 AttachmentId attachment_id = AttachmentId::Create(0, 0); |
1775 sync_pb::AttachmentIdProto attachment_id_proto = attachment_id.GetProto(); | 1775 sync_pb::AttachmentIdProto attachment_id_proto = attachment_id.GetProto(); |
1776 sync_pb::AttachmentMetadata attachment_metadata; | 1776 sync_pb::AttachmentMetadata attachment_metadata; |
1777 sync_pb::AttachmentMetadataRecord* record = attachment_metadata.add_record(); | 1777 sync_pb::AttachmentMetadataRecord* record = attachment_metadata.add_record(); |
1778 *record->mutable_id() = attachment_id_proto; | 1778 *record->mutable_id() = attachment_id_proto; |
1779 const Id id1 = TestIdFactory::FromNumber(-1); | 1779 const Id id1 = TestIdFactory::FromNumber(-1); |
1780 const Id id2 = TestIdFactory::FromNumber(-2); | 1780 const Id id2 = TestIdFactory::FromNumber(-2); |
1781 CreateEntryWithAttachmentMetadata( | 1781 CreateEntryWithAttachmentMetadata( |
1782 PREFERENCES, "some entry", id1, attachment_metadata); | 1782 PREFERENCES, "some entry", id1, attachment_metadata); |
1783 CreateEntryWithAttachmentMetadata( | 1783 CreateEntryWithAttachmentMetadata( |
1784 PREFERENCES, "some other entry", id2, attachment_metadata); | 1784 PREFERENCES, "some other entry", id2, attachment_metadata); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1876 ASSERT_EQ(1, p_root.GetTotalNodeCount() - 1); | 1876 ASSERT_EQ(1, p_root.GetTotalNodeCount() - 1); |
1877 Entry a_root(&trans, GET_BY_ID, a_root_id); | 1877 Entry a_root(&trans, GET_BY_ID, a_root_id); |
1878 ASSERT_EQ(item2_id, a_root.GetFirstChildId()); | 1878 ASSERT_EQ(item2_id, a_root.GetFirstChildId()); |
1879 ASSERT_EQ(1, a_root.GetTotalNodeCount() - 1); | 1879 ASSERT_EQ(1, a_root.GetTotalNodeCount() - 1); |
1880 } | 1880 } |
1881 } | 1881 } |
1882 | 1882 |
1883 } // namespace syncable | 1883 } // namespace syncable |
1884 | 1884 |
1885 } // namespace syncer | 1885 } // namespace syncer |
OLD | NEW |