Index: sync/tools/testserver/chromiumsync_test.py |
diff --git a/sync/tools/testserver/chromiumsync_test.py b/sync/tools/testserver/chromiumsync_test.py |
deleted file mode 100755 |
index d83e4146c828f6f8e3601779419d992b0e8ca017..0000000000000000000000000000000000000000 |
--- a/sync/tools/testserver/chromiumsync_test.py |
+++ /dev/null |
@@ -1,680 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright 2013 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-"""Tests exercising chromiumsync and SyncDataModel.""" |
- |
-import pickle |
-import unittest |
- |
-import autofill_specifics_pb2 |
-import bookmark_specifics_pb2 |
-import chromiumsync |
-import managed_user_specifics_pb2 |
-import sync_pb2 |
-import theme_specifics_pb2 |
- |
-class SyncDataModelTest(unittest.TestCase): |
- def setUp(self): |
- self.model = chromiumsync.SyncDataModel() |
- # The Synced Bookmarks folder is not created by default |
- self._expect_synced_bookmarks_folder = False |
- |
- def AddToModel(self, proto): |
- self.model._entries[proto.id_string] = proto |
- |
- def GetChangesFromTimestamp(self, requested_types, timestamp): |
- message = sync_pb2.GetUpdatesMessage() |
- message.from_timestamp = timestamp |
- for data_type in requested_types: |
- getattr(message.requested_types, |
- chromiumsync.SYNC_TYPE_TO_DESCRIPTOR[ |
- data_type].name).SetInParent() |
- return self.model.GetChanges( |
- chromiumsync.UpdateSieve(message, self.model.migration_history)) |
- |
- def FindMarkerByNumber(self, markers, datatype): |
- """Search a list of progress markers and find the one for a datatype.""" |
- for marker in markers: |
- if marker.data_type_id == datatype.number: |
- return marker |
- self.fail('Required marker not found: %s' % datatype.name) |
- |
- def testPermanentItemSpecs(self): |
- specs = chromiumsync.SyncDataModel._PERMANENT_ITEM_SPECS |
- |
- declared_specs = set(['0']) |
- for spec in specs: |
- self.assertTrue(spec.parent_tag in declared_specs, 'parent tags must ' |
- 'be declared before use') |
- declared_specs.add(spec.tag) |
- |
- unique_datatypes = set([x.sync_type for x in specs]) |
- self.assertEqual(unique_datatypes, |
- set(chromiumsync.ALL_TYPES[1:]), |
- 'Every sync datatype should have a permanent folder ' |
- 'associated with it') |
- |
- def testSaveEntry(self): |
- proto = sync_pb2.SyncEntity() |
- proto.id_string = 'abcd' |
- proto.version = 0 |
- self.assertFalse(self.model._ItemExists(proto.id_string)) |
- self.model._SaveEntry(proto) |
- self.assertEqual(1, proto.version) |
- self.assertTrue(self.model._ItemExists(proto.id_string)) |
- self.model._SaveEntry(proto) |
- self.assertEqual(2, proto.version) |
- proto.version = 0 |
- self.assertTrue(self.model._ItemExists(proto.id_string)) |
- self.assertEqual(2, self.model._entries[proto.id_string].version) |
- |
- def testCreatePermanentItems(self): |
- self.model._CreateDefaultPermanentItems(chromiumsync.ALL_TYPES) |
- self.assertEqual(len(chromiumsync.ALL_TYPES) + 1, |
- len(self.model._entries)) |
- |
- def ExpectedPermanentItemCount(self, sync_type): |
- if sync_type == chromiumsync.BOOKMARK: |
- if self._expect_synced_bookmarks_folder: |
- return 4 |
- else: |
- return 3 |
- else: |
- return 1 |
- |
- def testGetChangesFromTimestampZeroForEachType(self): |
- all_types = chromiumsync.ALL_TYPES[1:] |
- for sync_type in all_types: |
- self.model = chromiumsync.SyncDataModel() |
- request_types = [sync_type] |
- |
- version, changes, remaining = ( |
- self.GetChangesFromTimestamp(request_types, 0)) |
- |
- expected_count = self.ExpectedPermanentItemCount(sync_type) |
- self.assertEqual(expected_count, version) |
- self.assertEqual(expected_count, len(changes)) |
- for change in changes: |
- self.assertTrue(change.HasField('server_defined_unique_tag')) |
- self.assertEqual(change.version, change.sync_timestamp) |
- self.assertTrue(change.version <= version) |
- |
- # Test idempotence: another GetUpdates from ts=0 shouldn't recreate. |
- version, changes, remaining = ( |
- self.GetChangesFromTimestamp(request_types, 0)) |
- self.assertEqual(expected_count, version) |
- self.assertEqual(expected_count, len(changes)) |
- self.assertEqual(0, remaining) |
- |
- # Doing a wider GetUpdates from timestamp zero shouldn't recreate either. |
- new_version, changes, remaining = ( |
- self.GetChangesFromTimestamp(all_types, 0)) |
- if self._expect_synced_bookmarks_folder: |
- self.assertEqual(len(chromiumsync.SyncDataModel._PERMANENT_ITEM_SPECS), |
- new_version) |
- else: |
- self.assertEqual( |
- len(chromiumsync.SyncDataModel._PERMANENT_ITEM_SPECS) -1, |
- new_version) |
- self.assertEqual(new_version, len(changes)) |
- self.assertEqual(0, remaining) |
- version, changes, remaining = ( |
- self.GetChangesFromTimestamp(request_types, 0)) |
- self.assertEqual(new_version, version) |
- self.assertEqual(expected_count, len(changes)) |
- self.assertEqual(0, remaining) |
- |
- def testBatchSize(self): |
- for sync_type in chromiumsync.ALL_TYPES[1:]: |
- specifics = chromiumsync.GetDefaultEntitySpecifics(sync_type) |
- self.model = chromiumsync.SyncDataModel() |
- request_types = [sync_type] |
- |
- for i in range(self.model._BATCH_SIZE*3): |
- entry = sync_pb2.SyncEntity() |
- entry.id_string = 'batch test %d' % i |
- entry.specifics.CopyFrom(specifics) |
- self.model._SaveEntry(entry) |
- last_bit = self.ExpectedPermanentItemCount(sync_type) |
- version, changes, changes_remaining = ( |
- self.GetChangesFromTimestamp(request_types, 0)) |
- self.assertEqual(self.model._BATCH_SIZE, version) |
- self.assertEqual(self.model._BATCH_SIZE*2 + last_bit, changes_remaining) |
- version, changes, changes_remaining = ( |
- self.GetChangesFromTimestamp(request_types, version)) |
- self.assertEqual(self.model._BATCH_SIZE*2, version) |
- self.assertEqual(self.model._BATCH_SIZE + last_bit, changes_remaining) |
- version, changes, changes_remaining = ( |
- self.GetChangesFromTimestamp(request_types, version)) |
- self.assertEqual(self.model._BATCH_SIZE*3, version) |
- self.assertEqual(last_bit, changes_remaining) |
- version, changes, changes_remaining = ( |
- self.GetChangesFromTimestamp(request_types, version)) |
- self.assertEqual(self.model._BATCH_SIZE*3 + last_bit, version) |
- self.assertEqual(0, changes_remaining) |
- |
- # Now delete a third of the items. |
- for i in xrange(self.model._BATCH_SIZE*3 - 1, 0, -3): |
- entry = sync_pb2.SyncEntity() |
- entry.id_string = 'batch test %d' % i |
- entry.deleted = True |
- self.model._SaveEntry(entry) |
- |
- # The batch counts shouldn't change. |
- version, changes, changes_remaining = ( |
- self.GetChangesFromTimestamp(request_types, 0)) |
- self.assertEqual(self.model._BATCH_SIZE, len(changes)) |
- self.assertEqual(self.model._BATCH_SIZE*2 + last_bit, changes_remaining) |
- version, changes, changes_remaining = ( |
- self.GetChangesFromTimestamp(request_types, version)) |
- self.assertEqual(self.model._BATCH_SIZE, len(changes)) |
- self.assertEqual(self.model._BATCH_SIZE + last_bit, changes_remaining) |
- version, changes, changes_remaining = ( |
- self.GetChangesFromTimestamp(request_types, version)) |
- self.assertEqual(self.model._BATCH_SIZE, len(changes)) |
- self.assertEqual(last_bit, changes_remaining) |
- version, changes, changes_remaining = ( |
- self.GetChangesFromTimestamp(request_types, version)) |
- self.assertEqual(last_bit, len(changes)) |
- self.assertEqual(self.model._BATCH_SIZE*4 + last_bit, version) |
- self.assertEqual(0, changes_remaining) |
- |
- def testCommitEachDataType(self): |
- for sync_type in chromiumsync.ALL_TYPES[1:]: |
- specifics = chromiumsync.GetDefaultEntitySpecifics(sync_type) |
- self.model = chromiumsync.SyncDataModel() |
- my_cache_guid = '112358132134' |
- parent = 'foobar' |
- commit_session = {} |
- |
- # Start with a GetUpdates from timestamp 0, to populate permanent items. |
- original_version, original_changes, changes_remaining = ( |
- self.GetChangesFromTimestamp([sync_type], 0)) |
- |
- def DoCommit(original=None, id_string='', name=None, parent=None, |
- position=0): |
- proto = sync_pb2.SyncEntity() |
- if original is not None: |
- proto.version = original.version |
- proto.id_string = original.id_string |
- proto.parent_id_string = original.parent_id_string |
- proto.name = original.name |
- else: |
- proto.id_string = id_string |
- proto.version = 0 |
- proto.specifics.CopyFrom(specifics) |
- if name is not None: |
- proto.name = name |
- if parent: |
- proto.parent_id_string = parent.id_string |
- proto.insert_after_item_id = 'please discard' |
- proto.position_in_parent = position |
- proto.folder = True |
- proto.deleted = False |
- result = self.model.CommitEntry(proto, my_cache_guid, commit_session) |
- self.assertTrue(result) |
- return (proto, result) |
- |
- # Commit a new item. |
- proto1, result1 = DoCommit(name='namae', id_string='Foo', |
- parent=original_changes[-1], position=100) |
- # Commit an item whose parent is another item (referenced via the |
- # pre-commit ID). |
- proto2, result2 = DoCommit(name='Secondo', id_string='Bar', |
- parent=proto1, position=-100) |
- # Commit a sibling of the second item. |
- proto3, result3 = DoCommit(name='Third!', id_string='Baz', |
- parent=proto1, position=-50) |
- |
- self.assertEqual(3, len(commit_session)) |
- for p, r in [(proto1, result1), (proto2, result2), (proto3, result3)]: |
- self.assertNotEqual(r.id_string, p.id_string) |
- self.assertEqual(r.originator_client_item_id, p.id_string) |
- self.assertEqual(r.originator_cache_guid, my_cache_guid) |
- self.assertTrue(r is not self.model._entries[r.id_string], |
- "Commit result didn't make a defensive copy.") |
- self.assertTrue(p is not self.model._entries[r.id_string], |
- "Commit result didn't make a defensive copy.") |
- self.assertEqual(commit_session.get(p.id_string), r.id_string) |
- self.assertTrue(r.version > original_version) |
- self.assertEqual(result1.parent_id_string, proto1.parent_id_string) |
- self.assertEqual(result2.parent_id_string, result1.id_string) |
- version, changes, remaining = ( |
- self.GetChangesFromTimestamp([sync_type], original_version)) |
- self.assertEqual(3, len(changes)) |
- self.assertEqual(0, remaining) |
- self.assertEqual(original_version + 3, version) |
- self.assertEqual([result1, result2, result3], changes) |
- for c in changes: |
- self.assertTrue(c is not self.model._entries[c.id_string], |
- "GetChanges didn't make a defensive copy.") |
- self.assertTrue(result2.position_in_parent < result3.position_in_parent) |
- self.assertEqual(-100, result2.position_in_parent) |
- |
- # Now update the items so that the second item is the parent of the |
- # first; with the first sandwiched between two new items (4 and 5). |
- # Do this in a new commit session, meaning we'll reference items from |
- # the first batch by their post-commit, server IDs. |
- commit_session = {} |
- old_cache_guid = my_cache_guid |
- my_cache_guid = 'A different GUID' |
- proto2b, result2b = DoCommit(original=result2, |
- parent=original_changes[-1]) |
- proto4, result4 = DoCommit(id_string='ID4', name='Four', |
- parent=result2, position=-200) |
- proto1b, result1b = DoCommit(original=result1, |
- parent=result2, position=-150) |
- proto5, result5 = DoCommit(id_string='ID5', name='Five', parent=result2, |
- position=150) |
- |
- self.assertEqual(2, len(commit_session), 'Only new items in second ' |
- 'batch should be in the session') |
- for p, r, original in [(proto2b, result2b, proto2), |
- (proto4, result4, proto4), |
- (proto1b, result1b, proto1), |
- (proto5, result5, proto5)]: |
- self.assertEqual(r.originator_client_item_id, original.id_string) |
- if original is not p: |
- self.assertEqual(r.id_string, p.id_string, |
- 'Ids should be stable after first commit') |
- self.assertEqual(r.originator_cache_guid, old_cache_guid) |
- else: |
- self.assertNotEqual(r.id_string, p.id_string) |
- self.assertEqual(r.originator_cache_guid, my_cache_guid) |
- self.assertEqual(commit_session.get(p.id_string), r.id_string) |
- self.assertTrue(r is not self.model._entries[r.id_string], |
- "Commit result didn't make a defensive copy.") |
- self.assertTrue(p is not self.model._entries[r.id_string], |
- "Commit didn't make a defensive copy.") |
- self.assertTrue(r.version > p.version) |
- version, changes, remaining = ( |
- self.GetChangesFromTimestamp([sync_type], original_version)) |
- self.assertEqual(5, len(changes)) |
- self.assertEqual(0, remaining) |
- self.assertEqual(original_version + 7, version) |
- self.assertEqual([result3, result2b, result4, result1b, result5], changes) |
- for c in changes: |
- self.assertTrue(c is not self.model._entries[c.id_string], |
- "GetChanges didn't make a defensive copy.") |
- self.assertTrue(result4.parent_id_string == |
- result1b.parent_id_string == |
- result5.parent_id_string == |
- result2b.id_string) |
- self.assertTrue(result4.position_in_parent < |
- result1b.position_in_parent < |
- result5.position_in_parent) |
- |
- def testUpdateSieve(self): |
- # from_timestamp, legacy mode |
- autofill = chromiumsync.SYNC_TYPE_FIELDS['autofill'] |
- theme = chromiumsync.SYNC_TYPE_FIELDS['theme'] |
- msg = sync_pb2.GetUpdatesMessage() |
- msg.from_timestamp = 15412 |
- msg.requested_types.autofill.SetInParent() |
- msg.requested_types.theme.SetInParent() |
- |
- sieve = chromiumsync.UpdateSieve(msg) |
- self.assertEqual(sieve._state, |
- {chromiumsync.TOP_LEVEL: 15412, |
- chromiumsync.AUTOFILL: 15412, |
- chromiumsync.THEME: 15412}) |
- |
- response = sync_pb2.GetUpdatesResponse() |
- sieve.SaveProgress(15412, response) |
- self.assertEqual(0, len(response.new_progress_marker)) |
- self.assertFalse(response.HasField('new_timestamp')) |
- |
- response = sync_pb2.GetUpdatesResponse() |
- sieve.SaveProgress(15413, response) |
- self.assertEqual(0, len(response.new_progress_marker)) |
- self.assertTrue(response.HasField('new_timestamp')) |
- self.assertEqual(15413, response.new_timestamp) |
- |
- # Existing tokens |
- msg = sync_pb2.GetUpdatesMessage() |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = autofill.number |
- marker.token = pickle.dumps((15412, 1)) |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = theme.number |
- marker.token = pickle.dumps((15413, 1)) |
- sieve = chromiumsync.UpdateSieve(msg) |
- self.assertEqual(sieve._state, |
- {chromiumsync.TOP_LEVEL: 15412, |
- chromiumsync.AUTOFILL: 15412, |
- chromiumsync.THEME: 15413}) |
- |
- response = sync_pb2.GetUpdatesResponse() |
- sieve.SaveProgress(15413, response) |
- self.assertEqual(1, len(response.new_progress_marker)) |
- self.assertFalse(response.HasField('new_timestamp')) |
- marker = response.new_progress_marker[0] |
- self.assertEqual(marker.data_type_id, autofill.number) |
- self.assertEqual(pickle.loads(marker.token), (15413, 1)) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- |
- # Empty tokens indicating from timestamp = 0 |
- msg = sync_pb2.GetUpdatesMessage() |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = autofill.number |
- marker.token = pickle.dumps((412, 1)) |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = theme.number |
- marker.token = '' |
- sieve = chromiumsync.UpdateSieve(msg) |
- self.assertEqual(sieve._state, |
- {chromiumsync.TOP_LEVEL: 0, |
- chromiumsync.AUTOFILL: 412, |
- chromiumsync.THEME: 0}) |
- response = sync_pb2.GetUpdatesResponse() |
- sieve.SaveProgress(1, response) |
- self.assertEqual(1, len(response.new_progress_marker)) |
- self.assertFalse(response.HasField('new_timestamp')) |
- marker = response.new_progress_marker[0] |
- self.assertEqual(marker.data_type_id, theme.number) |
- self.assertEqual(pickle.loads(marker.token), (1, 1)) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- |
- response = sync_pb2.GetUpdatesResponse() |
- sieve.SaveProgress(412, response) |
- self.assertEqual(1, len(response.new_progress_marker)) |
- self.assertFalse(response.HasField('new_timestamp')) |
- marker = response.new_progress_marker[0] |
- self.assertEqual(marker.data_type_id, theme.number) |
- self.assertEqual(pickle.loads(marker.token), (412, 1)) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- |
- response = sync_pb2.GetUpdatesResponse() |
- sieve.SaveProgress(413, response) |
- self.assertEqual(2, len(response.new_progress_marker)) |
- self.assertFalse(response.HasField('new_timestamp')) |
- marker = self.FindMarkerByNumber(response.new_progress_marker, theme) |
- self.assertEqual(pickle.loads(marker.token), (413, 1)) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- marker = self.FindMarkerByNumber(response.new_progress_marker, autofill) |
- self.assertEqual(pickle.loads(marker.token), (413, 1)) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- |
- # Migration token timestamps (client gives timestamp, server returns token) |
- # These are for migrating from the old 'timestamp' protocol to the |
- # progressmarker protocol, and have nothing to do with the MIGRATION_DONE |
- # error code. |
- msg = sync_pb2.GetUpdatesMessage() |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = autofill.number |
- marker.timestamp_token_for_migration = 15213 |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = theme.number |
- marker.timestamp_token_for_migration = 15211 |
- sieve = chromiumsync.UpdateSieve(msg) |
- self.assertEqual(sieve._state, |
- {chromiumsync.TOP_LEVEL: 15211, |
- chromiumsync.AUTOFILL: 15213, |
- chromiumsync.THEME: 15211}) |
- response = sync_pb2.GetUpdatesResponse() |
- sieve.SaveProgress(16000, response) # There were updates |
- self.assertEqual(2, len(response.new_progress_marker)) |
- self.assertFalse(response.HasField('new_timestamp')) |
- marker = self.FindMarkerByNumber(response.new_progress_marker, theme) |
- self.assertEqual(pickle.loads(marker.token), (16000, 1)) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- marker = self.FindMarkerByNumber(response.new_progress_marker, autofill) |
- self.assertEqual(pickle.loads(marker.token), (16000, 1)) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- |
- msg = sync_pb2.GetUpdatesMessage() |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = autofill.number |
- marker.timestamp_token_for_migration = 3000 |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = theme.number |
- marker.timestamp_token_for_migration = 3000 |
- sieve = chromiumsync.UpdateSieve(msg) |
- self.assertEqual(sieve._state, |
- {chromiumsync.TOP_LEVEL: 3000, |
- chromiumsync.AUTOFILL: 3000, |
- chromiumsync.THEME: 3000}) |
- response = sync_pb2.GetUpdatesResponse() |
- sieve.SaveProgress(3000, response) # Already up to date |
- self.assertEqual(2, len(response.new_progress_marker)) |
- self.assertFalse(response.HasField('new_timestamp')) |
- marker = self.FindMarkerByNumber(response.new_progress_marker, theme) |
- self.assertEqual(pickle.loads(marker.token), (3000, 1)) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- marker = self.FindMarkerByNumber(response.new_progress_marker, autofill) |
- self.assertEqual(pickle.loads(marker.token), (3000, 1)) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- |
- def testCheckRaiseTransientError(self): |
- testserver = chromiumsync.TestServer() |
- http_code, raw_respon = testserver.HandleSetTransientError() |
- self.assertEqual(http_code, 200) |
- try: |
- testserver.CheckTransientError() |
- self.fail('Should have raised transient error exception') |
- except chromiumsync.TransientError: |
- self.assertTrue(testserver.transient_error) |
- |
- def testUpdateSieveStoreMigration(self): |
- autofill = chromiumsync.SYNC_TYPE_FIELDS['autofill'] |
- theme = chromiumsync.SYNC_TYPE_FIELDS['theme'] |
- migrator = chromiumsync.MigrationHistory() |
- msg = sync_pb2.GetUpdatesMessage() |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = autofill.number |
- marker.token = pickle.dumps((15412, 1)) |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = theme.number |
- marker.token = pickle.dumps((15413, 1)) |
- sieve = chromiumsync.UpdateSieve(msg, migrator) |
- sieve.CheckMigrationState() |
- |
- migrator.Bump([chromiumsync.BOOKMARK, chromiumsync.PASSWORD]) # v=2 |
- sieve = chromiumsync.UpdateSieve(msg, migrator) |
- sieve.CheckMigrationState() |
- self.assertEqual(sieve._state, |
- {chromiumsync.TOP_LEVEL: 15412, |
- chromiumsync.AUTOFILL: 15412, |
- chromiumsync.THEME: 15413}) |
- |
- migrator.Bump([chromiumsync.AUTOFILL, chromiumsync.PASSWORD]) # v=3 |
- sieve = chromiumsync.UpdateSieve(msg, migrator) |
- try: |
- sieve.CheckMigrationState() |
- self.fail('Should have raised.') |
- except chromiumsync.MigrationDoneError, error: |
- # We want this to happen. |
- self.assertEqual([chromiumsync.AUTOFILL], error.datatypes) |
- |
- msg = sync_pb2.GetUpdatesMessage() |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = autofill.number |
- marker.token = '' |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = theme.number |
- marker.token = pickle.dumps((15413, 1)) |
- sieve = chromiumsync.UpdateSieve(msg, migrator) |
- sieve.CheckMigrationState() |
- response = sync_pb2.GetUpdatesResponse() |
- sieve.SaveProgress(15412, response) # There were updates |
- self.assertEqual(1, len(response.new_progress_marker)) |
- self.assertFalse(response.HasField('new_timestamp')) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- marker = self.FindMarkerByNumber(response.new_progress_marker, autofill) |
- self.assertEqual(pickle.loads(marker.token), (15412, 3)) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- msg = sync_pb2.GetUpdatesMessage() |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = autofill.number |
- marker.token = pickle.dumps((15412, 3)) |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = theme.number |
- marker.token = pickle.dumps((15413, 1)) |
- sieve = chromiumsync.UpdateSieve(msg, migrator) |
- sieve.CheckMigrationState() |
- |
- migrator.Bump([chromiumsync.THEME, chromiumsync.AUTOFILL]) # v=4 |
- migrator.Bump([chromiumsync.AUTOFILL]) # v=5 |
- sieve = chromiumsync.UpdateSieve(msg, migrator) |
- try: |
- sieve.CheckMigrationState() |
- self.fail("Should have raised.") |
- except chromiumsync.MigrationDoneError, error: |
- # We want this to happen. |
- self.assertEqual(set([chromiumsync.THEME, chromiumsync.AUTOFILL]), |
- set(error.datatypes)) |
- msg = sync_pb2.GetUpdatesMessage() |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = autofill.number |
- marker.token = '' |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = theme.number |
- marker.token = pickle.dumps((15413, 1)) |
- sieve = chromiumsync.UpdateSieve(msg, migrator) |
- try: |
- sieve.CheckMigrationState() |
- self.fail("Should have raised.") |
- except chromiumsync.MigrationDoneError, error: |
- # We want this to happen. |
- self.assertEqual([chromiumsync.THEME], error.datatypes) |
- |
- msg = sync_pb2.GetUpdatesMessage() |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = autofill.number |
- marker.token = '' |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = theme.number |
- marker.token = '' |
- sieve = chromiumsync.UpdateSieve(msg, migrator) |
- sieve.CheckMigrationState() |
- response = sync_pb2.GetUpdatesResponse() |
- sieve.SaveProgress(15412, response) # There were updates |
- self.assertEqual(2, len(response.new_progress_marker)) |
- self.assertFalse(response.HasField('new_timestamp')) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- marker = self.FindMarkerByNumber(response.new_progress_marker, autofill) |
- self.assertEqual(pickle.loads(marker.token), (15412, 5)) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- marker = self.FindMarkerByNumber(response.new_progress_marker, theme) |
- self.assertEqual(pickle.loads(marker.token), (15412, 4)) |
- self.assertFalse(marker.HasField('timestamp_token_for_migration')) |
- msg = sync_pb2.GetUpdatesMessage() |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = autofill.number |
- marker.token = pickle.dumps((15412, 5)) |
- marker = msg.from_progress_marker.add() |
- marker.data_type_id = theme.number |
- marker.token = pickle.dumps((15413, 4)) |
- sieve = chromiumsync.UpdateSieve(msg, migrator) |
- sieve.CheckMigrationState() |
- |
- def testCreateSyncedBookmarks(self): |
- version1, changes, remaining = ( |
- self.GetChangesFromTimestamp([chromiumsync.BOOKMARK], 0)) |
- id_string = self.model._MakeCurrentId(chromiumsync.BOOKMARK, |
- '<server tag>synced_bookmarks') |
- self.assertFalse(self.model._ItemExists(id_string)) |
- self._expect_synced_bookmarks_folder = True |
- self.model.TriggerCreateSyncedBookmarks() |
- self.assertTrue(self.model._ItemExists(id_string)) |
- |
- # Check that the version changed when the folder was created and the only |
- # change was the folder creation. |
- version2, changes, remaining = ( |
- self.GetChangesFromTimestamp([chromiumsync.BOOKMARK], version1)) |
- self.assertEqual(len(changes), 1) |
- self.assertEqual(changes[0].id_string, id_string) |
- self.assertNotEqual(version1, version2) |
- self.assertEqual( |
- self.ExpectedPermanentItemCount(chromiumsync.BOOKMARK), |
- version2) |
- |
- # Ensure getting from timestamp 0 includes the folder. |
- version, changes, remaining = ( |
- self.GetChangesFromTimestamp([chromiumsync.BOOKMARK], 0)) |
- self.assertEqual( |
- self.ExpectedPermanentItemCount(chromiumsync.BOOKMARK), |
- len(changes)) |
- self.assertEqual(version2, version) |
- |
- def testAcknowledgeManagedUser(self): |
- # Create permanent items. |
- self.GetChangesFromTimestamp([chromiumsync.MANAGED_USER], 0) |
- proto = sync_pb2.SyncEntity() |
- proto.id_string = 'abcd' |
- proto.version = 0 |
- |
- # Make sure the managed_user field exists. |
- proto.specifics.managed_user.acknowledged = False |
- self.assertTrue(proto.specifics.HasField('managed_user')) |
- self.AddToModel(proto) |
- version1, changes1, remaining1 = ( |
- self.GetChangesFromTimestamp([chromiumsync.MANAGED_USER], 0)) |
- for change in changes1: |
- self.assertTrue(not change.specifics.managed_user.acknowledged) |
- |
- # Turn on managed user acknowledgement |
- self.model.acknowledge_managed_users = True |
- |
- version2, changes2, remaining2 = ( |
- self.GetChangesFromTimestamp([chromiumsync.MANAGED_USER], 0)) |
- for change in changes2: |
- self.assertTrue(change.specifics.managed_user.acknowledged) |
- |
- def testGetKey(self): |
- [key1] = self.model.GetKeystoreKeys() |
- [key2] = self.model.GetKeystoreKeys() |
- self.assertTrue(len(key1)) |
- self.assertEqual(key1, key2) |
- |
- # Trigger the rotation. A subsequent GetUpdates should return the nigori |
- # node (whose timestamp was bumped by the rotation). |
- version1, changes, remaining = ( |
- self.GetChangesFromTimestamp([chromiumsync.NIGORI], 0)) |
- self.model.TriggerRotateKeystoreKeys() |
- version2, changes, remaining = ( |
- self.GetChangesFromTimestamp([chromiumsync.NIGORI], version1)) |
- self.assertNotEqual(version1, version2) |
- self.assertEquals(len(changes), 1) |
- self.assertEquals(changes[0].name, "Nigori") |
- |
- # The current keys should contain the old keys, with the new key appended. |
- [key1, key3] = self.model.GetKeystoreKeys() |
- self.assertEquals(key1, key2) |
- self.assertNotEqual(key1, key3) |
- self.assertTrue(len(key3) > 0) |
- |
- def testTriggerEnableKeystoreEncryption(self): |
- version1, changes, remaining = ( |
- self.GetChangesFromTimestamp([chromiumsync.EXPERIMENTS], 0)) |
- keystore_encryption_id_string = ( |
- self.model._ClientTagToId( |
- chromiumsync.EXPERIMENTS, |
- chromiumsync.KEYSTORE_ENCRYPTION_EXPERIMENT_TAG)) |
- |
- self.assertFalse(self.model._ItemExists(keystore_encryption_id_string)) |
- self.model.TriggerEnableKeystoreEncryption() |
- self.assertTrue(self.model._ItemExists(keystore_encryption_id_string)) |
- |
- # The creation of the experiment should be downloaded on the next |
- # GetUpdates. |
- version2, changes, remaining = ( |
- self.GetChangesFromTimestamp([chromiumsync.EXPERIMENTS], version1)) |
- self.assertEqual(len(changes), 1) |
- self.assertEqual(changes[0].id_string, keystore_encryption_id_string) |
- self.assertNotEqual(version1, version2) |
- |
- # Verify the experiment was created properly and is enabled. |
- self.assertEqual(chromiumsync.KEYSTORE_ENCRYPTION_EXPERIMENT_TAG, |
- changes[0].client_defined_unique_tag) |
- self.assertTrue(changes[0].HasField("specifics")) |
- self.assertTrue(changes[0].specifics.HasField("experiments")) |
- self.assertTrue( |
- changes[0].specifics.experiments.HasField("keystore_encryption")) |
- self.assertTrue( |
- changes[0].specifics.experiments.keystore_encryption.enabled) |
- |
-if __name__ == '__main__': |
- unittest.main() |