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 |