[z3-checkins] r35771 - z3/deliverance/trunk/deliverance
ianb at codespeak.net
ianb at codespeak.net
Thu Dec 14 23:55:48 CET 2006
Author: ianb
Date: Thu Dec 14 23:55:38 2006
New Revision: 35771
Added:
z3/deliverance/trunk/deliverance/faketestingapps.py (contents, props changed)
Log:
Added some loadtest apps
Added: z3/deliverance/trunk/deliverance/faketestingapps.py
==============================================================================
--- (empty file)
+++ z3/deliverance/trunk/deliverance/faketestingapps.py Thu Dec 14 23:55:38 2006
@@ -0,0 +1,85 @@
+"""
+These applications are intended for load testing odd situations with
+Deliverance. Two models are implemented:
+
+* Slow servers
+* Random content
+
+Both support probabilities (e.g., return random content on some
+probability, or slow down a certain percentage of requests).
+"""
+import random
+import time
+
+__all__ = ['Switcher']
+
+class Switcher(object):
+
+ """
+ Switches request paths.
+
+ Usage::
+
+ [filter-app:switchedapp]
+ paste.filter_app_factory = deliverance.faketestingapps.Switcher
+ /bad_content.html = 10
+ next = static
+
+ [app:static]
+ use = egg:Paste#static
+ document_root = /some/dir
+
+ Then 90% of the time / will direct to /some/dir/index.html (the
+ default) and 10% of the time to /some/dir/bad_content.html.
+ """
+
+ def __init__(self, app, global_conf, **paths):
+ self.app = app
+ self.redirects = []
+ total_prob = 0
+ for path, prob in paths.items():
+ if not path.startswith('/'):
+ path = '/'+path
+ prob = float(prob) / 100.0
+ total_prob += prob
+ self.redirects.append((path, prob))
+
+ def __call__(self, environ, start_response):
+ prob = random.random()
+ for path, path_prob in self.redirects:
+ if prob < path_prob:
+ environ['PATH_INFO'] = path
+ break
+ return self.app(environ, start_response)
+
+
+class Pauser(object):
+
+ """
+ Pauses some requests.
+
+ Usage::
+
+ [filter-app:pauser]
+ paste.filter_app_factory = deliverance.faketestingapps.Pauser
+ # 10% of the time:
+ probability = 10
+ # pause 5 seconds:
+ pause = 5
+ next = static
+
+ [app:static]
+ use = egg:Paste#static
+ document_root = /docroot
+ """
+
+ def __init__(self, app, global_conf, probability, pause):
+ self.app = app
+ self.probability = float(probability)
+ self.pause = float(pause)
+
+ def __call__(self, environ, start_response):
+ if random.random()*100 < self.probability:
+ time.sleep(self.pause)
+ return self.app(environ, start_response)
+
More information about the z3-checkins
mailing list