summaryrefslogtreecommitdiff
path: root/tests/test_recursive.py
diff options
context:
space:
mode:
authorMarc Abramowitz <marc@marc-abramowitz.com>2015-04-30 16:42:17 -0700
committerMarc Abramowitz <marc@marc-abramowitz.com>2015-04-30 16:42:17 -0700
commit12a3f1f4cfa7f88478dc1b0e949fcc095b9fc804 (patch)
treeddb8079523d846f0b074437fc33fa5e28b508183 /tests/test_recursive.py
downloadpaste-git-12a3f1f4cfa7f88478dc1b0e949fcc095b9fc804.tar.gz
Replace cgi.parse_qsl w/ six.moves.urllib.parse.parse_sqleliminate_cgi_parse_qsl_2eliminate_cgi_parse_qsl
because `cgi.parse_qsl` is deprecated, according to https://docs.python.org/2/library/cgi.html#cgi.parse_qsl
Diffstat (limited to 'tests/test_recursive.py')
-rw-r--r--tests/test_recursive.py105
1 files changed, 105 insertions, 0 deletions
diff --git a/tests/test_recursive.py b/tests/test_recursive.py
new file mode 100644
index 0000000..1cb1984
--- /dev/null
+++ b/tests/test_recursive.py
@@ -0,0 +1,105 @@
+from .test_errordocument import simple_app
+from paste.fixture import *
+from paste.recursive import RecursiveMiddleware, ForwardRequestException
+
+def error_docs_app(environ, start_response):
+ if environ['PATH_INFO'] == '/not_found':
+ start_response("404 Not found", [('Content-type', 'text/plain')])
+ return [b'Not found']
+ elif environ['PATH_INFO'] == '/error':
+ start_response("200 OK", [('Content-type', 'text/plain')])
+ return [b'Page not found']
+ elif environ['PATH_INFO'] == '/recurse':
+ raise ForwardRequestException('/recurse')
+ else:
+ return simple_app(environ, start_response)
+
+class Middleware(object):
+ def __init__(self, app, url='/error'):
+ self.app = app
+ self.url = url
+ def __call__(self, environ, start_response):
+ raise ForwardRequestException(self.url)
+
+def forward(app):
+ app = TestApp(RecursiveMiddleware(app))
+ res = app.get('')
+ assert res.header('content-type') == 'text/plain'
+ assert res.full_status == '200 OK'
+ assert 'requested page returned' in res
+ res = app.get('/error')
+ assert res.header('content-type') == 'text/plain'
+ assert res.full_status == '200 OK'
+ assert 'Page not found' in res
+ res = app.get('/not_found')
+ assert res.header('content-type') == 'text/plain'
+ assert res.full_status == '200 OK'
+ assert 'Page not found' in res
+ try:
+ res = app.get('/recurse')
+ except AssertionError as e:
+ if str(e).startswith('Forwarding loop detected'):
+ pass
+ else:
+ raise AssertionError('Failed to detect forwarding loop')
+
+def test_ForwardRequest_url():
+ class TestForwardRequestMiddleware(Middleware):
+ def __call__(self, environ, start_response):
+ if environ['PATH_INFO'] != '/not_found':
+ return self.app(environ, start_response)
+ raise ForwardRequestException(self.url)
+ forward(TestForwardRequestMiddleware(error_docs_app))
+
+def test_ForwardRequest_environ():
+ class TestForwardRequestMiddleware(Middleware):
+ def __call__(self, environ, start_response):
+ if environ['PATH_INFO'] != '/not_found':
+ return self.app(environ, start_response)
+ environ['PATH_INFO'] = self.url
+ raise ForwardRequestException(environ=environ)
+ forward(TestForwardRequestMiddleware(error_docs_app))
+
+def test_ForwardRequest_factory():
+
+ from paste.errordocument import StatusKeeper
+
+ class TestForwardRequestMiddleware(Middleware):
+ def __call__(self, environ, start_response):
+ if environ['PATH_INFO'] != '/not_found':
+ return self.app(environ, start_response)
+ environ['PATH_INFO'] = self.url
+ def factory(app):
+ return StatusKeeper(app, status='404 Not Found', url='/error', headers=[])
+ raise ForwardRequestException(factory=factory)
+
+ app = TestForwardRequestMiddleware(error_docs_app)
+ app = TestApp(RecursiveMiddleware(app))
+ res = app.get('')
+ assert res.header('content-type') == 'text/plain'
+ assert res.full_status == '200 OK'
+ assert 'requested page returned' in res
+ res = app.get('/error')
+ assert res.header('content-type') == 'text/plain'
+ assert res.full_status == '200 OK'
+ assert 'Page not found' in res
+ res = app.get('/not_found', status=404)
+ assert res.header('content-type') == 'text/plain'
+ assert res.full_status == '404 Not Found' # Different status
+ assert 'Page not found' in res
+ try:
+ res = app.get('/recurse')
+ except AssertionError as e:
+ if str(e).startswith('Forwarding loop detected'):
+ pass
+ else:
+ raise AssertionError('Failed to detect forwarding loop')
+
+# Test Deprecated Code
+def test_ForwardRequestException():
+ class TestForwardRequestExceptionMiddleware(Middleware):
+ def __call__(self, environ, start_response):
+ if environ['PATH_INFO'] != '/not_found':
+ return self.app(environ, start_response)
+ raise ForwardRequestException(path_info=self.url)
+ forward(TestForwardRequestExceptionMiddleware(error_docs_app))