Package flumotion :: Package extern :: Package log :: Module test_log
[hide private]

Source Code for Module flumotion.extern.log.test_log

  1  # -*- Mode: Python; test-case-name: test_log -*- 
  2  # vi:si:et:sw=4:sts=4:ts=4 
  3  # 
  4  # Flumotion - a streaming media server 
  5  # Copyright (C) 2004,2005,2006,2007 Fluendo, S.L. (www.fluendo.com). 
  6  # All rights reserved. 
  7   
  8  # This file may be distributed and/or modified under the terms of 
  9  # the GNU General Public License version 2 as published by 
 10  # the Free Software Foundation. 
 11  # This file is distributed without any warranty; without even the implied 
 12  # warranty of merchantability or fitness for a particular purpose. 
 13  # See "LICENSE.GPL" in the source distribution for more information. 
 14   
 15  # Licensees having purchased or holding a valid Flumotion Advanced 
 16  # Streaming Server license may use this file in accordance with the 
 17  # Flumotion Advanced Streaming Server Commercial License Agreement. 
 18  # See "LICENSE.Flumotion" in the source distribution for more information. 
 19   
 20  # Headers in this file shall remain intact. 
 21   
 22  from twisted.trial import unittest 
 23   
 24  import log 
 25   
26 -class LogTester(log.Loggable):
27 logCategory = 'testlog'
28
29 -class LogFunctionTester(log.Loggable):
30 - def logFunction(self, format, *args):
31 return (("override " + format),) + args[1:]
32
33 -class TestLog(unittest.TestCase):
34 - def setUp(self):
35 self.category = self.level = self.message = None 36 self.tester = LogTester() 37 # we want to remove the default handler so it doesn't show up stuff 38 log.reset()
39 40 # just test for parsing semi- or non-valid FLU_DEBUG variables
41 - def testSetDebug(self):
42 log.setDebug(":5") 43 log.setDebug("*") 44 log.setDebug("5")
45 46 # test for adding a log handler
47 - def handler(self, level, object, category, file, line, message):
48 self.level = level 49 self.object = object 50 self.category = category 51 self.file = file 52 self.line = line 53 self.message = message
54
55 - def testLimitInvisible(self):
56 log.setDebug("testlog:3") 57 log.addLimitedLogHandler(self.handler) 58 59 # log 2 we shouldn't get 60 self.tester.log("not visible") 61 assert not self.category 62 assert not self.level 63 assert not self.message 64 65 self.tester.debug("not visible") 66 assert not self.category 67 assert not self.level 68 assert not self.message
69
70 - def testLimitedVisible(self):
71 log.setDebug("testlog:3") 72 log.addLimitedLogHandler(self.handler) 73 74 # log 3 we should get 75 self.tester.info("visible") 76 assert self.category == 'testlog' 77 assert self.level == log.INFO 78 assert self.message == 'visible' 79 80 self.tester.warning("also visible") 81 assert self.category == 'testlog' 82 assert self.level == log.WARN 83 assert self.message == 'also visible'
84
85 - def testFormatStrings(self):
86 log.setDebug("testlog:3") 87 log.addLimitedLogHandler(self.handler) 88 89 self.tester.info("%d %s", 42, 'the answer') 90 assert self.category == 'testlog' 91 assert self.level == log.INFO 92 assert self.message == '42 the answer'
93
94 - def testLimitedError(self):
95 log.setDebug("testlog:3") 96 log.addLimitedLogHandler(self.handler) 97 98 self.assertRaises(SystemExit, self.tester.error, "error") 99 assert self.category == 'testlog' 100 assert self.level == log.ERROR 101 assert self.message == 'error'
102
104 log.setDebug("testlog:3") 105 log.addLimitedLogHandler(self.handler) 106 107 # now try debug and log again too 108 log.setDebug("testlog:5") 109 110 self.tester.debug("debug") 111 assert self.category == 'testlog' 112 assert self.level == log.DEBUG 113 assert self.message == 'debug' 114 115 self.tester.log("log") 116 assert self.category == 'testlog' 117 assert self.level == log.LOG 118 assert self.message == 'log'
119 120 # test that we get all log messages
121 - def testLogHandler(self):
122 log.setDebug("testlog:3") 123 log.addLogHandler(self.handler) 124 125 self.tester.log("visible") 126 assert self.message == 'visible' 127 128 self.tester.warning("also visible") 129 assert self.message == 'also visible'
130
131 -class TestOwnLogHandler(unittest.TestCase):
132 - def setUp(self):
133 self.category = self.level = self.message = None 134 self.tester = LogFunctionTester()
135
136 - def handler(self, level, object, category, file, line, message):
137 self.level = level 138 self.object = object 139 self.category = category 140 self.file = file 141 self.line = line 142 self.message = message
143 144 # test if our own log handler correctly mangles the message
145 - def testOwnLogHandlerLimited(self):
146 log.setDebug("testlog:3") 147 log.addLogHandler(self.handler) 148 149 self.tester.log("visible") 150 assert self.message == 'override visible'
151
152 - def testLogHandlerAssertion(self):
153 self.assertRaises(TypeError, log.addLimitedLogHandler, None)
154
155 -class TestGetExceptionMessage(unittest.TestCase):
156 - def func3(self):
157 self.func2()
158
159 - def func2(self):
160 self.func1()
161
162 - def func1(self):
163 raise TypeError, "I am in func1"
164
165 - def testLevel2(self):
166 try: 167 self.func2() 168 self.fail() 169 except TypeError, e: 170 self.verifyException(e)
171
172 - def testLevel3(self):
173 try: 174 self.func3() 175 self.fail() 176 except TypeError, e: 177 self.verifyException(e)
178
179 - def verifyException(self, e):
180 message = log.getExceptionMessage(e) 181 self.failUnless("func1()" in message) 182 self.failUnless("test_log.py" in message) 183 self.failUnless("TypeError" in message)
184
185 -class TestLogSettings(unittest.TestCase):
186 - def testSet(self):
187 old = log.getLogSettings() 188 log.setDebug('*:5') 189 self.assertNotEquals(old, log.getLogSettings()) 190 191 log.setLogSettings(old) 192 self.assertEquals(old, log.getLogSettings())
193 194 if __name__ == '__main__': 195 unittest.main() 196