diff options
Diffstat (limited to 'pecan/tests/middleware')
-rw-r--r-- | pecan/tests/middleware/__init__.py | 0 | ||||
-rw-r--r-- | pecan/tests/middleware/static_fixtures/self.png | bin | 6976 -> 0 bytes | |||
-rw-r--r-- | pecan/tests/middleware/static_fixtures/text.txt | 9 | ||||
-rw-r--r-- | pecan/tests/middleware/test_errordocument.py | 92 | ||||
-rw-r--r-- | pecan/tests/middleware/test_recursive.py | 142 | ||||
-rw-r--r-- | pecan/tests/middleware/test_static.py | 68 |
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 Binary files differdeleted file mode 100644 index 9b30321..0000000 --- a/pecan/tests/middleware/static_fixtures/self.png +++ /dev/null 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) |