summaryrefslogtreecommitdiff
path: root/pecan/tests/middleware
diff options
context:
space:
mode:
Diffstat (limited to 'pecan/tests/middleware')
-rw-r--r--pecan/tests/middleware/__init__.py0
-rw-r--r--pecan/tests/middleware/static_fixtures/self.pngbin6976 -> 0 bytes
-rw-r--r--pecan/tests/middleware/static_fixtures/text.txt9
-rw-r--r--pecan/tests/middleware/test_errordocument.py92
-rw-r--r--pecan/tests/middleware/test_recursive.py142
-rw-r--r--pecan/tests/middleware/test_static.py68
6 files changed, 0 insertions, 311 deletions
diff --git a/pecan/tests/middleware/__init__.py b/pecan/tests/middleware/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/pecan/tests/middleware/__init__.py
+++ /dev/null
diff --git a/pecan/tests/middleware/static_fixtures/self.png b/pecan/tests/middleware/static_fixtures/self.png
deleted file mode 100644
index 9b30321..0000000
--- a/pecan/tests/middleware/static_fixtures/self.png
+++ /dev/null
Binary files differ
diff --git a/pecan/tests/middleware/static_fixtures/text.txt b/pecan/tests/middleware/static_fixtures/text.txt
deleted file mode 100644
index c6defe5..0000000
--- a/pecan/tests/middleware/static_fixtures/text.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-This is a test text file.
-
-Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
-tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
-veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
-commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
-velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
-occaecat cupidatat non proident, sunt in culpa qui officia deserunt
-mollit anim id est laborum. \ No newline at end of file
diff --git a/pecan/tests/middleware/test_errordocument.py b/pecan/tests/middleware/test_errordocument.py
deleted file mode 100644
index 29f46e5..0000000
--- a/pecan/tests/middleware/test_errordocument.py
+++ /dev/null
@@ -1,92 +0,0 @@
-import json
-
-from webtest import TestApp
-from six import b as b_
-
-import pecan
-from pecan.middleware.errordocument import ErrorDocumentMiddleware
-from pecan.middleware.recursive import RecursiveMiddleware
-from pecan.tests import PecanTestCase
-
-
-def four_oh_four_app(environ, start_response):
- if environ['PATH_INFO'].startswith('/error'):
- code = environ['PATH_INFO'].split('/')[2]
- start_response("200 OK", [('Content-type', 'text/plain')])
-
- body = "Error: %s" % code
- if environ['QUERY_STRING']:
- body += "\nQS: %s" % environ['QUERY_STRING']
- return [b_(body)]
- start_response("404 Not Found", [('Content-type', 'text/plain')])
- return []
-
-
-class TestErrorDocumentMiddleware(PecanTestCase):
-
- def setUp(self):
- super(TestErrorDocumentMiddleware, self).setUp()
- self.app = TestApp(RecursiveMiddleware(ErrorDocumentMiddleware(
- four_oh_four_app, {404: '/error/404'}
- )))
-
- def test_hit_error_page(self):
- r = self.app.get('/error/404')
- assert r.status_int == 200
- assert r.body == b_('Error: 404')
-
- def test_middleware_routes_to_404_message(self):
- r = self.app.get('/', expect_errors=True)
- assert r.status_int == 404
- assert r.body == b_('Error: 404')
-
- def test_error_endpoint_with_query_string(self):
- app = TestApp(RecursiveMiddleware(ErrorDocumentMiddleware(
- four_oh_four_app, {404: '/error/404?foo=bar'}
- )))
- r = app.get('/', expect_errors=True)
- assert r.status_int == 404
- assert r.body == b_('Error: 404\nQS: foo=bar')
-
- def test_error_with_recursion_loop(self):
- app = TestApp(RecursiveMiddleware(ErrorDocumentMiddleware(
- four_oh_four_app, {404: '/'}
- )))
- r = app.get('/', expect_errors=True)
- assert r.status_int == 404
- assert r.body == b_(
- 'Error: 404 Not Found. (Error page could not be fetched)'
- )
-
- def test_original_exception(self):
-
- class RootController(object):
-
- @pecan.expose()
- def index(self):
- if pecan.request.method != 'POST':
- pecan.abort(405, 'You have to POST, dummy!')
- return 'Hello, World!'
-
- @pecan.expose('json')
- def error(self, status):
- return dict(
- status=int(status),
- reason=pecan.request.environ[
- 'pecan.original_exception'
- ].detail
- )
-
- app = pecan.Pecan(RootController())
- app = RecursiveMiddleware(ErrorDocumentMiddleware(app, {
- 405: '/error/405'
- }))
- app = TestApp(app)
-
- assert app.post('/').status_int == 200
- r = app.get('/', expect_errors=405)
- assert r.status_int == 405
-
- resp = json.loads(r.body.decode())
- assert resp['status'] == 405
- assert resp['reason'] == 'You have to POST, dummy!'
diff --git a/pecan/tests/middleware/test_recursive.py b/pecan/tests/middleware/test_recursive.py
deleted file mode 100644
index ed95d50..0000000
--- a/pecan/tests/middleware/test_recursive.py
+++ /dev/null
@@ -1,142 +0,0 @@
-from webtest import TestApp
-from six import b as b_
-
-from pecan.middleware.recursive import (RecursiveMiddleware,
- ForwardRequestException)
-from pecan.tests import PecanTestCase
-
-
-def simple_app(environ, start_response):
- start_response("200 OK", [('Content-type', 'text/plain')])
- return [b_('requested page returned')]
-
-
-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.headers['content-type'] == 'text/plain'
- assert res.status == '200 OK'
- assert 'requested page returned' in res
- res = app.get('/error')
- assert res.headers['content-type'] == 'text/plain'
- assert res.status == '200 OK'
- assert 'Page not found' in res
- res = app.get('/not_found')
- assert res.headers['content-type'] == 'text/plain'
- assert res.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')
-
-
-class TestRecursiveMiddleware(PecanTestCase):
-
- def test_ForwardRequest_url(self):
- 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_url_with_params(self):
- 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 + '?q=1')
- forward(TestForwardRequestMiddleware(error_docs_app))
-
- def test_ForwardRequest_environ(self):
- 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(self):
-
- 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):
-
- class WSGIApp(object):
-
- def __init__(self, app):
- self.app = app
-
- def __call__(self, e, start_response):
- def keep_status_start_response(status, headers,
- exc_info=None):
- return start_response(
- '404 Not Found', headers, exc_info
- )
- return self.app(e, keep_status_start_response)
-
- return WSGIApp(app)
-
- raise ForwardRequestException(factory=factory)
-
- app = TestForwardRequestMiddleware(error_docs_app)
- app = TestApp(RecursiveMiddleware(app))
- res = app.get('')
- assert res.headers['content-type'] == 'text/plain'
- assert res.status == '200 OK'
- assert 'requested page returned' in res
- res = app.get('/error')
- assert res.headers['content-type'] == 'text/plain'
- assert res.status == '200 OK'
- assert 'Page not found' in res
- res = app.get('/not_found', status=404)
- assert res.headers['content-type'] == 'text/plain'
- assert res.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')
-
- def test_ForwardRequestException(self):
- 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))
diff --git a/pecan/tests/middleware/test_static.py b/pecan/tests/middleware/test_static.py
deleted file mode 100644
index 9a0c08c..0000000
--- a/pecan/tests/middleware/test_static.py
+++ /dev/null
@@ -1,68 +0,0 @@
-from pecan.middleware.static import (StaticFileMiddleware, FileWrapper,
- _dump_date)
-from pecan.tests import PecanTestCase
-
-import os
-
-
-class TestStaticFileMiddleware(PecanTestCase):
-
- def setUp(self):
- super(TestStaticFileMiddleware, self).setUp()
-
- def app(environ, start_response):
- response_headers = [('Content-type', 'text/plain')]
- start_response('200 OK', response_headers)
- return ['Hello world!\n']
-
- self.app = StaticFileMiddleware(
- app, os.path.dirname(__file__)
- )
-
- self._status = None
- self._response_headers = None
-
- def _request(self, path):
- def start_response(status, response_headers, exc_info=None):
- self._status = status
- self._response_headers = response_headers
- return self.app(
- dict(PATH_INFO=path),
- start_response
- )
-
- def _get_response_header(self, header):
- for k, v in self._response_headers:
- if k.upper() == header.upper():
- return v
- return None
-
- def test_file_can_be_found(self):
- result = self._request('/static_fixtures/text.txt')
- assert isinstance(result, FileWrapper)
-
- def test_no_file_found_causes_passthrough(self):
- result = self._request('/static_fixtures/nosuchfile.txt')
- assert not isinstance(result, FileWrapper)
- assert result == ['Hello world!\n']
-
- def test_mime_type_works_for_png_files(self):
- self._request('/static_fixtures/self.png')
- assert self._get_response_header('Content-Type') == 'image/png'
-
- def test_file_can_be_closed(self):
- result = self._request('/static_fixtures/text.txt')
- assert result.close() is None
-
- def test_file_can_be_iterated_over(self):
- result = self._request('/static_fixtures/text.txt')
- assert len([x for x in result])
-
- def test_date_dumping_on_unix_timestamps(self):
- result = _dump_date(1331755274.59, ' ')
- assert result == 'Wed, 14 Mar 2012 20:01:14 GMT'
-
- def test_separator_sanitization_still_finds_file(self):
- os.altsep = ':'
- result = self._request(':static_fixtures:text.txt')
- assert isinstance(result, FileWrapper)