diff options
author | rsimha@chromium.org <rsimha@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-06 15:56:16 +0000 |
---|---|---|
committer | rsimha@chromium.org <rsimha@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-06 15:56:16 +0000 |
commit | 072e8522e404a1d3e9b3dc437b699df20d3fc224 (patch) | |
tree | fc6b404e02c2ff3d0106426cd2272e3f783b692d /sync | |
parent | 5e6ae79b96d96b38bad9d20fcf0987399bded674 (diff) | |
download | chromium_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.py | 39 | ||||
-rwxr-xr-x | sync/tools/testserver/sync_testserver.py | 70 |
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 |