summaryrefslogtreecommitdiffstats
path: root/net/tools
diff options
context:
space:
mode:
authorvsevik@chromium.org <vsevik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-20 09:36:14 +0000
committervsevik@chromium.org <vsevik@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-20 09:36:14 +0000
commit74568b057754be7659b4c4c61f70fdc5831fe17d (patch)
treebe2ac8bbb1b4e25436dc32eaf4fa1ad2c9639eae /net/tools
parentec6f5ea0230512ef2bb09140f24bb6cf63c1348c (diff)
downloadchromium_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-xnet/tools/testserver/testserver.py49
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."""