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 self.assertEqual( |
111 new_version) | 116 len(chromiumsync.SyncDataModel._PERMANENT_ITEM_SPECS) - 1 if not |
117 self._expect_synced_bookmarks_folder else 0, | |
ncarter (slow)
2012/03/15 22:44:52
FWIW, I don't find this very readable -- it's almo
| |
118 new_version) | |
112 self.assertEqual(new_version, len(changes)) | 119 self.assertEqual(new_version, len(changes)) |
113 self.assertEqual(0, remaining) | 120 self.assertEqual(0, remaining) |
114 version, changes, remaining = ( | 121 version, changes, remaining = ( |
115 self.GetChangesFromTimestamp(request_types, 0)) | 122 self.GetChangesFromTimestamp(request_types, 0)) |
116 self.assertEqual(new_version, version) | 123 self.assertEqual(new_version, version) |
117 self.assertEqual(expected_count, len(changes)) | 124 self.assertEqual(expected_count, len(changes)) |
118 self.assertEqual(0, remaining) | 125 self.assertEqual(0, remaining) |
119 | 126 |
120 def testBatchSize(self): | 127 def testBatchSize(self): |
121 for sync_type in chromiumsync.ALL_TYPES[1:]: | 128 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() | 561 msg = sync_pb2.GetUpdatesMessage() |
555 marker = msg.from_progress_marker.add() | 562 marker = msg.from_progress_marker.add() |
556 marker.data_type_id = autofill.number | 563 marker.data_type_id = autofill.number |
557 marker.token = pickle.dumps((15412, 5)) | 564 marker.token = pickle.dumps((15412, 5)) |
558 marker = msg.from_progress_marker.add() | 565 marker = msg.from_progress_marker.add() |
559 marker.data_type_id = theme.number | 566 marker.data_type_id = theme.number |
560 marker.token = pickle.dumps((15413, 4)) | 567 marker.token = pickle.dumps((15413, 4)) |
561 sieve = chromiumsync.UpdateSieve(msg, migrator) | 568 sieve = chromiumsync.UpdateSieve(msg, migrator) |
562 sieve.CheckMigrationState() | 569 sieve.CheckMigrationState() |
563 | 570 |
571 def testCreateSyncedBookmaks(self): | |
572 version1, changes, remaining = ( | |
573 self.GetChangesFromTimestamp([chromiumsync.BOOKMARK], 0)) | |
574 id_string = self.model._MakeCurrentId(chromiumsync.BOOKMARK, | |
575 '<server tag>synced_bookmarks') | |
576 self.assertFalse(self.model._ItemExists(id_string)) | |
577 self._expect_synced_bookmarks_folder = True | |
578 self.model.TriggerCreateSyncedBookmarks() | |
579 self.assertTrue(self.model._ItemExists(id_string)) | |
580 | |
581 # Check that the version changed when the folder was created and the only | |
582 # change was the folder creation. | |
583 version2, changes, remaining = ( | |
584 self.GetChangesFromTimestamp([chromiumsync.BOOKMARK], version1)) | |
585 self.assertEqual(len(changes), 1) | |
586 self.assertEqual(changes[0].id_string, id_string) | |
587 self.assertNotEqual(version1, version2) | |
588 self.assertEqual( | |
589 self.ExpectedPermanentItemCount(chromiumsync.BOOKMARK), | |
590 version2) | |
591 | |
592 # Ensure getting from timestamp 0 includes the folder. | |
593 version, changes, remaining = ( | |
594 self.GetChangesFromTimestamp([chromiumsync.BOOKMARK], 0)) | |
595 self.assertEqual( | |
596 self.ExpectedPermanentItemCount(chromiumsync.BOOKMARK), | |
597 len(changes)) | |
598 self.assertEqual(version2, version) | |
599 | |
564 | 600 |
565 if __name__ == '__main__': | 601 if __name__ == '__main__': |
566 unittest.main() | 602 unittest.main() |
OLD | NEW |