diff options
author | lipalani@chromium.org <lipalani@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-12 05:37:47 +0000 |
---|---|---|
committer | lipalani@chromium.org <lipalani@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-12 05:37:47 +0000 |
commit | 8fdb3798ba1f6af297fc0a5474c52d381d9cf2ca (patch) | |
tree | 72444f3b31a031749da430300daa8a6b075878fd /net/tools | |
parent | 76e248aa53e615c1cbfa98a606f97f9b21fc5c18 (diff) | |
download | chromium_src-8fdb3798ba1f6af297fc0a5474c52d381d9cf2ca.zip chromium_src-8fdb3798ba1f6af297fc0a5474c52d381d9cf2ca.tar.gz chromium_src-8fdb3798ba1f6af297fc0a5474c52d381d9cf2ca.tar.bz2 |
Simulate transient error and verify exponential backoff.
BUG=
TEST=
Review URL: http://codereview.chromium.org/7477004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@96515 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/tools')
-rwxr-xr-x | net/tools/testserver/chromiumsync.py | 23 | ||||
-rwxr-xr-x | net/tools/testserver/chromiumsync_test.py | 10 | ||||
-rwxr-xr-x | net/tools/testserver/testserver.py | 16 |
3 files changed, 48 insertions, 1 deletions
diff --git a/net/tools/testserver/chromiumsync.py b/net/tools/testserver/chromiumsync.py index ac50e7d..cc71d47b 100755 --- a/net/tools/testserver/chromiumsync.py +++ b/net/tools/testserver/chromiumsync.py @@ -101,6 +101,10 @@ class StoreBirthdayError(Error): """The client sent a birthday that doesn't correspond to this server.""" +class TransientError(Error): + """The client would be sent a transient error.""" + + def GetEntryType(entry): """Extract the sync type from a SyncEntry. @@ -877,6 +881,7 @@ class TestServer(object): self.clients = {} self.client_name_generator = ('+' * times + chr(c) for times in xrange(0, sys.maxint) for c in xrange(ord('A'), ord('Z'))) + self.transient_error = False def GetShortClientName(self, query): parsed = cgi.parse_qs(query[query.find('?')+1:]) @@ -895,6 +900,11 @@ class TestServer(object): if self.account.StoreBirthday() != request.store_birthday: raise StoreBirthdayError + def CheckTransientError(self): + """Raises TransientError if transient_error variable is set.""" + if self.transient_error: + raise TransientError + def HandleMigrate(self, path): query = urlparse.urlparse(path)[4] code = 200 @@ -923,6 +933,12 @@ class TestServer(object): 200, '<html><title>Birthday error</title><H1>Birthday error</H1></html>') + def HandleSetTransientError(self): + self.transient_error = True + return ( + 200, + '<html><title>Transient error</title><H1>Transient error</H1></html>') + def HandleCommand(self, query, raw_request): """Decode and handle a sync command from a raw input of bytes. @@ -951,6 +967,7 @@ class TestServer(object): response.error_code = sync_pb2.ClientToServerResponse.SUCCESS self.CheckStoreBirthday(request) response.store_birthday = self.account.store_birthday + self.CheckTransientError(); print_context('->') @@ -988,6 +1005,12 @@ class TestServer(object): response.store_birthday = self.account.store_birthday response.error_code = sync_pb2.ClientToServerResponse.NOT_MY_BIRTHDAY return (200, response.SerializeToString()) + except TransientError as error: + print_context('<-') + print 'TRANSIENT_ERROR' + response.store_birthday = self.account.store_birthday + response.error_code = sync_pb2.ClientToServerResponse.TRANSIENT_ERROR + return (200, response.SerializeToString()) finally: self.account_lock.release() diff --git a/net/tools/testserver/chromiumsync_test.py b/net/tools/testserver/chromiumsync_test.py index af8aa36..1872a9d 100755 --- a/net/tools/testserver/chromiumsync_test.py +++ b/net/tools/testserver/chromiumsync_test.py @@ -437,6 +437,16 @@ class SyncDataModelTest(unittest.TestCase): 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 = autofill_specifics_pb2.autofill theme = theme_specifics_pb2.theme diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py index c9444ba..c0da4ec 100755 --- a/net/tools/testserver/testserver.py +++ b/net/tools/testserver/testserver.py @@ -1405,7 +1405,9 @@ class SyncPageHandler(BasePageHandler): def __init__(self, request, client_address, sync_http_server): get_handlers = [self.ChromiumSyncMigrationOpHandler, self.ChromiumSyncTimeHandler, - self.ChromiumSyncBirthdayErrorOpHandler] + self.ChromiumSyncBirthdayErrorOpHandler, + self.ChromiumSyncTransientErrorOpHandler] + post_handlers = [self.ChromiumSyncCommandHandler, self.ChromiumSyncTimeHandler] BasePageHandler.__init__(self, request, client_address, @@ -1480,6 +1482,18 @@ class SyncPageHandler(BasePageHandler): self.wfile.write(raw_reply) return True; + def ChromiumSyncTransientErrorOpHandler(self): + test_name = "/chromiumsync/transienterror" + if not self._ShouldHandleRequest(test_name): + return False + result, raw_reply = self.server._sync_handler.HandleSetTransientError() + self.send_response(result) + self.send_header('Content-Type', 'text/html') + self.send_header('Content-Length', len(raw_reply)) + self.end_headers() + self.wfile.write(raw_reply) + return True; + def MakeDataDir(): if options.data_dir: |