summaryrefslogtreecommitdiffstats
path: root/net/tools
diff options
context:
space:
mode:
authorlipalani@chromium.org <lipalani@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-12 05:37:47 +0000
committerlipalani@chromium.org <lipalani@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-08-12 05:37:47 +0000
commit8fdb3798ba1f6af297fc0a5474c52d381d9cf2ca (patch)
tree72444f3b31a031749da430300daa8a6b075878fd /net/tools
parent76e248aa53e615c1cbfa98a606f97f9b21fc5c18 (diff)
downloadchromium_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-xnet/tools/testserver/chromiumsync.py23
-rwxr-xr-xnet/tools/testserver/chromiumsync_test.py10
-rwxr-xr-xnet/tools/testserver/testserver.py16
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: