from twisted.trial import unittest
from twisted.python import log
from twisted.python import failure
class LogTest(unittest.TestCase):
def setUp(self):
self.catcher = []
log.addObserver(self.catcher.append)
def tearDown(self):
log.removeObserver(self.catcher.append)
def testObservation(self):
catcher = self.catcher
log.msg("test", testShouldCatch=True)
i = catcher.pop()
self.assertEquals(i["message"][0], "test")
self.assertEquals(i["testShouldCatch"], True)
self.failUnless(i.has_key("time"))
self.assertEquals(len(catcher), 0)
def testContext(self):
catcher = self.catcher
log.callWithContext({"subsystem": "not the default",
"subsubsystem": "a",
"other": "c"},
log.callWithContext,
{"subsubsystem": "b"}, log.msg, "foo", other="d")
i = catcher.pop()
self.assertEquals(i['subsubsystem'], 'b')
self.assertEquals(i['subsystem'], 'not the default')
self.assertEquals(i['other'], 'd')
self.assertEquals(i['message'][0], 'foo')
def testErrors(self):
for e, ig in [("hello world","hello world"),
(KeyError(), KeyError),
(failure.Failure(RuntimeError()), RuntimeError)]:
log.err(e)
i = self.catcher.pop()
self.assertEquals(i['isError'], 1)
log.flushErrors(ig)
def testErroneousErrors(self):
L1 = []
L2 = []
log.addObserver(lambda events: events['isError'] or L1.append(events))
log.addObserver(lambda events: 1/0)
log.addObserver(lambda events: events['isError'] or L2.append(events))
log.msg("Howdy, y'all.")
excs = [f.type for f in log.flushErrors(ZeroDivisionError)]
self.assertEquals([ZeroDivisionError], excs)
self.assertEquals(len(L1), 2)
self.assertEquals(len(L2), 2)
self.assertEquals(L1[1]['message'], ("Howdy, y'all.",))
self.assertEquals(L2[0]['message'], ("Howdy, y'all.",))
log.msg("Howdy, y'all.")
self.assertEquals(len(L1), 3)
self.assertEquals(len(L2), 3)
self.assertEquals(L1[2]['message'], ("Howdy, y'all.",))
self.assertEquals(L2[2]['message'], ("Howdy, y'all.",))