[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