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

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

Issue 8203005: Implement chrome.experimental.downloads.onChanged (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: retry Created 8 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 | « chrome/test/data/extensions/api_test/downloads/test.js ('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 (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 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/SYNC/TCP/UDP/ server used for testing Chrome. 6 """This is a simple HTTP/FTP/SYNC/TCP/UDP/ server used for testing Chrome.
7 7
8 It supports several test URLs, as specified by the handlers in TestPageHandler. 8 It supports several test URLs, as specified by the handlers in TestPageHandler.
9 By default, it listens on an ephemeral port and sends the port number back to 9 By default, it listens on an ephemeral port and sends the port number back to
10 the originating process over a pipe. The originating process can specify an 10 the originating process over a pipe. The originating process can specify an
(...skipping 891 matching lines...) Expand 10 before | Expand all | Expand 10 after
902 self.wfile.write(data) 902 self.wfile.write(data)
903 903
904 return True 904 return True
905 905
906 def FileHandler(self): 906 def FileHandler(self):
907 """This handler sends the contents of the requested file. Wow, it's like 907 """This handler sends the contents of the requested file. Wow, it's like
908 a real webserver!""" 908 a real webserver!"""
909 prefix = self.server.file_root_url 909 prefix = self.server.file_root_url
910 if not self.path.startswith(prefix): 910 if not self.path.startswith(prefix):
911 return False 911 return False
912 # Consume a request body if present.
913 if self.command == 'POST' or self.command == 'PUT' :
914 self.ReadRequestBody()
915 return self._FileHandlerHelper(prefix) 912 return self._FileHandlerHelper(prefix)
916 913
917 def PostOnlyFileHandler(self): 914 def PostOnlyFileHandler(self):
918 """This handler sends the contents of the requested file on a POST.""" 915 """This handler sends the contents of the requested file on a POST."""
919 prefix = urlparse.urljoin(self.server.file_root_url, 'post/') 916 prefix = urlparse.urljoin(self.server.file_root_url, 'post/')
920 if not self.path.startswith(prefix): 917 if not self.path.startswith(prefix):
921 return False 918 return False
922 self.ReadRequestBody()
923 return self._FileHandlerHelper(prefix) 919 return self._FileHandlerHelper(prefix)
924 920
925 def _FileHandlerHelper(self, prefix): 921 def _FileHandlerHelper(self, prefix):
926 old_protocol_version = self.protocol_version 922 request_body = ''
923 if self.command == 'POST' or self.command == 'PUT':
924 # Consume a request body if present.
925 request_body = self.ReadRequestBody()
926
927 _, _, url_path, _, query, _ = urlparse.urlparse(self.path) 927 _, _, url_path, _, query, _ = urlparse.urlparse(self.path)
928 query_dict = cgi.parse_qs(query)
929
930 expected_body = query_dict.get('expected_body', [])
931 if expected_body and request_body not in expected_body:
932 self.send_response(404)
933 self.end_headers()
934 self.wfile.write('')
935 return True
936
937 expected_headers = query_dict.get('expected_headers', [])
938 for expected_header in expected_headers:
939 header_name, expected_value = expected_header.split(':')
940 if self.headers.getheader(header_name) != expected_value:
941 self.send_response(404)
942 self.end_headers()
943 self.wfile.write('')
944 return True
945
928 sub_path = url_path[len(prefix):] 946 sub_path = url_path[len(prefix):]
929 entries = sub_path.split('/') 947 entries = sub_path.split('/')
930 file_path = os.path.join(self.server.data_dir, *entries) 948 file_path = os.path.join(self.server.data_dir, *entries)
931 if os.path.isdir(file_path): 949 if os.path.isdir(file_path):
932 file_path = os.path.join(file_path, 'index.html') 950 file_path = os.path.join(file_path, 'index.html')
933 951
934 if not os.path.isfile(file_path): 952 if not os.path.isfile(file_path):
935 print "File not found " + sub_path + " full path:" + file_path 953 print "File not found " + sub_path + " full path:" + file_path
936 self.send_error(404) 954 self.send_error(404)
937 return True 955 return True
938 956
939 f = open(file_path, "rb") 957 f = open(file_path, "rb")
940 data = f.read() 958 data = f.read()
941 f.close() 959 f.close()
942 960
943 data = self._ReplaceFileData(data, query) 961 data = self._ReplaceFileData(data, query)
944 962
963 old_protocol_version = self.protocol_version
964
945 # If file.mock-http-headers exists, it contains the headers we 965 # If file.mock-http-headers exists, it contains the headers we
946 # should send. Read them in and parse them. 966 # should send. Read them in and parse them.
947 headers_path = file_path + '.mock-http-headers' 967 headers_path = file_path + '.mock-http-headers'
948 if os.path.isfile(headers_path): 968 if os.path.isfile(headers_path):
949 f = open(headers_path, "r") 969 f = open(headers_path, "r")
950 970
951 # "HTTP/1.1 200 OK" 971 # "HTTP/1.1 200 OK"
952 response = f.readline() 972 response = f.readline()
953 http_major, http_minor, status_code = re.findall( 973 http_major, http_minor, status_code = re.findall(
954 'HTTP/(\d+).(\d+) (\d+)', response)[0] 974 'HTTP/(\d+).(\d+) (\d+)', response)[0]
(...skipping 1064 matching lines...) Expand 10 before | Expand all | Expand 10 after
2019 'random key if none is specified on the command ' 2039 'random key if none is specified on the command '
2020 'line.') 2040 'line.')
2021 option_parser.add_option('', '--policy-user', default='user@example.com', 2041 option_parser.add_option('', '--policy-user', default='user@example.com',
2022 dest='policy_user', 2042 dest='policy_user',
2023 help='Specify the user name the server should ' 2043 help='Specify the user name the server should '
2024 'report back to the client as the user owning the ' 2044 'report back to the client as the user owning the '
2025 'token used for making the policy request.') 2045 'token used for making the policy request.')
2026 options, args = option_parser.parse_args() 2046 options, args = option_parser.parse_args()
2027 2047
2028 sys.exit(main(options, args)) 2048 sys.exit(main(options, args))
OLDNEW
« no previous file with comments | « chrome/test/data/extensions/api_test/downloads/test.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698