| Index: net/tools/testserver/testserver.py
|
| diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py
|
| index 3679a0349cbc69119e097f85cb97aa59e277c0c7..7ff1fed179d858b06d4eee7d649e5bef660c26ac 100755
|
| --- a/net/tools/testserver/testserver.py
|
| +++ b/net/tools/testserver/testserver.py
|
| @@ -1,9 +1,10 @@
|
| #!/usr/bin/env python
|
| -# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +# Copyright 2013 The Chromium Authors. All rights reserved.
|
| # Use of this source code is governed by a BSD-style license that can be
|
| # found in the LICENSE file.
|
|
|
| -"""This is a simple HTTP/FTP/SYNC/TCP/UDP/ server used for testing Chrome.
|
| +"""This is a simple HTTP/FTP/TCP/UDP/BASIC_AUTH_PROXY/WEBSOCKET server used for
|
| +testing Chrome.
|
|
|
| It supports several test URLs, as specified by the handlers in TestPageHandler.
|
| By default, it listens on an ephemeral port and sends the port number back to
|
| @@ -13,13 +14,10 @@ It can use https if you specify the flag --https=CERT where CERT is the path
|
| to a pem file containing the certificate and private key that should be used.
|
| """
|
|
|
| -import asyncore
|
| import base64
|
| import BaseHTTPServer
|
| import cgi
|
| -import errno
|
| import hashlib
|
| -import json
|
| import logging
|
| import minica
|
| import os
|
| @@ -49,23 +47,15 @@ from mod_pywebsocket.standalone import WebSocketServer
|
|
|
| SERVER_HTTP = 0
|
| SERVER_FTP = 1
|
| -SERVER_SYNC = 2
|
| -SERVER_TCP_ECHO = 3
|
| -SERVER_UDP_ECHO = 4
|
| -SERVER_BASIC_AUTH_PROXY = 5
|
| -SERVER_WEBSOCKET = 6
|
| +SERVER_TCP_ECHO = 2
|
| +SERVER_UDP_ECHO = 3
|
| +SERVER_BASIC_AUTH_PROXY = 4
|
| +SERVER_WEBSOCKET = 5
|
|
|
| # Default request queue size for WebSocketServer.
|
| _DEFAULT_REQUEST_QUEUE_SIZE = 128
|
|
|
|
|
| -# Using debug() seems to cause hangs on XP: see http://crbug.com/64515 .
|
| -debug_output = sys.stderr
|
| -def debug(string):
|
| - debug_output.write(string + "\n")
|
| - debug_output.flush()
|
| -
|
| -
|
| class WebSocketOptions:
|
| """Holds options for WebSocketServer."""
|
|
|
| @@ -105,57 +95,16 @@ class RecordingSSLSessionCache(object):
|
| self.log.append(('insert', sessionID))
|
|
|
|
|
| -class ClientRestrictingServerMixIn:
|
| - """Implements verify_request to limit connections to our configured IP
|
| - address."""
|
| -
|
| - def verify_request(self, _request, client_address):
|
| - return client_address[0] == self.server_address[0]
|
| -
|
| -
|
| -class BrokenPipeHandlerMixIn:
|
| - """Allows the server to deal with "broken pipe" errors (which happen if the
|
| - browser quits with outstanding requests, like for the favicon). This mix-in
|
| - requires the class to derive from SocketServer.BaseServer and not override its
|
| - handle_error() method. """
|
| -
|
| - def handle_error(self, request, client_address):
|
| - value = sys.exc_info()[1]
|
| - if isinstance(value, socket.error):
|
| - err = value.args[0]
|
| - if sys.platform in ('win32', 'cygwin'):
|
| - # "An established connection was aborted by the software in your host."
|
| - pipe_err = 10053
|
| - else:
|
| - pipe_err = errno.EPIPE
|
| - if err == pipe_err:
|
| - print "testserver.py: Broken pipe"
|
| - return
|
| - SocketServer.BaseServer.handle_error(self, request, client_address)
|
| -
|
| -
|
| -class StoppableHTTPServer(BaseHTTPServer.HTTPServer):
|
| - """This is a specialization of BaseHTTPServer to allow it
|
| - to be exited cleanly (by setting its "stop" member to True)."""
|
| -
|
| - def serve_forever(self):
|
| - self.stop = False
|
| - self.nonce_time = None
|
| - while not self.stop:
|
| - self.handle_request()
|
| - self.socket.close()
|
| -
|
| -
|
| -class HTTPServer(ClientRestrictingServerMixIn,
|
| - BrokenPipeHandlerMixIn,
|
| - StoppableHTTPServer):
|
| +class HTTPServer(testserver_base.ClientRestrictingServerMixIn,
|
| + testserver_base.BrokenPipeHandlerMixIn,
|
| + testserver_base.StoppableHTTPServer):
|
| """This is a specialization of StoppableHTTPServer that adds client
|
| verification."""
|
|
|
| pass
|
|
|
| -class OCSPServer(ClientRestrictingServerMixIn,
|
| - BrokenPipeHandlerMixIn,
|
| +class OCSPServer(testserver_base.ClientRestrictingServerMixIn,
|
| + testserver_base.BrokenPipeHandlerMixIn,
|
| BaseHTTPServer.HTTPServer):
|
| """This is a specialization of HTTPServer that serves an
|
| OCSP response"""
|
| @@ -171,9 +120,9 @@ class OCSPServer(ClientRestrictingServerMixIn,
|
|
|
|
|
| class HTTPSServer(tlslite.api.TLSSocketServerMixIn,
|
| - ClientRestrictingServerMixIn,
|
| - BrokenPipeHandlerMixIn,
|
| - StoppableHTTPServer):
|
| + testserver_base.ClientRestrictingServerMixIn,
|
| + testserver_base.BrokenPipeHandlerMixIn,
|
| + testserver_base.StoppableHTTPServer):
|
| """This is a specialization of StoppableHTTPServer that add https support and
|
| client verification."""
|
|
|
| @@ -201,7 +150,9 @@ class HTTPSServer(tlslite.api.TLSSocketServerMixIn,
|
| self.session_cache = RecordingSSLSessionCache()
|
| else:
|
| self.session_cache = tlslite.api.SessionCache()
|
| - StoppableHTTPServer.__init__(self, server_address, request_hander_class)
|
| + testserver_base.StoppableHTTPServer.__init__(self,
|
| + server_address,
|
| + request_hander_class)
|
|
|
| def handshake(self, tlsConnection):
|
| """Creates the SSL connection."""
|
| @@ -224,122 +175,15 @@ class HTTPSServer(tlslite.api.TLSSocketServerMixIn,
|
| return False
|
|
|
|
|
| -class SyncHTTPServer(ClientRestrictingServerMixIn,
|
| - BrokenPipeHandlerMixIn,
|
| - StoppableHTTPServer):
|
| - """An HTTP server that handles sync commands."""
|
| -
|
| - def __init__(self, server_address, xmpp_port, request_handler_class):
|
| - # We import here to avoid pulling in chromiumsync's dependencies
|
| - # unless strictly necessary.
|
| - import chromiumsync
|
| - import xmppserver
|
| - StoppableHTTPServer.__init__(self, server_address, request_handler_class)
|
| - self._sync_handler = chromiumsync.TestServer()
|
| - self._xmpp_socket_map = {}
|
| - self._xmpp_server = xmppserver.XmppServer(
|
| - self._xmpp_socket_map, ('localhost', xmpp_port))
|
| - self.xmpp_port = self._xmpp_server.getsockname()[1]
|
| - self.authenticated = True
|
| -
|
| - def GetXmppServer(self):
|
| - return self._xmpp_server
|
| -
|
| - def HandleCommand(self, query, raw_request):
|
| - return self._sync_handler.HandleCommand(query, raw_request)
|
| -
|
| - def HandleRequestNoBlock(self):
|
| - """Handles a single request.
|
| -
|
| - Copied from SocketServer._handle_request_noblock().
|
| - """
|
| -
|
| - try:
|
| - request, client_address = self.get_request()
|
| - except socket.error:
|
| - return
|
| - if self.verify_request(request, client_address):
|
| - try:
|
| - self.process_request(request, client_address)
|
| - except Exception:
|
| - self.handle_error(request, client_address)
|
| - self.close_request(request)
|
| -
|
| - def SetAuthenticated(self, auth_valid):
|
| - self.authenticated = auth_valid
|
| -
|
| - def GetAuthenticated(self):
|
| - return self.authenticated
|
| -
|
| - def serve_forever(self):
|
| - """This is a merge of asyncore.loop() and SocketServer.serve_forever().
|
| - """
|
| -
|
| - def HandleXmppSocket(fd, socket_map, handler):
|
| - """Runs the handler for the xmpp connection for fd.
|
| -
|
| - Adapted from asyncore.read() et al.
|
| - """
|
| -
|
| - xmpp_connection = socket_map.get(fd)
|
| - # This could happen if a previous handler call caused fd to get
|
| - # removed from socket_map.
|
| - if xmpp_connection is None:
|
| - return
|
| - try:
|
| - handler(xmpp_connection)
|
| - except (asyncore.ExitNow, KeyboardInterrupt, SystemExit):
|
| - raise
|
| - except:
|
| - xmpp_connection.handle_error()
|
| -
|
| - while True:
|
| - read_fds = [ self.fileno() ]
|
| - write_fds = []
|
| - exceptional_fds = []
|
| -
|
| - for fd, xmpp_connection in self._xmpp_socket_map.items():
|
| - is_r = xmpp_connection.readable()
|
| - is_w = xmpp_connection.writable()
|
| - if is_r:
|
| - read_fds.append(fd)
|
| - if is_w:
|
| - write_fds.append(fd)
|
| - if is_r or is_w:
|
| - exceptional_fds.append(fd)
|
| -
|
| - try:
|
| - read_fds, write_fds, exceptional_fds = (
|
| - select.select(read_fds, write_fds, exceptional_fds))
|
| - except select.error, err:
|
| - if err.args[0] != errno.EINTR:
|
| - raise
|
| - else:
|
| - continue
|
| -
|
| - for fd in read_fds:
|
| - if fd == self.fileno():
|
| - self.HandleRequestNoBlock()
|
| - continue
|
| - HandleXmppSocket(fd, self._xmpp_socket_map,
|
| - asyncore.dispatcher.handle_read_event)
|
| -
|
| - for fd in write_fds:
|
| - HandleXmppSocket(fd, self._xmpp_socket_map,
|
| - asyncore.dispatcher.handle_write_event)
|
| -
|
| - for fd in exceptional_fds:
|
| - HandleXmppSocket(fd, self._xmpp_socket_map,
|
| - asyncore.dispatcher.handle_expt_event)
|
| -
|
| -
|
| -class FTPServer(ClientRestrictingServerMixIn, pyftpdlib.ftpserver.FTPServer):
|
| +class FTPServer(testserver_base.ClientRestrictingServerMixIn,
|
| + pyftpdlib.ftpserver.FTPServer):
|
| """This is a specialization of FTPServer that adds client verification."""
|
|
|
| pass
|
|
|
|
|
| -class TCPEchoServer(ClientRestrictingServerMixIn, SocketServer.TCPServer):
|
| +class TCPEchoServer(testserver_base.ClientRestrictingServerMixIn,
|
| + SocketServer.TCPServer):
|
| """A TCP echo server that echoes back what it has received."""
|
|
|
| def server_bind(self):
|
| @@ -358,7 +202,8 @@ class TCPEchoServer(ClientRestrictingServerMixIn, SocketServer.TCPServer):
|
| self.socket.close()
|
|
|
|
|
| -class UDPEchoServer(ClientRestrictingServerMixIn, SocketServer.UDPServer):
|
| +class UDPEchoServer(testserver_base.ClientRestrictingServerMixIn,
|
| + SocketServer.UDPServer):
|
| """A UDP echo server that echoes back what it has received."""
|
|
|
| def server_bind(self):
|
| @@ -377,60 +222,7 @@ class UDPEchoServer(ClientRestrictingServerMixIn, SocketServer.UDPServer):
|
| self.socket.close()
|
|
|
|
|
| -class BasePageHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
| -
|
| - def __init__(self, request, client_address, socket_server,
|
| - connect_handlers, get_handlers, head_handlers, post_handlers,
|
| - put_handlers):
|
| - self._connect_handlers = connect_handlers
|
| - self._get_handlers = get_handlers
|
| - self._head_handlers = head_handlers
|
| - self._post_handlers = post_handlers
|
| - self._put_handlers = put_handlers
|
| - BaseHTTPServer.BaseHTTPRequestHandler.__init__(
|
| - self, request, client_address, socket_server)
|
| -
|
| - def log_request(self, *args, **kwargs):
|
| - # Disable request logging to declutter test log output.
|
| - pass
|
| -
|
| - def _ShouldHandleRequest(self, handler_name):
|
| - """Determines if the path can be handled by the handler.
|
| -
|
| - We consider a handler valid if the path begins with the
|
| - handler name. It can optionally be followed by "?*", "/*".
|
| - """
|
| -
|
| - pattern = re.compile('%s($|\?|/).*' % handler_name)
|
| - return pattern.match(self.path)
|
| -
|
| - def do_CONNECT(self):
|
| - for handler in self._connect_handlers:
|
| - if handler():
|
| - return
|
| -
|
| - def do_GET(self):
|
| - for handler in self._get_handlers:
|
| - if handler():
|
| - return
|
| -
|
| - def do_HEAD(self):
|
| - for handler in self._head_handlers:
|
| - if handler():
|
| - return
|
| -
|
| - def do_POST(self):
|
| - for handler in self._post_handlers:
|
| - if handler():
|
| - return
|
| -
|
| - def do_PUT(self):
|
| - for handler in self._put_handlers:
|
| - if handler():
|
| - return
|
| -
|
| -
|
| -class TestPageHandler(BasePageHandler):
|
| +class TestPageHandler(testserver_base.BasePageHandler):
|
|
|
| def __init__(self, request, client_address, socket_server):
|
| connect_handlers = [
|
| @@ -501,9 +293,10 @@ class TestPageHandler(BasePageHandler):
|
| }
|
| self._default_mime_type = 'text/html'
|
|
|
| - BasePageHandler.__init__(self, request, client_address, socket_server,
|
| - connect_handlers, get_handlers, head_handlers,
|
| - post_handlers, put_handlers)
|
| + testserver_base.BasePageHandler.__init__(self, request, client_address,
|
| + socket_server, connect_handlers,
|
| + get_handlers, head_handlers,
|
| + post_handlers, put_handlers)
|
|
|
| def GetMIMETypeFromName(self, file_name):
|
| """Returns the mime type for the specified file_name. So far it only looks
|
| @@ -1830,294 +1623,13 @@ class TestPageHandler(BasePageHandler):
|
| self.wfile.write('\r\n')
|
|
|
|
|
| -class SyncPageHandler(BasePageHandler):
|
| - """Handler for the main HTTP sync server."""
|
| -
|
| - def __init__(self, request, client_address, sync_http_server):
|
| - get_handlers = [self.ChromiumSyncTimeHandler,
|
| - self.ChromiumSyncMigrationOpHandler,
|
| - self.ChromiumSyncCredHandler,
|
| - self.ChromiumSyncXmppCredHandler,
|
| - self.ChromiumSyncDisableNotificationsOpHandler,
|
| - self.ChromiumSyncEnableNotificationsOpHandler,
|
| - self.ChromiumSyncSendNotificationOpHandler,
|
| - self.ChromiumSyncBirthdayErrorOpHandler,
|
| - self.ChromiumSyncTransientErrorOpHandler,
|
| - self.ChromiumSyncErrorOpHandler,
|
| - self.ChromiumSyncSyncTabFaviconsOpHandler,
|
| - self.ChromiumSyncCreateSyncedBookmarksOpHandler,
|
| - self.ChromiumSyncEnableKeystoreEncryptionOpHandler,
|
| - self.ChromiumSyncRotateKeystoreKeysOpHandler]
|
| -
|
| - post_handlers = [self.ChromiumSyncCommandHandler,
|
| - self.ChromiumSyncTimeHandler]
|
| - BasePageHandler.__init__(self, request, client_address,
|
| - sync_http_server, [], get_handlers, [],
|
| - post_handlers, [])
|
| -
|
| -
|
| - def ChromiumSyncTimeHandler(self):
|
| - """Handle Chromium sync .../time requests.
|
| -
|
| - The syncer sometimes checks server reachability by examining /time.
|
| - """
|
| -
|
| - test_name = "/chromiumsync/time"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| -
|
| - # Chrome hates it if we send a response before reading the request.
|
| - if self.headers.getheader('content-length'):
|
| - length = int(self.headers.getheader('content-length'))
|
| - _raw_request = self.rfile.read(length)
|
| -
|
| - self.send_response(200)
|
| - self.send_header('Content-Type', 'text/plain')
|
| - self.end_headers()
|
| - self.wfile.write('0123456789')
|
| - return True
|
| -
|
| - def ChromiumSyncCommandHandler(self):
|
| - """Handle a chromiumsync command arriving via http.
|
| -
|
| - This covers all sync protocol commands: authentication, getupdates, and
|
| - commit.
|
| - """
|
| -
|
| - test_name = "/chromiumsync/command"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| -
|
| - length = int(self.headers.getheader('content-length'))
|
| - raw_request = self.rfile.read(length)
|
| - http_response = 200
|
| - raw_reply = None
|
| - if not self.server.GetAuthenticated():
|
| - http_response = 401
|
| - challenge = 'GoogleLogin realm="http://%s", service="chromiumsync"' % (
|
| - self.server.server_address[0])
|
| - else:
|
| - http_response, raw_reply = self.server.HandleCommand(
|
| - self.path, raw_request)
|
| -
|
| - ### Now send the response to the client. ###
|
| - self.send_response(http_response)
|
| - if http_response == 401:
|
| - self.send_header('www-Authenticate', challenge)
|
| - self.end_headers()
|
| - self.wfile.write(raw_reply)
|
| - return True
|
| -
|
| - def ChromiumSyncMigrationOpHandler(self):
|
| - test_name = "/chromiumsync/migrate"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| -
|
| - http_response, raw_reply = self.server._sync_handler.HandleMigrate(
|
| - self.path)
|
| - self.send_response(http_response)
|
| - 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
|
| -
|
| - def ChromiumSyncCredHandler(self):
|
| - test_name = "/chromiumsync/cred"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| - try:
|
| - query = urlparse.urlparse(self.path)[4]
|
| - cred_valid = urlparse.parse_qs(query)['valid']
|
| - if cred_valid[0] == 'True':
|
| - self.server.SetAuthenticated(True)
|
| - else:
|
| - self.server.SetAuthenticated(False)
|
| - except Exception:
|
| - self.server.SetAuthenticated(False)
|
| -
|
| - http_response = 200
|
| - raw_reply = 'Authenticated: %s ' % self.server.GetAuthenticated()
|
| - self.send_response(http_response)
|
| - 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
|
| -
|
| - def ChromiumSyncXmppCredHandler(self):
|
| - test_name = "/chromiumsync/xmppcred"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| - xmpp_server = self.server.GetXmppServer()
|
| - try:
|
| - query = urlparse.urlparse(self.path)[4]
|
| - cred_valid = urlparse.parse_qs(query)['valid']
|
| - if cred_valid[0] == 'True':
|
| - xmpp_server.SetAuthenticated(True)
|
| - else:
|
| - xmpp_server.SetAuthenticated(False)
|
| - except:
|
| - xmpp_server.SetAuthenticated(False)
|
| -
|
| - http_response = 200
|
| - raw_reply = 'XMPP Authenticated: %s ' % xmpp_server.GetAuthenticated()
|
| - self.send_response(http_response)
|
| - 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
|
| -
|
| - def ChromiumSyncDisableNotificationsOpHandler(self):
|
| - test_name = "/chromiumsync/disablenotifications"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| - self.server.GetXmppServer().DisableNotifications()
|
| - result = 200
|
| - raw_reply = ('<html><title>Notifications disabled</title>'
|
| - '<H1>Notifications disabled</H1></html>')
|
| - 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
|
| -
|
| - def ChromiumSyncEnableNotificationsOpHandler(self):
|
| - test_name = "/chromiumsync/enablenotifications"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| - self.server.GetXmppServer().EnableNotifications()
|
| - result = 200
|
| - raw_reply = ('<html><title>Notifications enabled</title>'
|
| - '<H1>Notifications enabled</H1></html>')
|
| - 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
|
| -
|
| - def ChromiumSyncSendNotificationOpHandler(self):
|
| - test_name = "/chromiumsync/sendnotification"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| - query = urlparse.urlparse(self.path)[4]
|
| - query_params = urlparse.parse_qs(query)
|
| - channel = ''
|
| - data = ''
|
| - if 'channel' in query_params:
|
| - channel = query_params['channel'][0]
|
| - if 'data' in query_params:
|
| - data = query_params['data'][0]
|
| - self.server.GetXmppServer().SendNotification(channel, data)
|
| - result = 200
|
| - raw_reply = ('<html><title>Notification sent</title>'
|
| - '<H1>Notification sent with channel "%s" '
|
| - 'and data "%s"</H1></html>'
|
| - % (channel, data))
|
| - 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
|
| -
|
| - def ChromiumSyncBirthdayErrorOpHandler(self):
|
| - test_name = "/chromiumsync/birthdayerror"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| - result, raw_reply = self.server._sync_handler.HandleCreateBirthdayError()
|
| - 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
|
| -
|
| - def ChromiumSyncTransientErrorOpHandler(self):
|
| - test_name = "/chromiumsync/transienterror"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| - result, raw_reply = self.server._sync_handler.HandleSetTransientError()
|
| - 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
|
| -
|
| - def ChromiumSyncErrorOpHandler(self):
|
| - test_name = "/chromiumsync/error"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| - result, raw_reply = self.server._sync_handler.HandleSetInducedError(
|
| - self.path)
|
| - 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
|
| -
|
| - def ChromiumSyncSyncTabFaviconsOpHandler(self):
|
| - test_name = "/chromiumsync/synctabfavicons"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| - result, raw_reply = self.server._sync_handler.HandleSetSyncTabFavicons()
|
| - 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
|
| -
|
| - def ChromiumSyncCreateSyncedBookmarksOpHandler(self):
|
| - test_name = "/chromiumsync/createsyncedbookmarks"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| - result, raw_reply = self.server._sync_handler.HandleCreateSyncedBookmarks()
|
| - 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
|
| -
|
| - def ChromiumSyncEnableKeystoreEncryptionOpHandler(self):
|
| - test_name = "/chromiumsync/enablekeystoreencryption"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| - result, raw_reply = (
|
| - self.server._sync_handler.HandleEnableKeystoreEncryption())
|
| - 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
|
| -
|
| - def ChromiumSyncRotateKeystoreKeysOpHandler(self):
|
| - test_name = "/chromiumsync/rotatekeystorekeys"
|
| - if not self._ShouldHandleRequest(test_name):
|
| - return False
|
| - result, raw_reply = (
|
| - self.server._sync_handler.HandleRotateKeystoreKeys())
|
| - 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 OCSPHandler(BasePageHandler):
|
| +class OCSPHandler(testserver_base.BasePageHandler):
|
| def __init__(self, request, client_address, socket_server):
|
| handlers = [self.OCSPResponse]
|
| self.ocsp_response = socket_server.ocsp_response
|
| - BasePageHandler.__init__(self, request, client_address, socket_server,
|
| - [], handlers, [], handlers, [])
|
| + testserver_base.BasePageHandler.__init__(self, request, client_address,
|
| + socket_server, [], handlers, [],
|
| + handlers, [])
|
|
|
| def OCSPResponse(self):
|
| self.send_response(200)
|
| @@ -2396,13 +1908,6 @@ class ServerRunner(testserver_base.TestServerRunner):
|
| server = WebSocketServer(websocket_options)
|
| print 'WebSocket server started on %s:%d...' % (host, server.server_port)
|
| server_data['port'] = server.server_port
|
| - elif self.options.server_type == SERVER_SYNC:
|
| - 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
|
| - server_data['port'] = server.server_port
|
| - server_data['xmpp_port'] = server.xmpp_port
|
| elif self.options.server_type == SERVER_TCP_ECHO:
|
| # Used for generating the key (randomly) that encodes the "echo request"
|
| # message.
|
| @@ -2466,10 +1971,6 @@ class ServerRunner(testserver_base.TestServerRunner):
|
| const=SERVER_FTP, default=SERVER_HTTP,
|
| dest='server_type',
|
| help='start up an FTP server.')
|
| - self.option_parser.add_option('--sync', action='store_const',
|
| - const=SERVER_SYNC, default=SERVER_HTTP,
|
| - dest='server_type',
|
| - help='start up a sync server.')
|
| self.option_parser.add_option('--tcp-echo', action='store_const',
|
| const=SERVER_TCP_ECHO, default=SERVER_HTTP,
|
| dest='server_type',
|
| @@ -2487,13 +1988,6 @@ class ServerRunner(testserver_base.TestServerRunner):
|
| const=SERVER_WEBSOCKET, default=SERVER_HTTP,
|
| dest='server_type',
|
| help='start up a WebSocket server.')
|
| - self.option_parser.add_option('--xmpp-port', default='0', type='int',
|
| - help='Port used by the XMPP server. If '
|
| - 'unspecified, the XMPP server will listen on '
|
| - 'an ephemeral port.')
|
| - self.option_parser.add_option('--data-dir', dest='data_dir',
|
| - help='Directory from which to read the '
|
| - 'files.')
|
| self.option_parser.add_option('--https', action='store_true',
|
| dest='https', help='Specify that https '
|
| 'should be used.')
|
|
|