Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(298)

Side by Side Diff: net/tools/testserver/chromiumsync.py

Issue 7481009: Test birtday error. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: For review Created 9 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/python2.4 1 #!/usr/bin/python2.4
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 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 """An implementation of the server side of the Chromium sync protocol. 6 """An implementation of the server side of the Chromium sync protocol.
7 7
8 The details of the protocol are described mostly by comments in the protocol 8 The details of the protocol are described mostly by comments in the protocol
9 buffer definition at chrome/browser/sync/protocol/sync.proto. 9 buffer definition at chrome/browser/sync/protocol/sync.proto.
10 """ 10 """
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 400
401 def __init__(self): 401 def __init__(self):
402 # Monotonically increasing version number. The next object change will 402 # Monotonically increasing version number. The next object change will
403 # take on this value + 1. 403 # take on this value + 1.
404 self._version = 0 404 self._version = 0
405 405
406 # The definitive copy of this client's items: a map from ID string to a 406 # The definitive copy of this client's items: a map from ID string to a
407 # SyncEntity protocol buffer. 407 # SyncEntity protocol buffer.
408 self._entries = {} 408 self._entries = {}
409 409
410 # TODO(nick): uuid.uuid1() is better, but python 2.5 only. 410 self.ResetStoreBirthday()
411 self.store_birthday = '%0.30f' % random.random()
412 411
413 self.migration_history = MigrationHistory() 412 self.migration_history = MigrationHistory()
414 413
415 def _SaveEntry(self, entry): 414 def _SaveEntry(self, entry):
416 """Insert or update an entry in the change log, and give it a new version. 415 """Insert or update an entry in the change log, and give it a new version.
417 416
418 The ID fields of this entry are assumed to be valid server IDs. This 417 The ID fields of this entry are assumed to be valid server IDs. This
419 entry will be updated with a new version number and sync_timestamp. 418 entry will be updated with a new version number and sync_timestamp.
420 419
421 Args: 420 Args:
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
593 """Ensure creation of all permanent items for a given set of sync types. 592 """Ensure creation of all permanent items for a given set of sync types.
594 593
595 Args: 594 Args:
596 requested_types: A list of sync data types from ALL_TYPES. 595 requested_types: A list of sync data types from ALL_TYPES.
597 Permanent items of only these types will be created. 596 Permanent items of only these types will be created.
598 """ 597 """
599 for spec in self._PERMANENT_ITEM_SPECS: 598 for spec in self._PERMANENT_ITEM_SPECS:
600 if spec.sync_type in requested_types: 599 if spec.sync_type in requested_types:
601 self._CreatePermanentItem(spec) 600 self._CreatePermanentItem(spec)
602 601
602 def ResetStoreBirthday(self):
603 """Resets the store birthday to a random value.
604 """
ncarter (slow) 2011/07/29 18:40:40 The closing """ should be on the prev line for a s
lipalani1 2011/07/29 19:33:24 Done.
605 # TODO(nick): uuid.uuid1() is better, but python 2.5 only.
606 self.store_birthday = '%0.30f' % random.random()
607
608 def StoreBirthday(self):
609 """Gets the store birthday.
610 """
ncarter (slow) 2011/07/29 18:40:40 Here too.
lipalani1 2011/07/29 19:33:24 Done.
611 return self.store_birthday
612
603 def GetChanges(self, sieve): 613 def GetChanges(self, sieve):
604 """Get entries which have changed, oldest first. 614 """Get entries which have changed, oldest first.
605 615
606 The returned entries are limited to being _BATCH_SIZE many. The entries 616 The returned entries are limited to being _BATCH_SIZE many. The entries
607 are returned in strict version order. 617 are returned in strict version order.
608 618
609 Args: 619 Args:
610 sieve: An update sieve to use to filter out updates the client 620 sieve: An update sieve to use to filter out updates the client
611 has already seen. 621 has already seen.
612 Returns: 622 Returns:
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
923 return '?' 933 return '?'
924 client_id = client_id[0] 934 client_id = client_id[0]
925 if client_id not in self.clients: 935 if client_id not in self.clients:
926 self.clients[client_id] = self.client_name_generator.next() 936 self.clients[client_id] = self.client_name_generator.next()
927 return self.clients[client_id] 937 return self.clients[client_id]
928 938
929 def CheckStoreBirthday(self, request): 939 def CheckStoreBirthday(self, request):
930 """Raises StoreBirthdayError if the request's birthday is a mismatch.""" 940 """Raises StoreBirthdayError if the request's birthday is a mismatch."""
931 if not request.HasField('store_birthday'): 941 if not request.HasField('store_birthday'):
932 return 942 return
933 if self.account.store_birthday != request.store_birthday: 943 if self.account.StoreBirthday() != request.store_birthday:
934 raise StoreBirthdayError 944 raise StoreBirthdayError
935 945
936 def HandleMigrate(self, path): 946 def HandleMigrate(self, path):
937 query = urlparse.urlparse(path)[4] 947 query = urlparse.urlparse(path)[4]
938 code = 200 948 code = 200
939 self.account_lock.acquire() 949 self.account_lock.acquire()
940 try: 950 try:
941 datatypes = [DataTypeStringToSyncTypeLoose(x) 951 datatypes = [DataTypeStringToSyncTypeLoose(x)
942 for x in urlparse.parse_qs(query).get('type',[])] 952 for x in urlparse.parse_qs(query).get('type',[])]
943 if datatypes: 953 if datatypes:
944 self.account.TriggerMigration(datatypes) 954 self.account.TriggerMigration(datatypes)
945 response = 'Migrated datatypes %s' % ( 955 response = 'Migrated datatypes %s' % (
946 ' and '.join(SyncTypeToString(x).upper() for x in datatypes)) 956 ' and '.join(SyncTypeToString(x).upper() for x in datatypes))
947 else: 957 else:
948 response = 'Please specify one or more <i>type=name</i> parameters' 958 response = 'Please specify one or more <i>type=name</i> parameters'
949 code = 400 959 code = 400
950 except DataTypeIdNotRecognized, error: 960 except DataTypeIdNotRecognized, error:
951 response = 'Could not interpret datatype name' 961 response = 'Could not interpret datatype name'
952 code = 400 962 code = 400
953 finally: 963 finally:
954 self.account_lock.release() 964 self.account_lock.release()
955 return (code, '<html><title>Migration: %d</title><H1>%d %s</H1></html>' % 965 return (code, '<html><title>Migration: %d</title><H1>%d %s</H1></html>' %
956 (code, code, response)) 966 (code, code, response))
957 967
968 def HandleCreateBirthdayError(self):
969 self.account.ResetStoreBirthday()
970 return (
971 200,
972 '<html><title>Birthday error</title><H1>Birthday error</H1></html>')
973
958 def HandleCommand(self, query, raw_request): 974 def HandleCommand(self, query, raw_request):
959 """Decode and handle a sync command from a raw input of bytes. 975 """Decode and handle a sync command from a raw input of bytes.
960 976
961 This is the main entry point for this class. It is safe to call this 977 This is the main entry point for this class. It is safe to call this
962 method from multiple threads. 978 method from multiple threads.
963 979
964 Args: 980 Args:
965 raw_request: An iterable byte sequence to be interpreted as a sync 981 raw_request: An iterable byte sequence to be interpreted as a sync
966 protocol command. 982 protocol command.
967 Returns: 983 Returns:
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 1103
1088 update_sieve.CheckMigrationState() 1104 update_sieve.CheckMigrationState()
1089 1105
1090 new_timestamp, entries, remaining = self.account.GetChanges(update_sieve) 1106 new_timestamp, entries, remaining = self.account.GetChanges(update_sieve)
1091 1107
1092 update_response.changes_remaining = remaining 1108 update_response.changes_remaining = remaining
1093 for entry in entries: 1109 for entry in entries:
1094 reply = update_response.entries.add() 1110 reply = update_response.entries.add()
1095 reply.CopyFrom(entry) 1111 reply.CopyFrom(entry)
1096 update_sieve.SaveProgress(new_timestamp, update_response) 1112 update_sieve.SaveProgress(new_timestamp, update_response)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698