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 |