Tests for `pecan.middleware.logger`.

This commit is contained in:
Ryan Petrello
2012-03-21 18:47:08 -04:00
parent 8f0ea133f9
commit 6ea0deff16
4 changed files with 52 additions and 46 deletions

View File

@@ -29,14 +29,6 @@ except ImportError: # pragma no cover
class RowProxy:
pass
#
# exceptions
#
class JsonEncodeError(Exception):
pass
#
# encoders

View File

@@ -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__

View File

@@ -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()

View File

@@ -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)