mitmproxy/test/test_wsgi.py

107 lines
3.1 KiB
Python
Raw Normal View History

2015-09-20 16:12:55 +00:00
from io import BytesIO
import sys
2015-09-05 16:15:47 +00:00
from netlib import wsgi
from netlib.http import Headers
def tflow():
2015-09-20 22:44:17 +00:00
headers = Headers(test=b"value")
req = wsgi.Request("http", "GET", "/", "HTTP/1.1", headers, "")
return wsgi.Flow(("127.0.0.1", 8888), req)
2012-06-18 22:42:25 +00:00
class TestApp:
2012-06-18 22:42:25 +00:00
def __init__(self):
self.called = False
def __call__(self, environ, start_response):
self.called = True
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
2015-09-20 22:44:17 +00:00
return [b'Hello', b' world!\n']
2012-06-18 22:42:25 +00:00
class TestWSGI:
2012-06-18 22:42:25 +00:00
def test_make_environ(self):
w = wsgi.WSGIAdaptor(None, "foo", 80, "version")
tf = tflow()
assert w.make_environ(tf, None)
2012-06-18 22:42:25 +00:00
tf.request.path = "/foo?bar=voing"
r = w.make_environ(tf, None)
2012-06-18 22:42:25 +00:00
assert r["QUERY_STRING"] == "bar=voing"
def test_serve(self):
ta = TestApp()
w = wsgi.WSGIAdaptor(ta, "foo", 80, "version")
f = tflow()
f.request.host = "foo"
f.request.port = 80
2012-06-18 22:42:25 +00:00
2015-09-20 16:12:55 +00:00
wfile = BytesIO()
err = w.serve(f, wfile)
2012-06-18 22:42:25 +00:00
assert ta.called
assert not err
val = wfile.getvalue()
2015-09-20 22:44:17 +00:00
assert b"Hello world" in val
assert b"Server:" in val
2012-06-18 22:42:25 +00:00
def _serve(self, app):
w = wsgi.WSGIAdaptor(app, "foo", 80, "version")
f = tflow()
f.request.host = "foo"
f.request.port = 80
2015-09-20 16:12:55 +00:00
wfile = BytesIO()
w.serve(f, wfile)
2012-06-18 22:42:25 +00:00
return wfile.getvalue()
def test_serve_empty_body(self):
def app(environ, start_response):
status = '200 OK'
response_headers = [('Foo', 'bar')]
start_response(status, response_headers)
return []
assert self._serve(app)
def test_serve_double_start(self):
def app(environ, start_response):
try:
raise ValueError("foo")
except:
sys.exc_info()
2012-06-18 22:42:25 +00:00
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
start_response(status, response_headers)
2015-09-20 22:44:17 +00:00
assert b"Internal Server Error" in self._serve(app)
2012-06-18 22:42:25 +00:00
def test_serve_single_err(self):
def app(environ, start_response):
try:
raise ValueError("foo")
except:
ei = sys.exc_info()
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers, ei)
2015-09-20 22:44:17 +00:00
yield b""
assert b"Internal Server Error" in self._serve(app)
2012-06-18 22:42:25 +00:00
def test_serve_double_err(self):
def app(environ, start_response):
try:
raise ValueError("foo")
except:
ei = sys.exc_info()
status = '200 OK'
response_headers = [('Content-type', 'text/plain')]
start_response(status, response_headers)
2015-09-20 22:44:17 +00:00
yield b"aaa"
2012-06-18 22:42:25 +00:00
start_response(status, response_headers, ei)
2015-09-20 22:44:17 +00:00
yield b"bbb"
assert b"Internal Server Error" in self._serve(app)