Author: chrisz
Date: Sat Jan 24 10:49:47 2009
New Revision: 7761
Added:
Webware/trunk/WebKit/Tests/stress/Colors.rr (contents, props changed)
Modified:
Webware/trunk/Docs/ReleaseProcedures.phtml
Webware/trunk/WebKit/Tests/stress/ListBox.rr
Webware/trunk/WebKit/Tests/stress/stress.py
Webware/trunk/WebKit/ThreadedAppServer.py
Log:
Improved stress test script so that when simulating slow connections, the request data is sent to the application server bytewise. This will detect bugs like the one that was fixed in r7749.
Modified: Webware/trunk/Docs/ReleaseProcedures.phtml
==============================================================================
--- Webware/trunk/Docs/ReleaseProcedures.phtml (original)
+++ Webware/trunk/Docs/ReleaseProcedures.phtml Sat Jan 24 10:49:47 2009
@@ -51,9 +51,10 @@
[ ] Check the various tests in the Testing context.
-[ ] Run some stress tests using the tool in WebKit/Tests/stress.
+[ ] Run some stress tests using the tool in WebKit/Tests/stress
+ (check with different parameters, particularly setting slowconn=1).
-[ ] Run the <a href="http://twill.idyll.org/">twill</a> test scripts in WebKit/Tests/twill.
+[ ] Run the <a href="http://twill.idyll.org">twill</a> test scripts in WebKit/Tests/twill.
[ ] Make sure that wkcgi, mod_webkit1, mod_webkit2, and all other important
adapters can be compiled, linked and used without problems. If there have
Added: Webware/trunk/WebKit/Tests/stress/Colors.rr
==============================================================================
--- (empty file)
+++ Webware/trunk/WebKit/Tests/stress/Colors.rr Sat Jan 24 10:49:47 2009
@@ -0,0 +1 @@
+{'format': 'CGI', 'time': 0, 'environ': {'DOCUMENT_ROOT': '.', 'SERVER_ADDR': '127.0.0.1', 'HTTP_ACCEPT_ENCODING': 'gzip', 'SERVER_PORT': '80', 'PATH_TRANSLATED': 'Colors', 'REMOTE_ADDR': '127.0.0.1', 'SERVER_SOFTWARE': 'Webware', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT_LANGUAGE': 'en', 'SERVER_NAME': 'localhost', 'HTTP_CONNECTION': 'Keep-Alive', 'HTTP_USER_AGENT': 'Mozilla', 'HTTP_ACCEPT_CHARSET': 'iso-8859-1', 'HTTP_ACCEPT': '*/*', 'REQUEST_URI': '../Adapters/WebKit.cgi/Colors', 'PATH': '', 'QUERY_STRING': '', 'SERVER_PROTOCOL': 'HTTP/1.0', 'PATH_INFO': '/Colors', 'HTTP_HOST': 'localhost', 'REQUEST_METHOD': 'GET', 'SCRIPT_NAME': '../Adapters/WebKit.cgi', 'SERVER_ADMIN': 'root@...', 'SCRIPT_FILENAME': '../Adapters/WebKit.cgi'}}
Modified: Webware/trunk/WebKit/Tests/stress/ListBox.rr
==============================================================================
--- Webware/trunk/WebKit/Tests/stress/ListBox.rr (original)
+++ Webware/trunk/WebKit/Tests/stress/ListBox.rr Sat Jan 24 10:49:47 2009
@@ -1 +1 @@
-{'format': 'CGI', 'time': 0, 'environ': {'DOCUMENT_ROOT': '.', 'SERVER_ADDR': '127.0.0.1', 'HTTP_ACCEPT_ENCODING': 'gzip', 'SERVER_PORT': '80', 'PATH_TRANSLATED': 'ListBox', 'REMOTE_ADDR': '127.0.0.1', 'SERVER_SOFTWARE': 'Webware', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT_LANGUAGE': 'en', 'SERVER_NAME': 'localhost', 'HTTP_CONNECTION': 'Keep-Alive', 'HTTP_USER_AGENT': 'Mozilla', 'HTTP_ACCEPT_CHARSET': 'iso-8859-1', 'HTTP_ACCEPT': '*/*', 'REQUEST_URI': '../Adapters/ListBox', 'PATH': '', 'QUERY_STRING': '', 'SERVER_PROTOCOL': 'HTTP/1.0', 'PATH_INFO': '/ListBox', 'HTTP_HOST': 'localhost', 'REQUEST_METHOD': 'GET', 'SCRIPT_NAME': '../Adapters/WebKit.cgi', 'SERVER_ADMIN': 'root@...', 'SCRIPT_FILENAME': '../Adapters/WebKit.cgi'}}
+{'format': 'CGI', 'time': 0, 'environ': {'DOCUMENT_ROOT': '.', 'SERVER_ADDR': '127.0.0.1', 'HTTP_ACCEPT_ENCODING': 'gzip', 'SERVER_PORT': '80', 'PATH_TRANSLATED': 'ListBox', 'REMOTE_ADDR': '127.0.0.1', 'SERVER_SOFTWARE': 'Webware', 'GATEWAY_INTERFACE': 'CGI/1.1', 'HTTP_ACCEPT_LANGUAGE': 'en', 'SERVER_NAME': 'localhost', 'HTTP_CONNECTION': 'Keep-Alive', 'HTTP_USER_AGENT': 'Mozilla', 'HTTP_ACCEPT_CHARSET': 'iso-8859-1', 'HTTP_ACCEPT': '*/*', 'REQUEST_URI': '../Adapters/WebKit.cgi/ListBox', 'PATH': '', 'QUERY_STRING': '', 'SERVER_PROTOCOL': 'HTTP/1.0', 'PATH_INFO': '/ListBox', 'HTTP_HOST': 'localhost', 'REQUEST_METHOD': 'GET', 'SCRIPT_NAME': '../Adapters/WebKit.cgi', 'SERVER_ADMIN': 'root@...', 'SCRIPT_FILENAME': '../Adapters/WebKit.cgi'}}
Modified: Webware/trunk/WebKit/Tests/stress/stress.py
==============================================================================
--- Webware/trunk/WebKit/Tests/stress/stress.py (original)
+++ Webware/trunk/WebKit/Tests/stress/stress.py Sat Jan 24 10:49:47 2009
@@ -48,12 +48,13 @@
sys.stdout = sys.stderr
name = sys.argv[0]
print '%s usage:' % name
- print ' %s numRequests [minParallelRequests [maxParallelRequests [delay]]]' % name
+ print ' %s numRequests [minParallelRequests [maxParallelRequests [delay [slowconn]]]]' % name
print 'Examples:'
print ' %s 100 # run 100 sequential requests' % name
print ' %s 100 5 # run 100 requests, 5 at a time' % name
print ' %s 100 5 10 # run 100 requests, 5-10 at a time' % name
- print ' %s 100 10 10 0.01 # run 100 requests, 10 at a time, with a delay between each set' % name
+ print ' %s 100 10 10 0.01 # run 100 requests, 10 at a time, with delay between each set' % name
+ print ' %s 5 1 1 0.1 1 # run 5 sequential requests, simulating a very bad connection' % name
print
sys.exit(1)
@@ -74,10 +75,14 @@
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
data = dumps(dicts[i])
- s.send(dumps(len(data)))
- s.send(data)
- if delay and slowconn:
- sleep(delay)
+ data = dumps(len(data)) + data
+ if slowconn:
+ for d in data:
+ s.send(d)
+ if delay:
+ sleep(delay)
+ else:
+ s.send(data)
s.shutdown(1)
data = []
while 1:
@@ -92,15 +97,16 @@
try:
if not data.startswith('Status: '):
raise ValueError
- else:
- status = data.split('\n', 1)[0]
- code = int(status.split()[1])
+ status = data.split('\n', 1)[0]
+ code = int(status.split()[1])
except Exception:
status = 'no status'
code = 0
if code not in (200,): # accepted status codes
status = dicts[i]['environ']['PATH_INFO'] + ' ' + status
raise Exception, status
+ if data.rstrip()[-7:].lower() != '</html>':
+ raise Exception, 'response is not a complete html page'
if delay:
sleep(delay)
complete += 1
@@ -146,6 +152,7 @@
print 'minParallelRequests =', minParallelRequests
print 'maxParallelRequests =', maxParallelRequests
print 'delay = %g' % delay
+ print 'slowconn =', slowconn
print 'sequential =', sequential
print 'Running...'
threads = []
Modified: Webware/trunk/WebKit/ThreadedAppServer.py
==============================================================================
--- Webware/trunk/WebKit/ThreadedAppServer.py (original)
+++ Webware/trunk/WebKit/ThreadedAppServer.py Sat Jan 24 10:49:47 2009
@@ -873,7 +873,7 @@
missing -= len(block)
try:
dictLength = loads(chunk)
- except ValueError, msg:
+ except (ValueError, EOFError), msg:
if chunk[:3] == 'GET':
# Common error: client is speaking HTTP.
while msg and len(chunk) < 8192:
|