summaryrefslogtreecommitdiffstats
path: root/sync
diff options
context:
space:
mode:
authorrsimha@chromium.org <rsimha@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-06 15:56:16 +0000
committerrsimha@chromium.org <rsimha@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-06 15:56:16 +0000
commit072e8522e404a1d3e9b3dc437b699df20d3fc224 (patch)
treefc6b404e02c2ff3d0106426cd2272e3f783b692d /sync
parent5e6ae79b96d96b38bad9d20fcf0987399bded674 (diff)
downloadchromium_src-072e8522e404a1d3e9b3dc437b699df20d3fc224.zip
chromium_src-072e8522e404a1d3e9b3dc437b699df20d3fc224.tar.gz
chromium_src-072e8522e404a1d3e9b3dc437b699df20d3fc224.tar.bz2
[sync] Serve fake OAuth2 tokens from python sync server
This CL adds a new handler to the python sync server so it can serve fake OAuth2 tokens to chrome. It is meant to be used for manual testing with the python sync server, using the workflow described below: - Build the "run_sync_testserver" target. - Run the python sync server: "out/Debug/run_sync_testserver --port=8010" - Launch chrome, sign in, and set up sync - Re-launch chrome with "--lso-url=http://127.0.0.1:8010" Chrome will now fetch OAuth2 tokens from the fake gaia server. You may change the fake OAuth2 token returned by the python sync server on the fly via the setfakeoauth2token handler like so: http://127.0.0.1:8010/setfakeoauth2token?response_code=200&expires_in=2400&request_token=rt&access_token=at&token_type=Bearer You may skip or include any of the query params. Params that are skipped will remain unchanged. BUG=none TEST=Build and run the "run_sync_testserver" target. Test the /o/oauth2/token and /setfakeoauth2token handlers. R=pavely@chromium.org Review URL: https://codereview.chromium.org/58093002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@233271 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'sync')
-rw-r--r--sync/tools/testserver/chromiumsync.py39
-rwxr-xr-xsync/tools/testserver/sync_testserver.py70
2 files changed, 105 insertions, 4 deletions
diff --git a/sync/tools/testserver/chromiumsync.py b/sync/tools/testserver/chromiumsync.py
index 7e898c2..0f401d1 100644
--- a/sync/tools/testserver/chromiumsync.py
+++ b/sync/tools/testserver/chromiumsync.py
@@ -1158,6 +1158,13 @@ class TestServer(object):
for times in xrange(0, sys.maxint) for c in xrange(ord('A'), ord('Z')))
self.transient_error = False
self.sync_count = 0
+ # Gaia OAuth2 Token fields and their default values.
+ self.response_code = 200
+ self.request_token = 'rt1'
+ self.access_token = 'at1'
+ self.expires_in = 3600
+ self.token_type = 'Bearer'
+
def GetShortClientName(self, query):
parsed = cgi.parse_qs(query[query.find('?')+1:])
@@ -1482,3 +1489,35 @@ class TestServer(object):
if update_request.need_encryption_key or sending_nigori_node:
update_response.encryption_keys.extend(self.account.GetKeystoreKeys())
+
+ def HandleGetOauth2Token(self):
+ return (int(self.response_code),
+ '{\n'
+ ' \"refresh_token\": \"' + self.request_token + '\",\n'
+ ' \"access_token\": \"' + self.access_token + '\",\n'
+ ' \"expires_in\": ' + str(self.expires_in) + ',\n'
+ ' \"token_type\": \"' + self.token_type +'\"\n'
+ '}')
+
+ def HandleSetOauth2Token(self, response_code, request_token, access_token,
+ expires_in, token_type):
+ if response_code != 0:
+ self.response_code = response_code
+ if request_token != '':
+ self.request_token = request_token
+ if access_token != '':
+ self.access_token = access_token
+ if expires_in != 0:
+ self.expires_in = expires_in
+ if token_type != '':
+ self.token_type = token_type
+
+ return (200,
+ '<html><title>Set OAuth2 Token</title>'
+ '<H1>This server will now return the OAuth2 Token:</H1>'
+ '<p>response_code: ' + str(self.response_code) + '</p>'
+ '<p>request_token: ' + self.request_token + '</p>'
+ '<p>access_token: ' + self.access_token + '</p>'
+ '<p>expires_in: ' + str(self.expires_in) + '</p>'
+ '<p>token_type: ' + self.token_type + '</p>'
+ '</html>')
diff --git a/sync/tools/testserver/sync_testserver.py b/sync/tools/testserver/sync_testserver.py
index 53532cb..7a90a25 100755
--- a/sync/tools/testserver/sync_testserver.py
+++ b/sync/tools/testserver/sync_testserver.py
@@ -151,10 +151,14 @@ class SyncPageHandler(testserver_base.BasePageHandler):
self.ChromiumSyncEnableKeystoreEncryptionOpHandler,
self.ChromiumSyncRotateKeystoreKeysOpHandler,
self.ChromiumSyncEnableManagedUserAcknowledgementHandler,
- self.ChromiumSyncEnablePreCommitGetUpdateAvoidanceHandler]
+ self.ChromiumSyncEnablePreCommitGetUpdateAvoidanceHandler,
+ self.GaiaOAuth2TokenHandler,
+ self.GaiaSetOAuth2TokenResponseHandler]
post_handlers = [self.ChromiumSyncCommandHandler,
- self.ChromiumSyncTimeHandler]
+ self.ChromiumSyncTimeHandler,
+ self.GaiaOAuth2TokenHandler,
+ self.GaiaSetOAuth2TokenResponseHandler]
testserver_base.BasePageHandler.__init__(self, request, client_address,
sync_http_server, [], get_handlers,
[], post_handlers, [])
@@ -441,6 +445,60 @@ class SyncPageHandler(testserver_base.BasePageHandler):
self.wfile.write(raw_reply)
return True
+ def GaiaOAuth2TokenHandler(self):
+ test_name = "/o/oauth2/token"
+ if not self._ShouldHandleRequest(test_name):
+ return False
+ if self.headers.getheader('content-length'):
+ length = int(self.headers.getheader('content-length'))
+ _raw_request = self.rfile.read(length)
+ result, raw_reply = (
+ self.server._sync_handler.HandleGetOauth2Token())
+ self.send_response(result)
+ self.send_header('Content-Type', 'application/json')
+ self.send_header('Content-Length', len(raw_reply))
+ self.end_headers()
+ self.wfile.write(raw_reply)
+ return True
+
+ def GaiaSetOAuth2TokenResponseHandler(self):
+ test_name = "/setfakeoauth2token"
+ if not self._ShouldHandleRequest(test_name):
+ return False
+
+ # The index of 'query' is 4.
+ # See http://docs.python.org/2/library/urlparse.html
+ query = urlparse.urlparse(self.path)[4]
+ query_params = urlparse.parse_qs(query)
+
+ response_code = 0
+ request_token = ''
+ access_token = ''
+ expires_in = 0
+ token_type = ''
+
+ if 'response_code' in query_params:
+ response_code = query_params['response_code'][0]
+ if 'request_token' in query_params:
+ request_token = query_params['request_token'][0]
+ if 'access_token' in query_params:
+ access_token = query_params['access_token'][0]
+ if 'expires_in' in query_params:
+ expires_in = query_params['expires_in'][0]
+ if 'token_type' in query_params:
+ token_type = query_params['token_type'][0]
+
+ result, raw_reply = (
+ self.server._sync_handler.HandleSetOauth2Token(
+ response_code, request_token, access_token, expires_in, token_type))
+ 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
+
+
class SyncServerRunner(testserver_base.TestServerRunner):
"""TestServerRunner for the net test servers."""
@@ -452,8 +510,12 @@ class SyncServerRunner(testserver_base.TestServerRunner):
host = self.options.host
xmpp_port = self.options.xmpp_port
server = SyncHTTPServer((host, port), xmpp_port, SyncPageHandler)
- print 'Sync HTTP server started on port %d...' % server.server_port
- print 'Sync XMPP server started on port %d...' % server.xmpp_port
+ print ('Sync HTTP server started at %s:%d/chromiumsync...' %
+ (host, server.server_port))
+ print ('Fake OAuth2 Token server started at %s:%d/o/oauth2/token...' %
+ (host, server.server_port))
+ print ('Sync XMPP server started at %s:%d...' %
+ (host, server.xmpp_port))
server_data['port'] = server.server_port
server_data['xmpp_port'] = server.xmpp_port
return server