OLD | NEW |
---|---|
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2013 The Chromium Authors. All rights reserved. | 2 # Copyright 2013 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 """This is a python sync server used for testing Chrome Sync. | 6 """This is a python sync server used for testing Chrome Sync. |
7 | 7 |
8 By default, it listens on an ephemeral port and xmpp_port and sends the port | 8 By default, it listens on an ephemeral port and xmpp_port and sends the port |
9 numbers back to the originating process over a pipe. The originating process can | 9 numbers back to the originating process over a pipe. The originating process can |
10 specify an explicit port and xmpp_port if necessary. | 10 specify an explicit port and xmpp_port if necessary. |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
144 self.ChromiumSyncEnableNotificationsOpHandler, | 144 self.ChromiumSyncEnableNotificationsOpHandler, |
145 self.ChromiumSyncSendNotificationOpHandler, | 145 self.ChromiumSyncSendNotificationOpHandler, |
146 self.ChromiumSyncBirthdayErrorOpHandler, | 146 self.ChromiumSyncBirthdayErrorOpHandler, |
147 self.ChromiumSyncTransientErrorOpHandler, | 147 self.ChromiumSyncTransientErrorOpHandler, |
148 self.ChromiumSyncErrorOpHandler, | 148 self.ChromiumSyncErrorOpHandler, |
149 self.ChromiumSyncSyncTabFaviconsOpHandler, | 149 self.ChromiumSyncSyncTabFaviconsOpHandler, |
150 self.ChromiumSyncCreateSyncedBookmarksOpHandler, | 150 self.ChromiumSyncCreateSyncedBookmarksOpHandler, |
151 self.ChromiumSyncEnableKeystoreEncryptionOpHandler, | 151 self.ChromiumSyncEnableKeystoreEncryptionOpHandler, |
152 self.ChromiumSyncRotateKeystoreKeysOpHandler, | 152 self.ChromiumSyncRotateKeystoreKeysOpHandler, |
153 self.ChromiumSyncEnableManagedUserAcknowledgementHandler, | 153 self.ChromiumSyncEnableManagedUserAcknowledgementHandler, |
154 self.ChromiumSyncEnablePreCommitGetUpdateAvoidanceHandler] | 154 self.ChromiumSyncEnablePreCommitGetUpdateAvoidanceHandler, |
155 self.GaiaOAuth2TokenHandler, | |
156 self.GaiaSetOAuth2TokenResponseHandler] | |
155 | 157 |
156 post_handlers = [self.ChromiumSyncCommandHandler, | 158 post_handlers = [self.ChromiumSyncCommandHandler, |
157 self.ChromiumSyncTimeHandler] | 159 self.ChromiumSyncTimeHandler, |
160 self.GaiaOAuth2TokenHandler, | |
161 self.GaiaSetOAuth2TokenResponseHandler] | |
158 testserver_base.BasePageHandler.__init__(self, request, client_address, | 162 testserver_base.BasePageHandler.__init__(self, request, client_address, |
159 sync_http_server, [], get_handlers, | 163 sync_http_server, [], get_handlers, |
160 [], post_handlers, []) | 164 [], post_handlers, []) |
161 | 165 |
162 | 166 |
163 def ChromiumSyncTimeHandler(self): | 167 def ChromiumSyncTimeHandler(self): |
164 """Handle Chromium sync .../time requests. | 168 """Handle Chromium sync .../time requests. |
165 | 169 |
166 The syncer sometimes checks server reachability by examining /time. | 170 The syncer sometimes checks server reachability by examining /time. |
167 """ | 171 """ |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
434 return False | 438 return False |
435 result, raw_reply = ( | 439 result, raw_reply = ( |
436 self.server._sync_handler.HandleEnablePreCommitGetUpdateAvoidance()) | 440 self.server._sync_handler.HandleEnablePreCommitGetUpdateAvoidance()) |
437 self.send_response(result) | 441 self.send_response(result) |
438 self.send_header('Content-Type', 'text/html') | 442 self.send_header('Content-Type', 'text/html') |
439 self.send_header('Content-Length', len(raw_reply)) | 443 self.send_header('Content-Length', len(raw_reply)) |
440 self.end_headers() | 444 self.end_headers() |
441 self.wfile.write(raw_reply) | 445 self.wfile.write(raw_reply) |
442 return True | 446 return True |
443 | 447 |
448 def GaiaOAuth2TokenHandler(self): | |
449 test_name = "/o/oauth2/token" | |
450 if not self._ShouldHandleRequest(test_name): | |
451 return False | |
452 if self.headers.getheader('content-length'): | |
453 length = int(self.headers.getheader('content-length')) | |
454 _raw_request = self.rfile.read(length) | |
455 result, raw_reply = ( | |
456 self.server._sync_handler.HandleGetOauth2Token()) | |
457 self.send_response(result) | |
458 self.send_header('Content-Type', 'text/html') | |
pavely
2013/11/05 20:52:38
content-type should be application/json
Raghu Simha
2013/11/06 15:50:26
Done.
| |
459 self.send_header('Content-Length', len(raw_reply)) | |
460 self.end_headers() | |
461 self.wfile.write(raw_reply) | |
462 return True | |
463 | |
464 def GaiaSetOAuth2TokenResponseHandler(self): | |
465 test_name = "/setfakeoauth2token" | |
466 if not self._ShouldHandleRequest(test_name): | |
467 return False | |
468 | |
469 # The index of 'query' is 4. | |
470 # See http://docs.python.org/2/library/urlparse.html | |
471 query = urlparse.urlparse(self.path)[4] | |
472 query_params = urlparse.parse_qs(query) | |
473 | |
474 response_code = 0 | |
475 request_token = '' | |
476 access_token = '' | |
477 expires_in = 0 | |
478 token_type = '' | |
479 | |
480 if 'response_code' in query_params: | |
481 response_code = query_params['response_code'][0] | |
482 if 'request_token' in query_params: | |
483 request_token = query_params['request_token'][0] | |
484 if 'access_token' in query_params: | |
485 access_token = query_params['access_token'][0] | |
486 if 'expires_in' in query_params: | |
487 expires_in = query_params['expires_in'][0] | |
488 if 'token_type' in query_params: | |
489 token_type = query_params['token_type'][0] | |
490 | |
491 result, raw_reply = ( | |
492 self.server._sync_handler.HandleSetOauth2Token( | |
493 response_code, request_token, access_token, expires_in, token_type)) | |
494 self.send_response(result) | |
495 self.send_header('Content-Type', 'text/html') | |
496 self.send_header('Content-Length', len(raw_reply)) | |
497 self.end_headers() | |
498 self.wfile.write(raw_reply) | |
499 return True | |
500 | |
501 | |
444 class SyncServerRunner(testserver_base.TestServerRunner): | 502 class SyncServerRunner(testserver_base.TestServerRunner): |
445 """TestServerRunner for the net test servers.""" | 503 """TestServerRunner for the net test servers.""" |
446 | 504 |
447 def __init__(self): | 505 def __init__(self): |
448 super(SyncServerRunner, self).__init__() | 506 super(SyncServerRunner, self).__init__() |
449 | 507 |
450 def create_server(self, server_data): | 508 def create_server(self, server_data): |
451 port = self.options.port | 509 port = self.options.port |
452 host = self.options.host | 510 host = self.options.host |
453 xmpp_port = self.options.xmpp_port | 511 xmpp_port = self.options.xmpp_port |
454 server = SyncHTTPServer((host, port), xmpp_port, SyncPageHandler) | 512 server = SyncHTTPServer((host, port), xmpp_port, SyncPageHandler) |
455 print 'Sync HTTP server started on port %d...' % server.server_port | 513 print ('Sync HTTP server started at %s:%d/chromiumsync...' % |
456 print 'Sync XMPP server started on port %d...' % server.xmpp_port | 514 (host, server.server_port)) |
515 print ('Fake OAuth2 Token server started at %s:%d/o/oauth2/token...' % | |
516 (host, server.server_port)) | |
517 print ('Sync XMPP server started at %s:%d...' % | |
518 (host, server.xmpp_port)) | |
457 server_data['port'] = server.server_port | 519 server_data['port'] = server.server_port |
458 server_data['xmpp_port'] = server.xmpp_port | 520 server_data['xmpp_port'] = server.xmpp_port |
459 return server | 521 return server |
460 | 522 |
461 def run_server(self): | 523 def run_server(self): |
462 testserver_base.TestServerRunner.run_server(self) | 524 testserver_base.TestServerRunner.run_server(self) |
463 | 525 |
464 def add_options(self): | 526 def add_options(self): |
465 testserver_base.TestServerRunner.add_options(self) | 527 testserver_base.TestServerRunner.add_options(self) |
466 self.option_parser.add_option('--xmpp-port', default='0', type='int', | 528 self.option_parser.add_option('--xmpp-port', default='0', type='int', |
467 help='Port used by the XMPP server. If ' | 529 help='Port used by the XMPP server. If ' |
468 'unspecified, the XMPP server will listen on ' | 530 'unspecified, the XMPP server will listen on ' |
469 'an ephemeral port.') | 531 'an ephemeral port.') |
470 # Override the default logfile name used in testserver.py. | 532 # Override the default logfile name used in testserver.py. |
471 self.option_parser.set_defaults(log_file='sync_testserver.log') | 533 self.option_parser.set_defaults(log_file='sync_testserver.log') |
472 | 534 |
473 if __name__ == '__main__': | 535 if __name__ == '__main__': |
474 sys.exit(SyncServerRunner().main()) | 536 sys.exit(SyncServerRunner().main()) |
OLD | NEW |