| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Tests exercising chromiumsync and SyncDataModel.""" | 6 """Tests exercising chromiumsync and SyncDataModel.""" |
| 7 | 7 |
| 8 import pickle | 8 import pickle |
| 9 import unittest | 9 import unittest |
| 10 | 10 |
| 11 import autofill_specifics_pb2 | 11 import autofill_specifics_pb2 |
| 12 import bookmark_specifics_pb2 | 12 import bookmark_specifics_pb2 |
| 13 import chromiumsync | 13 import chromiumsync |
| 14 import sync_pb2 | 14 import sync_pb2 |
| 15 import theme_specifics_pb2 | 15 import theme_specifics_pb2 |
| 16 | 16 |
| 17 class SyncDataModelTest(unittest.TestCase): | 17 class SyncDataModelTest(unittest.TestCase): |
| 18 def setUp(self): | 18 def setUp(self): |
| 19 self.model = chromiumsync.SyncDataModel() | 19 self.model = chromiumsync.SyncDataModel() |
| 20 # The Synced Bookmarks folder is not created by default |
| 21 self._expect_synced_bookmarks_folder = False |
| 20 | 22 |
| 21 def AddToModel(self, proto): | 23 def AddToModel(self, proto): |
| 22 self.model._entries[proto.id_string] = proto | 24 self.model._entries[proto.id_string] = proto |
| 23 | 25 |
| 24 def GetChangesFromTimestamp(self, requested_types, timestamp): | 26 def GetChangesFromTimestamp(self, requested_types, timestamp): |
| 25 message = sync_pb2.GetUpdatesMessage() | 27 message = sync_pb2.GetUpdatesMessage() |
| 26 message.from_timestamp = timestamp | 28 message.from_timestamp = timestamp |
| 27 for data_type in requested_types: | 29 for data_type in requested_types: |
| 28 getattr(message.requested_types, | 30 getattr(message.requested_types, |
| 29 chromiumsync.SYNC_TYPE_TO_DESCRIPTOR[ | 31 chromiumsync.SYNC_TYPE_TO_DESCRIPTOR[ |
| (...skipping 30 matching lines...) Expand all Loading... |
| 60 self.model._SaveEntry(proto) | 62 self.model._SaveEntry(proto) |
| 61 self.assertEqual(1, proto.version) | 63 self.assertEqual(1, proto.version) |
| 62 self.assertTrue(self.model._ItemExists(proto.id_string)) | 64 self.assertTrue(self.model._ItemExists(proto.id_string)) |
| 63 self.model._SaveEntry(proto) | 65 self.model._SaveEntry(proto) |
| 64 self.assertEqual(2, proto.version) | 66 self.assertEqual(2, proto.version) |
| 65 proto.version = 0 | 67 proto.version = 0 |
| 66 self.assertTrue(self.model._ItemExists(proto.id_string)) | 68 self.assertTrue(self.model._ItemExists(proto.id_string)) |
| 67 self.assertEqual(2, self.model._entries[proto.id_string].version) | 69 self.assertEqual(2, self.model._entries[proto.id_string].version) |
| 68 | 70 |
| 69 def testCreatePermanentItems(self): | 71 def testCreatePermanentItems(self): |
| 70 self.model._CreatePermanentItems(chromiumsync.ALL_TYPES) | 72 self.model._CreateDefaultPermanentItems(chromiumsync.ALL_TYPES) |
| 71 self.assertEqual(len(chromiumsync.ALL_TYPES) + 2, | 73 self.assertEqual(len(chromiumsync.ALL_TYPES) + 2, |
| 72 len(self.model._entries)) | 74 len(self.model._entries)) |
| 73 | 75 |
| 74 def ExpectedPermanentItemCount(self, sync_type): | 76 def ExpectedPermanentItemCount(self, sync_type): |
| 75 if sync_type == chromiumsync.BOOKMARK: | 77 if sync_type == chromiumsync.BOOKMARK: |
| 76 return 4 | 78 if self._expect_synced_bookmarks_folder: |
| 79 return 5 |
| 80 else: |
| 81 return 4 |
| 77 elif sync_type == chromiumsync.TOP_LEVEL: | 82 elif sync_type == chromiumsync.TOP_LEVEL: |
| 78 return 1 | 83 return 1 |
| 79 else: | 84 else: |
| 80 return 2 | 85 return 2 |
| 81 | 86 |
| 82 def testGetChangesFromTimestampZeroForEachType(self): | 87 def testGetChangesFromTimestampZeroForEachType(self): |
| 83 all_types = chromiumsync.ALL_TYPES[1:] | 88 all_types = chromiumsync.ALL_TYPES[1:] |
| 84 for sync_type in all_types: | 89 for sync_type in all_types: |
| 85 self.model = chromiumsync.SyncDataModel() | 90 self.model = chromiumsync.SyncDataModel() |
| 86 request_types = [sync_type] | 91 request_types = [sync_type] |
| (...skipping 13 matching lines...) Expand all Loading... |
| 100 # Test idempotence: another GetUpdates from ts=0 shouldn't recreate. | 105 # Test idempotence: another GetUpdates from ts=0 shouldn't recreate. |
| 101 version, changes, remaining = ( | 106 version, changes, remaining = ( |
| 102 self.GetChangesFromTimestamp(request_types, 0)) | 107 self.GetChangesFromTimestamp(request_types, 0)) |
| 103 self.assertEqual(expected_count, version) | 108 self.assertEqual(expected_count, version) |
| 104 self.assertEqual(expected_count, len(changes)) | 109 self.assertEqual(expected_count, len(changes)) |
| 105 self.assertEqual(0, remaining) | 110 self.assertEqual(0, remaining) |
| 106 | 111 |
| 107 # Doing a wider GetUpdates from timestamp zero shouldn't recreate either. | 112 # Doing a wider GetUpdates from timestamp zero shouldn't recreate either. |
| 108 new_version, changes, remaining = ( | 113 new_version, changes, remaining = ( |
| 109 self.GetChangesFromTimestamp(all_types, 0)) | 114 self.GetChangesFromTimestamp(all_types, 0)) |
| 110 self.assertEqual(len(chromiumsync.SyncDataModel._PERMANENT_ITEM_SPECS), | 115 if self._expect_synced_bookmarks_folder: |
| 111 new_version) | 116 self.assertEqual(len(chromiumsync.SyncDataModel._PERMANENT_ITEM_SPECS), |
| 117 new_version) |
| 118 else: |
| 119 self.assertEqual( |
| 120 len(chromiumsync.SyncDataModel._PERMANENT_ITEM_SPECS) -1, |
| 121 new_version) |
| 112 self.assertEqual(new_version, len(changes)) | 122 self.assertEqual(new_version, len(changes)) |
| 113 self.assertEqual(0, remaining) | 123 self.assertEqual(0, remaining) |
| 114 version, changes, remaining = ( | 124 version, changes, remaining = ( |
| 115 self.GetChangesFromTimestamp(request_types, 0)) | 125 self.GetChangesFromTimestamp(request_types, 0)) |
| 116 self.assertEqual(new_version, version) | 126 self.assertEqual(new_version, version) |
| 117 self.assertEqual(expected_count, len(changes)) | 127 self.assertEqual(expected_count, len(changes)) |
| 118 self.assertEqual(0, remaining) | 128 self.assertEqual(0, remaining) |
| 119 | 129 |
| 120 def testBatchSize(self): | 130 def testBatchSize(self): |
| 121 for sync_type in chromiumsync.ALL_TYPES[1:]: | 131 for sync_type in chromiumsync.ALL_TYPES[1:]: |
| (...skipping 432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 msg = sync_pb2.GetUpdatesMessage() | 564 msg = sync_pb2.GetUpdatesMessage() |
| 555 marker = msg.from_progress_marker.add() | 565 marker = msg.from_progress_marker.add() |
| 556 marker.data_type_id = autofill.number | 566 marker.data_type_id = autofill.number |
| 557 marker.token = pickle.dumps((15412, 5)) | 567 marker.token = pickle.dumps((15412, 5)) |
| 558 marker = msg.from_progress_marker.add() | 568 marker = msg.from_progress_marker.add() |
| 559 marker.data_type_id = theme.number | 569 marker.data_type_id = theme.number |
| 560 marker.token = pickle.dumps((15413, 4)) | 570 marker.token = pickle.dumps((15413, 4)) |
| 561 sieve = chromiumsync.UpdateSieve(msg, migrator) | 571 sieve = chromiumsync.UpdateSieve(msg, migrator) |
| 562 sieve.CheckMigrationState() | 572 sieve.CheckMigrationState() |
| 563 | 573 |
| 574 def testCreateSyncedBookmaks(self): |
| 575 version1, changes, remaining = ( |
| 576 self.GetChangesFromTimestamp([chromiumsync.BOOKMARK], 0)) |
| 577 id_string = self.model._MakeCurrentId(chromiumsync.BOOKMARK, |
| 578 '<server tag>synced_bookmarks') |
| 579 self.assertFalse(self.model._ItemExists(id_string)) |
| 580 self._expect_synced_bookmarks_folder = True |
| 581 self.model.TriggerCreateSyncedBookmarks() |
| 582 self.assertTrue(self.model._ItemExists(id_string)) |
| 583 |
| 584 # Check that the version changed when the folder was created and the only |
| 585 # change was the folder creation. |
| 586 version2, changes, remaining = ( |
| 587 self.GetChangesFromTimestamp([chromiumsync.BOOKMARK], version1)) |
| 588 self.assertEqual(len(changes), 1) |
| 589 self.assertEqual(changes[0].id_string, id_string) |
| 590 self.assertNotEqual(version1, version2) |
| 591 self.assertEqual( |
| 592 self.ExpectedPermanentItemCount(chromiumsync.BOOKMARK), |
| 593 version2) |
| 594 |
| 595 # Ensure getting from timestamp 0 includes the folder. |
| 596 version, changes, remaining = ( |
| 597 self.GetChangesFromTimestamp([chromiumsync.BOOKMARK], 0)) |
| 598 self.assertEqual( |
| 599 self.ExpectedPermanentItemCount(chromiumsync.BOOKMARK), |
| 600 len(changes)) |
| 601 self.assertEqual(version2, version) |
| 602 |
| 564 | 603 |
| 565 if __name__ == '__main__': | 604 if __name__ == '__main__': |
| 566 unittest.main() | 605 unittest.main() |
| OLD | NEW |