Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(29)

Side by Side Diff: net/tools/testserver/testserver.py

Issue 12235003: Split out policy code from net/tools/testserver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 80 chars. Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/tools/testserver/device_management.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 simple HTTP/FTP/TCP/UDP/BASIC_AUTH_PROXY/WEBSOCKET server used for 6 """This is a simple HTTP/FTP/TCP/UDP/BASIC_AUTH_PROXY/WEBSOCKET server used for
7 testing Chrome. 7 testing Chrome.
8 8
9 It supports several test URLs, as specified by the handlers in TestPageHandler. 9 It supports several test URLs, as specified by the handlers in TestPageHandler.
10 By default, it listens on an ephemeral port and sends the port number back to 10 By default, it listens on an ephemeral port and sends the port number back to
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 self.MultipartHandler, 265 self.MultipartHandler,
266 self.MultipartSlowHandler, 266 self.MultipartSlowHandler,
267 self.GetSSLSessionCacheHandler, 267 self.GetSSLSessionCacheHandler,
268 self.SSLManySmallRecords, 268 self.SSLManySmallRecords,
269 self.CloseSocketHandler, 269 self.CloseSocketHandler,
270 self.RangeResetHandler, 270 self.RangeResetHandler,
271 self.DefaultResponseHandler] 271 self.DefaultResponseHandler]
272 post_handlers = [ 272 post_handlers = [
273 self.EchoTitleHandler, 273 self.EchoTitleHandler,
274 self.EchoHandler, 274 self.EchoHandler,
275 self.DeviceManagementHandler,
276 self.PostOnlyFileHandler] + get_handlers 275 self.PostOnlyFileHandler] + get_handlers
277 put_handlers = [ 276 put_handlers = [
278 self.EchoTitleHandler, 277 self.EchoTitleHandler,
279 self.EchoHandler] + get_handlers 278 self.EchoHandler] + get_handlers
280 head_handlers = [ 279 head_handlers = [
281 self.FileHandler, 280 self.FileHandler,
282 self.DefaultResponseHandler] 281 self.DefaultResponseHandler]
283 282
284 self._mime_types = { 283 self._mime_types = {
285 'crx' : 'application/x-chrome-extension', 284 'crx' : 'application/x-chrome-extension',
(...skipping 1308 matching lines...) Expand 10 before | Expand all | Expand 10 after
1594 with 400 to CONNECT requests.""" 1593 with 400 to CONNECT requests."""
1595 1594
1596 contents = "Your client has issued a malformed or illegal request." 1595 contents = "Your client has issued a malformed or illegal request."
1597 self.send_response(400) # bad request 1596 self.send_response(400) # bad request
1598 self.send_header('Content-Type', 'text/html') 1597 self.send_header('Content-Type', 'text/html')
1599 self.send_header('Content-Length', len(contents)) 1598 self.send_header('Content-Length', len(contents))
1600 self.end_headers() 1599 self.end_headers()
1601 self.wfile.write(contents) 1600 self.wfile.write(contents)
1602 return True 1601 return True
1603 1602
1604 def DeviceManagementHandler(self):
1605 """Delegates to the device management service used for cloud policy."""
1606
1607 if not self._ShouldHandleRequest("/device_management"):
1608 return False
1609
1610 raw_request = self.ReadRequestBody()
1611
1612 if not self.server._device_management_handler:
1613 import device_management
1614 policy_path = os.path.join(self.server.data_dir, 'device_management')
1615 self.server._device_management_handler = (
1616 device_management.TestServer(policy_path, self.server.policy_keys))
1617
1618 http_response, raw_reply = (
1619 self.server._device_management_handler.HandleRequest(self.path,
1620 self.headers,
1621 raw_request))
1622 self.send_response(http_response)
1623 if (http_response == 200):
1624 self.send_header('Content-Type', 'application/x-protobuffer')
1625 self.end_headers()
1626 self.wfile.write(raw_reply)
1627 return True
1628
1629 # called by the redirect handling function when there is no parameter 1603 # called by the redirect handling function when there is no parameter
1630 def sendRedirectHelp(self, redirect_name): 1604 def sendRedirectHelp(self, redirect_name):
1631 self.send_response(200) 1605 self.send_response(200)
1632 self.send_header('Content-Type', 'text/html') 1606 self.send_header('Content-Type', 'text/html')
1633 self.end_headers() 1607 self.end_headers()
1634 self.wfile.write('<html><body><h1>Error: no redirect destination</h1>') 1608 self.wfile.write('<html><body><h1>Error: no redirect destination</h1>')
1635 self.wfile.write('Use <pre>%s?http://dest...</pre>' % redirect_name) 1609 self.wfile.write('Use <pre>%s?http://dest...</pre>' % redirect_name)
1636 self.wfile.write('</body></html>') 1610 self.wfile.write('</body></html>')
1637 1611
1638 # called by chunked handling function 1612 # called by chunked handling function
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
1894 self.options.record_resume, 1868 self.options.record_resume,
1895 self.options.tls_intolerant) 1869 self.options.tls_intolerant)
1896 print 'HTTPS server started on %s:%d...' % (host, server.server_port) 1870 print 'HTTPS server started on %s:%d...' % (host, server.server_port)
1897 else: 1871 else:
1898 server = HTTPServer((host, port), TestPageHandler) 1872 server = HTTPServer((host, port), TestPageHandler)
1899 print 'HTTP server started on %s:%d...' % (host, server.server_port) 1873 print 'HTTP server started on %s:%d...' % (host, server.server_port)
1900 1874
1901 server.data_dir = self.__make_data_dir() 1875 server.data_dir = self.__make_data_dir()
1902 server.file_root_url = self.options.file_root_url 1876 server.file_root_url = self.options.file_root_url
1903 server_data['port'] = server.server_port 1877 server_data['port'] = server.server_port
1904 server._device_management_handler = None
1905 server.policy_keys = self.options.policy_keys
1906 elif self.options.server_type == SERVER_WEBSOCKET: 1878 elif self.options.server_type == SERVER_WEBSOCKET:
1907 # Launch pywebsocket via WebSocketServer. 1879 # Launch pywebsocket via WebSocketServer.
1908 logger = logging.getLogger() 1880 logger = logging.getLogger()
1909 logger.addHandler(logging.StreamHandler()) 1881 logger.addHandler(logging.StreamHandler())
1910 # TODO(toyoshim): Remove following os.chdir. Currently this operation 1882 # TODO(toyoshim): Remove following os.chdir. Currently this operation
1911 # is required to work correctly. It should be fixed from pywebsocket side. 1883 # is required to work correctly. It should be fixed from pywebsocket side.
1912 os.chdir(self.__make_data_dir()) 1884 os.chdir(self.__make_data_dir())
1913 websocket_options = WebSocketOptions(host, port, '.') 1885 websocket_options = WebSocketOptions(host, port, '.')
1914 if self.options.cert_and_key_file: 1886 if self.options.cert_and_key_file:
1915 websocket_options.use_tls = True 1887 websocket_options.use_tls = True
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
2048 self.option_parser.add_option('--ssl-bulk-cipher', action='append', 2020 self.option_parser.add_option('--ssl-bulk-cipher', action='append',
2049 help='Specify the bulk encryption ' 2021 help='Specify the bulk encryption '
2050 'algorithm(s) that will be accepted by the ' 2022 'algorithm(s) that will be accepted by the '
2051 'SSL server. Valid values are "aes256", ' 2023 'SSL server. Valid values are "aes256", '
2052 '"aes128", "3des", "rc4". If omitted, all ' 2024 '"aes128", "3des", "rc4". If omitted, all '
2053 'algorithms will be used. This option may ' 2025 'algorithms will be used. This option may '
2054 'appear multiple times, indicating ' 2026 'appear multiple times, indicating '
2055 'multiple algorithms should be enabled.'); 2027 'multiple algorithms should be enabled.');
2056 self.option_parser.add_option('--file-root-url', default='/files/', 2028 self.option_parser.add_option('--file-root-url', default='/files/',
2057 help='Specify a root URL for files served.') 2029 help='Specify a root URL for files served.')
2058 self.option_parser.add_option('--policy-key', action='append',
2059 dest='policy_keys',
2060 help='Specify a path to a PEM-encoded '
2061 'private key to use for policy signing. May '
2062 'be specified multiple times in order to '
2063 'load multipe keys into the server. If the '
2064 'server has multiple keys, it will rotate '
2065 'through them in at each request a '
2066 'round-robin fashion. The server will '
2067 'generate a random key if none is specified '
2068 'on the command line.')
2069 2030
2070 2031
2071 if __name__ == '__main__': 2032 if __name__ == '__main__':
2072 sys.exit(ServerRunner().main()) 2033 sys.exit(ServerRunner().main())
OLDNEW
« no previous file with comments | « net/tools/testserver/device_management.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698