1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
# (c) 2005 Ian Bicking, Clark C. Evans and contributors
# This module is part of the Python Paste Project and is released under
# the MIT License: http://www.opensource.org/licenses/mit-license.php
"""
WSGI Exception Middleware
Regression Test Suite
"""
from paste.httpexceptions import *
from paste.wsgilib import raw_interactive
from paste.response import header_value
import py
def test_HTTPMove():
""" make sure that location is a mandatory attribute of Redirects """
py.test.raises(AssertionError,HTTPFound)
py.test.raises(AssertionError,HTTPTemporaryRedirect,
headers=[('l0cation','/bing')])
assert isinstance(HTTPMovedPermanently("This is a message",
headers=[('Location','/bing')])
,HTTPRedirection)
assert isinstance(HTTPUseProxy(headers=[('LOCATION','/bing')])
,HTTPRedirection)
assert isinstance(HTTPFound('/foobar'),HTTPRedirection)
def test_badapp():
""" verify that the middleware handles previously-started responses """
def badapp(environ, start_response):
start_response("200 OK",[])
raise HTTPBadRequest("Do not do this at home.")
newapp = HTTPExceptionHandler(badapp)
assert 'Bad Request' in ''.join(newapp({'HTTP_ACCEPT': 'text/html'},
(lambda a, b, c=None: None)))
def test_template():
""" verify that html() and plain() output methods work """
e = HTTPInternalServerError()
e.template = 'A %(ping)s and <b>%(pong)s</b> message.'
assert str(e).startswith("500 Internal Server Error")
assert e.plain({'ping': 'fun', 'pong': 'happy'}) == (
'500 Internal Server Error\r\n'
'A fun and happy message.\r\n')
assert '<p>A fun and <b>happy</b> message.</p>' in \
e.html({'ping': 'fun', 'pong': 'happy'})
def test_iterator_application():
"""
This tests to see that an iterator's exceptions are caught by
HTTPExceptionHandler
"""
def basic_found(environ, start_response):
raise HTTPFound("/bing/foo")
return ['result']
app = HTTPExceptionHandler(basic_found)
(status, headers, content, errors) = raw_interactive(app)
assert '302 Found' == status
def make_iter(application):
def iterapp(environ, start_response):
result = application(environ, start_response)
for chunk in result:
yield chunk
return iterapp
app = HTTPExceptionHandler(make_iter(basic_found))
(status, headers, content, errors) = raw_interactive(app)
assert '302 Found' == status
def iterate_found(environ, start_response):
raise HTTPFound("/bing/foo")
yield 'result'
app = HTTPExceptionHandler(iterate_found)
(status, headers, content, errors) = raw_interactive(app)
assert '302 Found' == status
def test_redapp():
""" check that redirect returns the correct, expected results """
saved = []
def saveit(status, headers, exc_info = None):
saved.append((status,headers))
def redapp(environ, start_response):
raise HTTPFound("/bing/foo")
app = HTTPExceptionHandler(redapp)
result = list(app({'HTTP_ACCEPT': 'text/html'},saveit))
assert '<a href="/bing/foo">' in result[0]
assert "302 Found" == saved[0][0]
assert "text/html" == header_value(saved[0][1], 'content-type')
assert "/bing/foo" == header_value(saved[0][1],'location')
result = list(app({'HTTP_ACCEPT': 'text/plain'},saveit))
print result[0] == (
'302 Found\n'
'This resource was found at /bing/foo;\n'
'you should be redirected automatically.\n')
assert "text/plain" == header_value(saved[1][1],'content-type')
assert "/bing/foo" == header_value(saved[1][1],'location')
def test_misc():
assert get_exception(301) == HTTPMovedPermanently
redirect = HTTPFound("/some/path")
assert isinstance(redirect,HTTPException)
assert isinstance(redirect,HTTPRedirection)
assert not isinstance(redirect,HTTPError)
notfound = HTTPNotFound()
assert isinstance(notfound,HTTPException)
assert isinstance(notfound,HTTPError)
assert isinstance(notfound,HTTPClientError)
assert not isinstance(notfound,HTTPServerError)
notimpl = HTTPNotImplemented()
assert isinstance(notimpl,HTTPException)
assert isinstance(notimpl,HTTPError)
assert isinstance(notimpl,HTTPServerError)
assert not isinstance(notimpl,HTTPClientError)
|