Tests for `pecan.middleware.logger`.
This commit is contained in:
@@ -29,14 +29,6 @@ except ImportError: # pragma no cover
|
||||
class RowProxy:
|
||||
pass
|
||||
|
||||
#
|
||||
# exceptions
|
||||
#
|
||||
|
||||
|
||||
class JsonEncodeError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
#
|
||||
# encoders
|
||||
|
||||
@@ -10,19 +10,6 @@ import time
|
||||
import urllib
|
||||
|
||||
|
||||
def asbool(obj):
|
||||
if isinstance(obj, (str, unicode)):
|
||||
obj = obj.strip().lower()
|
||||
if obj in ['true', 'yes', 'on', 'y', 't', '1']:
|
||||
return True
|
||||
elif obj in ['false', 'no', 'off', 'n', 'f', '0']:
|
||||
return False
|
||||
else:
|
||||
raise ValueError(
|
||||
"String is not true/false: %r" % obj)
|
||||
return bool(obj)
|
||||
|
||||
|
||||
class TransLogger(object):
|
||||
"""
|
||||
This logging middleware will log all requests as they go through.
|
||||
@@ -96,9 +83,9 @@ class TransLogger(object):
|
||||
offset = "%0.4d" % (offset) # pragma: nocover
|
||||
remote_addr = '-'
|
||||
if environ.get('HTTP_X_FORWARDED_FOR'):
|
||||
remote_addr = environ['HTTP_X_FORWARDED_FOR']
|
||||
remote_addr = environ['HTTP_X_FORWARDED_FOR'] # pragma: nocover
|
||||
elif environ.get('REMOTE_ADDR'):
|
||||
remote_addr = environ['REMOTE_ADDR']
|
||||
remote_addr = environ['REMOTE_ADDR'] # pragma: nocover
|
||||
d = {
|
||||
'REMOTE_ADDR': remote_addr,
|
||||
'REMOTE_USER': environ.get('REMOTE_USER') or '-',
|
||||
@@ -113,25 +100,3 @@ class TransLogger(object):
|
||||
}
|
||||
message = self.format % d
|
||||
self.logger.log(self.logging_level, message)
|
||||
|
||||
|
||||
def make_filter(
|
||||
app, global_conf,
|
||||
logger_name='wsgi',
|
||||
format=None,
|
||||
logging_level=logging.INFO,
|
||||
setup_console_handler=True,
|
||||
set_logger_level=logging.DEBUG):
|
||||
if isinstance(logging_level, basestring):
|
||||
logging_level = logging._levelNames[logging_level]
|
||||
if isinstance(set_logger_level, basestring):
|
||||
set_logger_level = logging._levelNames[set_logger_level]
|
||||
return TransLogger(
|
||||
app,
|
||||
format=format or None,
|
||||
logging_level=logging_level,
|
||||
logger_name=logger_name,
|
||||
setup_console_handler=asbool(setup_console_handler),
|
||||
set_logger_level=set_logger_level)
|
||||
|
||||
make_filter.__doc__ = TransLogger.__doc__
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
from cStringIO import StringIO
|
||||
from unittest import TestCase
|
||||
from webtest import TestApp
|
||||
|
||||
from pecan.middleware.logger import TransLogger
|
||||
|
||||
|
||||
def simple_app(environ, start_response):
|
||||
start_response("200 OK", [('Content-type', 'text/plain')])
|
||||
return ['Hello, World']
|
||||
|
||||
|
||||
class FakeLogger(object):
|
||||
|
||||
def __init__(self):
|
||||
self.b = StringIO()
|
||||
|
||||
def log(self, level, msg):
|
||||
self.b.write(msg)
|
||||
|
||||
def getvalue(self):
|
||||
return self.b.getvalue()
|
||||
|
||||
|
||||
class TestDebugMiddleware(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.logger = FakeLogger()
|
||||
|
||||
def test_simple_log(self):
|
||||
app = TestApp(TransLogger(simple_app, logger=self.logger))
|
||||
r = app.get('/')
|
||||
assert r.status_int == 200
|
||||
assert r.body == 'Hello, World'
|
||||
assert '"GET / HTTP/1.0" 200 - "-" "-"' in self.logger.getvalue()
|
||||
|
||||
def test_log_format(self):
|
||||
app = TestApp(TransLogger(simple_app, logger=self.logger, format='X'))
|
||||
r = app.get('/')
|
||||
assert r.status_int == 200
|
||||
assert r.body == 'Hello, World'
|
||||
assert self.logger.getvalue() == 'X'
|
||||
|
||||
def test_log_query_string(self):
|
||||
app = TestApp(TransLogger(simple_app, logger=self.logger))
|
||||
r = app.get('/?foo=1')
|
||||
assert r.status_int == 200
|
||||
assert r.body == 'Hello, World'
|
||||
assert '"GET /?foo=1 HTTP/1.0" 200 - "-" "-"' in self.logger.getvalue()
|
||||
|
||||
@@ -103,7 +103,7 @@ class TestRecursiveMiddleware(TestCase):
|
||||
status, headers, exc_info=None
|
||||
):
|
||||
return start_response(
|
||||
'404', headers, exc_info
|
||||
'404 Not Found', headers, exc_info
|
||||
)
|
||||
return self.app(e, keep_status_start_response)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user