| 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 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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, | 155 self.GaiaOAuth2TokenHandler, |
| 156 self.GaiaSetOAuth2TokenResponseHandler, | 156 self.GaiaSetOAuth2TokenResponseHandler, |
| 157 self.TriggerSyncedNotificationHandler, | |
| 158 self.SyncedNotificationsPageHandler, | |
| 159 self.TriggerSyncedNotificationAppInfoHandler, | |
| 160 self.SyncedNotificationsAppInfoPageHandler, | |
| 161 self.CustomizeClientCommandHandler] | 157 self.CustomizeClientCommandHandler] |
| 162 | 158 |
| 163 post_handlers = [self.ChromiumSyncCommandHandler, | 159 post_handlers = [self.ChromiumSyncCommandHandler, |
| 164 self.ChromiumSyncTimeHandler, | 160 self.ChromiumSyncTimeHandler, |
| 165 self.GaiaOAuth2TokenHandler, | 161 self.GaiaOAuth2TokenHandler, |
| 166 self.GaiaSetOAuth2TokenResponseHandler] | 162 self.GaiaSetOAuth2TokenResponseHandler] |
| 167 testserver_base.BasePageHandler.__init__(self, request, client_address, | 163 testserver_base.BasePageHandler.__init__(self, request, client_address, |
| 168 sync_http_server, [], get_handlers, | 164 sync_http_server, [], get_handlers, |
| 169 [], post_handlers, []) | 165 [], post_handlers, []) |
| 170 | 166 |
| (...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 496 result, raw_reply = ( | 492 result, raw_reply = ( |
| 497 self.server._sync_handler.HandleSetOauth2Token( | 493 self.server._sync_handler.HandleSetOauth2Token( |
| 498 response_code, request_token, access_token, expires_in, token_type)) | 494 response_code, request_token, access_token, expires_in, token_type)) |
| 499 self.send_response(result) | 495 self.send_response(result) |
| 500 self.send_header('Content-Type', 'text/html') | 496 self.send_header('Content-Type', 'text/html') |
| 501 self.send_header('Content-Length', len(raw_reply)) | 497 self.send_header('Content-Length', len(raw_reply)) |
| 502 self.end_headers() | 498 self.end_headers() |
| 503 self.wfile.write(raw_reply) | 499 self.wfile.write(raw_reply) |
| 504 return True | 500 return True |
| 505 | 501 |
| 506 def TriggerSyncedNotificationHandler(self): | |
| 507 test_name = "/triggersyncednotification" | |
| 508 if not self._ShouldHandleRequest(test_name): | |
| 509 return False | |
| 510 | |
| 511 query = urlparse.urlparse(self.path)[4] | |
| 512 query_params = urlparse.parse_qs(query) | |
| 513 | |
| 514 serialized_notification = '' | |
| 515 | |
| 516 if 'serialized_notification' in query_params: | |
| 517 serialized_notification = query_params['serialized_notification'][0] | |
| 518 | |
| 519 try: | |
| 520 notification_string = self.server._sync_handler.account \ | |
| 521 .AddSyncedNotification(serialized_notification) | |
| 522 reply = "A synced notification was triggered:\n\n" | |
| 523 reply += "<code>{}</code>.".format(notification_string) | |
| 524 response_code = 200 | |
| 525 except chromiumsync.ClientNotConnectedError: | |
| 526 reply = ('The client is not connected to the server, so the notification' | |
| 527 ' could not be created.') | |
| 528 response_code = 400 | |
| 529 | |
| 530 self.send_response(response_code) | |
| 531 self.send_header('Content-Type', 'text/html') | |
| 532 self.send_header('Content-Length', len(reply)) | |
| 533 self.end_headers() | |
| 534 self.wfile.write(reply) | |
| 535 return True | |
| 536 | |
| 537 def TriggerSyncedNotificationAppInfoHandler(self): | |
| 538 test_name = "/triggersyncednotificationappinfo" | |
| 539 if not self._ShouldHandleRequest(test_name): | |
| 540 return False | |
| 541 | |
| 542 query = urlparse.urlparse(self.path)[4] | |
| 543 query_params = urlparse.parse_qs(query) | |
| 544 | |
| 545 app_info = '' | |
| 546 | |
| 547 if 'synced_notification_app_info' in query_params: | |
| 548 app_info = query_params['synced_notification_app_info'][0] | |
| 549 | |
| 550 try: | |
| 551 app_info_string = self.server._sync_handler.account \ | |
| 552 .AddSyncedNotificationAppInfo(app_info) | |
| 553 reply = "A synced notification app info was sent:\n\n" | |
| 554 reply += "<code>{}</code>.".format(app_info_string) | |
| 555 response_code = 200 | |
| 556 except chromiumsync.ClientNotConnectedError: | |
| 557 reply = ('The client is not connected to the server, so the app info' | |
| 558 ' could not be created.') | |
| 559 response_code = 400 | |
| 560 | |
| 561 self.send_response(response_code) | |
| 562 self.send_header('Content-Type', 'text/html') | |
| 563 self.send_header('Content-Length', len(reply)) | |
| 564 self.end_headers() | |
| 565 self.wfile.write(reply) | |
| 566 return True | |
| 567 | |
| 568 def CustomizeClientCommandHandler(self): | 502 def CustomizeClientCommandHandler(self): |
| 569 test_name = "/customizeclientcommand" | 503 test_name = "/customizeclientcommand" |
| 570 if not self._ShouldHandleRequest(test_name): | 504 if not self._ShouldHandleRequest(test_name): |
| 571 return False | 505 return False |
| 572 | 506 |
| 573 query = urlparse.urlparse(self.path)[4] | 507 query = urlparse.urlparse(self.path)[4] |
| 574 query_params = urlparse.parse_qs(query) | 508 query_params = urlparse.parse_qs(query) |
| 575 | 509 |
| 576 if 'sessions_commit_delay_seconds' in query_params: | 510 if 'sessions_commit_delay_seconds' in query_params: |
| 577 sessions_commit_delay = query_params['sessions_commit_delay_seconds'][0] | 511 sessions_commit_delay = query_params['sessions_commit_delay_seconds'][0] |
| (...skipping 10 matching lines...) Expand all Loading... |
| 588 response_code = 400 | 522 response_code = 400 |
| 589 reply = "sessions_commit_delay_seconds is required" | 523 reply = "sessions_commit_delay_seconds is required" |
| 590 | 524 |
| 591 self.send_response(response_code) | 525 self.send_response(response_code) |
| 592 self.send_header('Content-Type', 'text/html') | 526 self.send_header('Content-Type', 'text/html') |
| 593 self.send_header('Content-Length', len(reply)) | 527 self.send_header('Content-Length', len(reply)) |
| 594 self.end_headers() | 528 self.end_headers() |
| 595 self.wfile.write(reply) | 529 self.wfile.write(reply) |
| 596 return True | 530 return True |
| 597 | 531 |
| 598 def SyncedNotificationsPageHandler(self): | |
| 599 test_name = "/syncednotifications" | |
| 600 if not self._ShouldHandleRequest(test_name): | |
| 601 return False | |
| 602 | |
| 603 html = open('sync/tools/testserver/synced_notifications.html', 'r').read() | |
| 604 | |
| 605 self.send_response(200) | |
| 606 self.send_header('Content-Type', 'text/html') | |
| 607 self.send_header('Content-Length', len(html)) | |
| 608 self.end_headers() | |
| 609 self.wfile.write(html) | |
| 610 return True | |
| 611 | |
| 612 def SyncedNotificationsAppInfoPageHandler(self): | |
| 613 test_name = "/syncednotificationsappinfo" | |
| 614 if not self._ShouldHandleRequest(test_name): | |
| 615 return False | |
| 616 | |
| 617 html = \ | |
| 618 open('sync/tools/testserver/synced_notification_app_info.html', 'r').\ | |
| 619 read() | |
| 620 | |
| 621 self.send_response(200) | |
| 622 self.send_header('Content-Type', 'text/html') | |
| 623 self.send_header('Content-Length', len(html)) | |
| 624 self.end_headers() | |
| 625 self.wfile.write(html) | |
| 626 return True | |
| 627 | |
| 628 class SyncServerRunner(testserver_base.TestServerRunner): | 532 class SyncServerRunner(testserver_base.TestServerRunner): |
| 629 """TestServerRunner for the net test servers.""" | 533 """TestServerRunner for the net test servers.""" |
| 630 | 534 |
| 631 def __init__(self): | 535 def __init__(self): |
| 632 super(SyncServerRunner, self).__init__() | 536 super(SyncServerRunner, self).__init__() |
| 633 | 537 |
| 634 def create_server(self, server_data): | 538 def create_server(self, server_data): |
| 635 port = self.options.port | 539 port = self.options.port |
| 636 host = self.options.host | 540 host = self.options.host |
| 637 xmpp_port = self.options.xmpp_port | 541 xmpp_port = self.options.xmpp_port |
| (...skipping 15 matching lines...) Expand all Loading... |
| 653 testserver_base.TestServerRunner.add_options(self) | 557 testserver_base.TestServerRunner.add_options(self) |
| 654 self.option_parser.add_option('--xmpp-port', default='0', type='int', | 558 self.option_parser.add_option('--xmpp-port', default='0', type='int', |
| 655 help='Port used by the XMPP server. If ' | 559 help='Port used by the XMPP server. If ' |
| 656 'unspecified, the XMPP server will listen on ' | 560 'unspecified, the XMPP server will listen on ' |
| 657 'an ephemeral port.') | 561 'an ephemeral port.') |
| 658 # Override the default logfile name used in testserver.py. | 562 # Override the default logfile name used in testserver.py. |
| 659 self.option_parser.set_defaults(log_file='sync_testserver.log') | 563 self.option_parser.set_defaults(log_file='sync_testserver.log') |
| 660 | 564 |
| 661 if __name__ == '__main__': | 565 if __name__ == '__main__': |
| 662 sys.exit(SyncServerRunner().main()) | 566 sys.exit(SyncServerRunner().main()) |
| OLD | NEW |