38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
import unittest
|
|
|
|
from logging import getLogger, ERROR, Handler
|
|
from lacre.stats import time_logger
|
|
|
|
def make_exception_raiser(logger):
|
|
def f():
|
|
with time_logger('Just a test', logger):
|
|
logger.info('Doing something')
|
|
raise Exception('this is a test')
|
|
return f
|
|
|
|
|
|
class LogRecordCollector(Handler):
|
|
logged_records = []
|
|
|
|
def handle(self, r):
|
|
self.logged_records.append(self.format(r))
|
|
|
|
|
|
class ExecutionTimeLoggerTest(unittest.TestCase):
|
|
def test_exception_handling(self):
|
|
handler = LogRecordCollector()
|
|
logger = getLogger('test-logger')
|
|
logger.addHandler(handler)
|
|
|
|
f = make_exception_raiser(logger)
|
|
|
|
self.assertRaises(Exception, f)
|
|
self.assertLogs(logger, ERROR)
|
|
self.assertEqual(len(handler.logged_records), 3)
|
|
self.assertEqual(handler.logged_records[0], 'Start: Just a test')
|
|
self.assertEqual(handler.logged_records[1], 'Doing something')
|
|
|
|
# Exception record should include the timing result and the traceback...
|
|
self.assertRegex(handler.logged_records[2], '^Just a test took \\d ms, raised exception\nTraceback.*')
|
|
# ...as well as the original exception
|
|
self.assertRegex(handler.logged_records[2], 'Exception: this is a test$')
|