diff options
author | vsevik@chromium.org <vsevik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-20 09:36:14 +0000 |
---|---|---|
committer | vsevik@chromium.org <vsevik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-20 09:36:14 +0000 |
commit | 74568b057754be7659b4c4c61f70fdc5831fe17d (patch) | |
tree | be2ac8bbb1b4e25436dc32eaf4fa1ad2c9639eae /net/tools | |
parent | ec6f5ea0230512ef2bb09140f24bb6cf63c1348c (diff) | |
download | chromium_src-74568b057754be7659b4c4c61f70fdc5831fe17d.zip chromium_src-74568b057754be7659b4c4c61f70fdc5831fe17d.tar.gz chromium_src-74568b057754be7659b4c4c61f70fdc5831fe17d.tar.bz2 |
Enable DevTools network size/timing/headers tests.
Review URL: http://codereview.chromium.org/6904086
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@86066 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/tools')
-rwxr-xr-x | net/tools/testserver/testserver.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/net/tools/testserver/testserver.py b/net/tools/testserver/testserver.py index d3d7203..2411f56 100755 --- a/net/tools/testserver/testserver.py +++ b/net/tools/testserver/testserver.py @@ -285,6 +285,7 @@ class TestPageHandler(BasePageHandler): self.AuthBasicHandler, self.AuthDigestHandler, self.SlowServerHandler, + self.ChunkedServerHandler, self.ContentTypeHandler, self.NoContentHandler, self.ServerRedirectHandler, @@ -1056,6 +1057,47 @@ class TestPageHandler(BasePageHandler): self.wfile.write("waited %d seconds" % wait_sec) return True + def ChunkedServerHandler(self): + """Send chunked response. Allows to specify chunks parameters: + - waitBeforeHeaders - ms to wait before sending headers + - waitBetweenChunks - ms to wait between chunks + - chunkSize - size of each chunk in bytes + - chunksNumber - number of chunks + Example: /chunked?waitBeforeHeaders=1000&chunkSize=5&chunksNumber=5 + waits one second, then sends headers and five chunks five bytes each.""" + if not self._ShouldHandleRequest("/chunked"): + return False + query_char = self.path.find('?') + chunkedSettings = {'waitBeforeHeaders' : 0, + 'waitBetweenChunks' : 0, + 'chunkSize' : 5, + 'chunksNumber' : 5} + if query_char >= 0: + params = self.path[query_char + 1:].split('&') + for param in params: + keyValue = param.split('=') + if len(keyValue) == 2: + try: + chunkedSettings[keyValue[0]] = int(keyValue[1]) + except ValueError: + pass + time.sleep(0.001 * chunkedSettings['waitBeforeHeaders']); + self.protocol_version = 'HTTP/1.1' # Needed for chunked encoding + self.send_response(200) + self.send_header('Content-type', 'text/plain') + self.send_header('Connection', 'close') + self.send_header('Transfer-Encoding', 'chunked') + self.end_headers() + # Chunked encoding: sending all chunks, then final zero-length chunk and + # then final CRLF. + for i in range(0, chunkedSettings['chunksNumber']): + if i > 0: + time.sleep(0.001 * chunkedSettings['waitBetweenChunks']) + self.sendChunkHelp('*' * chunkedSettings['chunkSize']) + self.wfile.flush(); # Keep in mind that we start flushing only after 1kb. + self.sendChunkHelp('') + return True + def ContentTypeHandler(self): """Returns a string of html with the given content type. E.g., /contenttype?text/css returns an html file with the Content-Type @@ -1242,6 +1284,13 @@ class TestPageHandler(BasePageHandler): self.wfile.write('Use <pre>%s?http://dest...</pre>' % redirect_name) self.wfile.write('</body></html>') + # called by chunked handling function + def sendChunkHelp(self, chunk): + # Each chunk consists of: chunk size (hex), CRLF, chunk body, CRLF + self.wfile.write('%X\r\n' % len(chunk)) + self.wfile.write(chunk) + self.wfile.write('\r\n') + class SyncPageHandler(BasePageHandler): """Handler for the main HTTP sync server.""" |