Package elisa :: Package extern :: Package log :: Module test_log
[hide private]
[frames] | no frames]

Source Code for Module elisa.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  __version__ = "$Rev: 5969 $" 
 23   
 24  from twisted.trial import unittest 
 25   
 26  import log 
 27   
28 -class LogTester(log.Loggable):
29 logCategory = 'testlog'
30
31 -class LogFunctionTester(log.Loggable):
32 - def logFunction(self, format, *args):
33 return (("override " + format),) + args[1:]
34
35 -class TestLog(unittest.TestCase):
36 - def setUp(self):
37 self.category = self.level = self.message = None 38 self.tester = LogTester() 39 # we want to remove the default handler so it doesn't show up stuff 40 log.reset()
41 42 # just test for parsing semi- or non-valid FLU_DEBUG variables
43 - def testSetDebug(self):
44 log.setDebug(":5") 45 log.setDebug("*") 46 log.setDebug("5")
47 48 # test for adding a log handler
49 - def handler(self, level, object, category, file, line, message):
50 self.level = level 51 self.object = object 52 self.category = category 53 self.file = file 54 self.line = line 55 self.message = message
56
57 - def testLimitInvisible(self):
58 log.setDebug("testlog:3") 59 log.addLimitedLogHandler(self.handler) 60 61 # log 2 we shouldn't get 62 self.tester.log("not visible") 63 assert not self.category 64 assert not self.level 65 assert not self.message 66 67 self.tester.debug("not visible") 68 assert not self.category 69 assert not self.level 70 assert not self.message
71
72 - def testLimitedVisible(self):
73 log.setDebug("testlog:3") 74 log.addLimitedLogHandler(self.handler) 75 76 # log 3 we should get 77 self.tester.info("visible") 78 assert self.category == 'testlog' 79 assert self.level == log.INFO 80 assert self.message == 'visible' 81 82 self.tester.warning("also visible") 83 assert self.category == 'testlog' 84 assert self.level == log.WARN 85 assert self.message == 'also visible'
86
87 - def testFormatStrings(self):
88 log.setDebug("testlog:3") 89 log.addLimitedLogHandler(self.handler) 90 91 self.tester.info("%d %s", 42, 'the answer') 92 assert self.category == 'testlog' 93 assert self.level == log.INFO 94 assert self.message == '42 the answer'
95
96 - def testLimitedError(self):
97 log.setDebug("testlog:3") 98 log.addLimitedLogHandler(self.handler) 99 100 self.assertRaises(SystemExit, self.tester.error, "error") 101 assert self.category == 'testlog' 102 assert self.level == log.ERROR 103 assert self.message == 'error'
104
106 log.setDebug("testlog:3") 107 log.addLimitedLogHandler(self.handler) 108 109 # now try debug and log again too 110 log.setDebug("testlog:5") 111 112 self.tester.debug("debug") 113 assert self.category == 'testlog' 114 assert self.level == log.DEBUG 115 assert self.message == 'debug' 116 117 self.tester.log("log") 118 assert self.category == 'testlog' 119 assert self.level == log.LOG 120 assert self.message == 'log'
121 122 # test that we get all log messages
123 - def testLogHandler(self):
124 log.setDebug("testlog:3") 125 log.addLogHandler(self.handler) 126 127 self.tester.log("visible") 128 assert self.message == 'visible' 129 130 self.tester.warning("also visible") 131 assert self.message == 'also visible'
132
133 -class TestOwnLogHandler(unittest.TestCase):
134 - def setUp(self):
135 self.category = self.level = self.message = None 136 self.tester = LogFunctionTester()
137
138 - def handler(self, level, object, category, file, line, message):
139 self.level = level 140 self.object = object 141 self.category = category 142 self.file = file 143 self.line = line 144 self.message = message
145 146 # test if our own log handler correctly mangles the message
147 - def testOwnLogHandlerLimited(self):
148 log.setDebug("testlog:3") 149 log.addLogHandler(self.handler) 150 151 self.tester.log("visible") 152 assert self.message == 'override visible'
153
154 - def testLogHandlerAssertion(self):
155 self.assertRaises(TypeError, log.addLimitedLogHandler, None)
156
157 -class TestGetExceptionMessage(unittest.TestCase):
158 - def func3(self):
159 self.func2()
160
161 - def func2(self):
162 self.func1()
163
164 - def func1(self):
165 raise TypeError, "I am in func1"
166
167 - def testLevel2(self):
168 try: 169 self.func2() 170 self.fail() 171 except TypeError, e: 172 self.verifyException(e)
173
174 - def testLevel3(self):
175 try: 176 self.func3() 177 self.fail() 178 except TypeError, e: 179 self.verifyException(e)
180
181 - def verifyException(self, e):
182 message = log.getExceptionMessage(e) 183 self.failUnless("func1()" in message) 184 self.failUnless("test_log.py" in message) 185 self.failUnless("TypeError" in message)
186
187 -class TestLogSettings(unittest.TestCase):
188 - def testSet(self):
189 old = log.getLogSettings() 190 log.setDebug('*:5') 191 self.assertNotEquals(old, log.getLogSettings()) 192 193 log.setLogSettings(old) 194 self.assertEquals(old, log.getLogSettings())
195 196 if __name__ == '__main__': 197 unittest.main() 198