Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/websdk/werkzeug/testsuite/serving.py
diff options
context:
space:
mode:
Diffstat (limited to 'websdk/werkzeug/testsuite/serving.py')
-rw-r--r--websdk/werkzeug/testsuite/serving.py84
1 files changed, 84 insertions, 0 deletions
diff --git a/websdk/werkzeug/testsuite/serving.py b/websdk/werkzeug/testsuite/serving.py
new file mode 100644
index 0000000..e26271d
--- /dev/null
+++ b/websdk/werkzeug/testsuite/serving.py
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+"""
+ werkzeug.testsuite.serving
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ Added serving tests.
+
+ :copyright: (c) 2011 by Armin Ronacher.
+ :license: BSD, see LICENSE for more details.
+"""
+import sys
+import time
+import urllib
+import unittest
+from functools import update_wrapper
+from StringIO import StringIO
+
+from werkzeug.testsuite import WerkzeugTestCase
+
+from werkzeug import __version__ as version, serving
+from werkzeug.testapp import test_app
+from threading import Thread
+
+
+real_make_server = serving.make_server
+
+
+def silencestderr(f):
+ def new_func(*args, **kwargs):
+ old_stderr = sys.stderr
+ sys.stderr = StringIO()
+ try:
+ return f(*args, **kwargs)
+ finally:
+ sys.stderr = old_stderr
+ return update_wrapper(new_func, f)
+
+
+def run_dev_server(application):
+ servers = []
+ def tracking_make_server(*args, **kwargs):
+ srv = real_make_server(*args, **kwargs)
+ servers.append(srv)
+ return srv
+ serving.make_server = tracking_make_server
+ try:
+ t = Thread(target=serving.run_simple, args=('localhost', 0, application))
+ t.setDaemon(True)
+ t.start()
+ time.sleep(0.25)
+ finally:
+ serving.make_server = real_make_server
+ if not servers:
+ return None, None
+ server ,= servers
+ ip, port = server.socket.getsockname()[:2]
+ if ':' in ip:
+ ip = '[%s]' % ip
+ return server, '%s:%d' % (ip, port)
+
+
+class ServingTestCase(WerkzeugTestCase):
+
+ @silencestderr
+ def test_serving(self):
+ server, addr = run_dev_server(test_app)
+ rv = urllib.urlopen('http://%s/?foo=bar&baz=blah' % addr).read()
+ assert 'WSGI Information' in rv
+ assert 'foo=bar&baz=blah' in rv
+ assert ('Werkzeug/%s' % version) in rv
+
+ @silencestderr
+ def test_broken_app(self):
+ def broken_app(environ, start_response):
+ 1/0
+ server, addr = run_dev_server(broken_app)
+ rv = urllib.urlopen('http://%s/?foo=bar&baz=blah' % addr).read()
+ assert 'Internal Server Error' in rv
+
+
+def suite():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(ServingTestCase))
+ return suite