mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
subclass HTTP_Status from plugable.Plugin, fix not_found tests
HTTP_Status needs to subclass from Plugin because it does its own logging. Add tests for other methods of HTTP_Status
This commit is contained in:
@@ -26,6 +26,7 @@ Also see the `ipalib.rpc` module.
|
|||||||
from cgi import parse_qs
|
from cgi import parse_qs
|
||||||
from xml.sax.saxutils import escape
|
from xml.sax.saxutils import escape
|
||||||
from xmlrpclib import Fault
|
from xmlrpclib import Fault
|
||||||
|
from ipalib import plugable
|
||||||
from ipalib.backend import Executioner
|
from ipalib.backend import Executioner
|
||||||
from ipalib.errors import PublicError, InternalError, CommandError, JSONError, ConversionError, CCacheError, RefererError, InvalidSessionPassword
|
from ipalib.errors import PublicError, InternalError, CommandError, JSONError, ConversionError, CCacheError, RefererError, InvalidSessionPassword
|
||||||
from ipalib.request import context, Connection, destroy_context
|
from ipalib.request import context, Connection, destroy_context
|
||||||
@@ -96,7 +97,7 @@ _unauthorized_template = """<html>
|
|||||||
</body>
|
</body>
|
||||||
</html>"""
|
</html>"""
|
||||||
|
|
||||||
class HTTP_Status(object):
|
class HTTP_Status(plugable.Plugin):
|
||||||
def not_found(self, environ, start_response, url, message):
|
def not_found(self, environ, start_response, url, message):
|
||||||
"""
|
"""
|
||||||
Return a 404 Not Found error.
|
Return a 404 Not Found error.
|
||||||
|
|||||||
@@ -46,28 +46,67 @@ class StartResponse(object):
|
|||||||
|
|
||||||
|
|
||||||
def test_not_found():
|
def test_not_found():
|
||||||
f = rpcserver.not_found
|
f = rpcserver.HTTP_Status()
|
||||||
t = rpcserver._not_found_template
|
t = rpcserver._not_found_template
|
||||||
s = StartResponse()
|
s = StartResponse()
|
||||||
|
|
||||||
# Test with an innocent URL:
|
# Test with an innocent URL:
|
||||||
d = dict(SCRIPT_NAME='/ipa', PATH_INFO='/foo/stuff')
|
url = '/ipa/foo/stuff'
|
||||||
assert_equal(
|
assert_equal(
|
||||||
f(d, s),
|
f.not_found(None, s, url, None),
|
||||||
[t % dict(url='/ipa/foo/stuff')]
|
[t % dict(url='/ipa/foo/stuff')]
|
||||||
)
|
)
|
||||||
assert s.status == '404 Not Found'
|
assert s.status == '404 Not Found'
|
||||||
assert s.headers == [('Content-Type', 'text/html')]
|
assert s.headers == [('Content-Type', 'text/html; charset=utf-8')]
|
||||||
|
|
||||||
# Test when URL contains any of '<>&'
|
# Test when URL contains any of '<>&'
|
||||||
s.reset()
|
s.reset()
|
||||||
d = dict(SCRIPT_NAME=' ', PATH_INFO='<script>do_bad_stuff();</script>')
|
url =' ' + '<script>do_bad_stuff();</script>'
|
||||||
assert_equal(
|
assert_equal(
|
||||||
f(d, s),
|
f.not_found(None, s, url, None),
|
||||||
[t % dict(url='&nbsp;<script>do_bad_stuff();</script>')]
|
[t % dict(url='&nbsp;<script>do_bad_stuff();</script>')]
|
||||||
)
|
)
|
||||||
assert s.status == '404 Not Found'
|
assert s.status == '404 Not Found'
|
||||||
assert s.headers == [('Content-Type', 'text/html')]
|
assert s.headers == [('Content-Type', 'text/html; charset=utf-8')]
|
||||||
|
|
||||||
|
|
||||||
|
def test_bad_request():
|
||||||
|
f = rpcserver.HTTP_Status()
|
||||||
|
t = rpcserver._bad_request_template
|
||||||
|
s = StartResponse()
|
||||||
|
|
||||||
|
assert_equal(
|
||||||
|
f.bad_request(None, s, 'illegal request'),
|
||||||
|
[t % dict(message='illegal request')]
|
||||||
|
)
|
||||||
|
assert s.status == '400 Bad Request'
|
||||||
|
assert s.headers == [('Content-Type', 'text/html; charset=utf-8')]
|
||||||
|
|
||||||
|
|
||||||
|
def test_internal_error():
|
||||||
|
f = rpcserver.HTTP_Status()
|
||||||
|
t = rpcserver._internal_error_template
|
||||||
|
s = StartResponse()
|
||||||
|
|
||||||
|
assert_equal(
|
||||||
|
f.internal_error(None, s, 'request failed'),
|
||||||
|
[t % dict(message='request failed')]
|
||||||
|
)
|
||||||
|
assert s.status == '500 Internal Server Error'
|
||||||
|
assert s.headers == [('Content-Type', 'text/html; charset=utf-8')]
|
||||||
|
|
||||||
|
|
||||||
|
def test_internal_error():
|
||||||
|
f = rpcserver.HTTP_Status()
|
||||||
|
t = rpcserver._unauthorized_template
|
||||||
|
s = StartResponse()
|
||||||
|
|
||||||
|
assert_equal(
|
||||||
|
f.unauthorized(None, s, 'unauthorized'),
|
||||||
|
[t % dict(message='unauthorized')]
|
||||||
|
)
|
||||||
|
assert s.status == '401 Unauthorized'
|
||||||
|
assert s.headers == [('Content-Type', 'text/html; charset=utf-8')]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user