1
# -*- Mode: Python; test-case-name: test_log -*-
2
# vi:si:et:sw=4:sts=4:ts=4
4
# Flumotion - a streaming media server
5
# Copyright (C) 2004,2005,2006,2007 Fluendo, S.L. (www.fluendo.com).
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.
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.
20
# Headers in this file shall remain intact.
25
from pitivi.utils import loggable as log
27
__version__ = "$Rev: 7162 $"
30
class LogTester(log.Loggable):
31
logCategory = 'testlog'
34
class LogFunctionTester(log.Loggable):
36
def logFunction(self, format, *args):
37
return (("override " + format), ) + args[1:]
40
class TestWithHandler(unittest.TestCase):
50
# we want to remove the default handler so it doesn't show up stuff
53
def handler(self, level, object, category, file, line, message):
56
self.category = category
59
self.message = message.split(' ', 1)[1]
62
class TestLog(TestWithHandler):
65
TestWithHandler.setUp(self)
66
self.tester = LogTester()
68
# just test for parsing semi- or non-valid FLU_DEBUG variables
70
def testSetDebug(self):
75
# test for adding a log handler
77
def testLimitInvisible(self):
78
log.setDebug("testlog:%d" % log.INFO)
79
log.addLimitedLogHandler(self.handler)
81
# log 2 we shouldn't get
82
self.tester.log("not visible")
83
self.assertFalse(self.category)
84
self.assertFalse(self.level)
85
self.assertFalse(self.message)
87
self.tester.debug("not visible")
88
self.assertFalse(self.category)
89
self.assertFalse(self.level)
90
self.assertFalse(self.message)
92
def testLimitedVisible(self):
93
log.setDebug("testlog:%d" % log.INFO)
94
log.addLimitedLogHandler(self.handler)
97
self.tester.info("visible")
98
self.assertEqual(self.category, 'testlog')
99
self.assertEqual(self.level, log.INFO)
100
self.assertEqual(self.message, 'visible')
102
self.tester.warning("also visible")
103
self.assertEqual(self.category, 'testlog')
104
self.assertEqual(self.level, log.WARN)
105
self.assertEqual(self.message, 'also visible')
107
def testFormatStrings(self):
108
log.setDebug("testlog:%d" % log.INFO)
109
log.addLimitedLogHandler(self.handler)
111
self.tester.info("%d %s", 42, 'the answer')
112
self.assertEqual(self.category, 'testlog')
113
self.assertEqual(self.level, log.INFO)
114
self.assertEqual(self.message, '42 the answer')
116
def testLimitedError(self):
117
log.setDebug("testlog:%d" % log.ERROR)
118
log.addLimitedLogHandler(self.handler)
120
self.tester.error("error")
121
self.assertEqual(self.category, 'testlog')
122
self.assertEqual(self.level, log.ERROR)
123
self.assertEqual(self.message, 'error')
125
def testLogHandlerLimitedLevels(self):
126
log.setDebug("testlog:%d" % log.INFO)
127
log.addLimitedLogHandler(self.handler)
129
# now try debug and log again too
130
log.setDebug("testlog:%d" % log.LOG)
132
self.tester.debug("debug")
133
self.assertEqual(self.category, 'testlog')
134
self.assertEqual(self.level, log.DEBUG)
135
self.assertEqual(self.message, 'debug')
137
self.tester.log("log")
138
self.assertEqual(self.category, 'testlog')
139
self.assertEqual(self.level, log.LOG)
140
self.assertEqual(self.message, 'log')
142
# test that we get all log messages
144
def testLogHandler(self):
145
log.setDebug("testlog:%d" % log.INFO)
146
log.addLogHandler(self.handler)
148
self.tester.log("visible")
149
self.assertEqual(self.message, 'visible')
151
self.tester.warning("also visible")
152
self.assertEqual(self.message, 'also visible')
155
class TestOwnLogHandler(TestWithHandler):
158
TestWithHandler.setUp(self)
159
self.tester = LogFunctionTester()
161
# test if our own log handler correctly mangles the message
163
def testOwnLogHandlerLimited(self):
164
log.setDebug("testlog:%d" % log.INFO)
165
log.addLogHandler(self.handler)
167
self.tester.log("visible")
168
self.assertEqual(self.message, 'override visible')
170
def testLogHandlerAssertion(self):
171
self.assertRaises(TypeError, log.addLimitedLogHandler, None)
174
class TestGetExceptionMessage(unittest.TestCase):
183
raise TypeError("I am in func1")
185
def testLevel2(self):
188
self.fail("Should not get to this point")
190
self.verifyException(e)
192
def testLevel3(self):
195
self.fail("Should not get to this point")
197
self.verifyException(e)
199
def verifyException(self, e):
200
message = log.getExceptionMessage(e)
201
self.failUnless("func1()" in message, message)
202
self.failUnless("test_log.py" in message, message)
203
self.failUnless("TypeError" in message, message)
206
class TestLogSettings(unittest.TestCase):
209
old = log.getLogSettings()
211
self.assertNotEquals(old, log.getLogSettings())
213
log.setLogSettings(old)
214
self.assertEquals(old, log.getLogSettings())
217
class TestWriteMark(TestWithHandler):
219
def testWriteMarkInDebug(self):
220
loggable = log.Loggable()
221
log.setDebug("%d" % log.DEBUG)
222
log.addLogHandler(self.handler)
224
loggable.writeMarker(marker, log.DEBUG)
225
self.assertEquals(self.message, marker)
227
def testWriteMarkInWarn(self):
228
loggable = log.Loggable()
229
log.setDebug("%d" % log.WARN)
230
log.addLogHandler(self.handler)
232
loggable.writeMarker(marker, log.WARN)
233
self.assertEquals(self.message, marker)
235
def testWriteMarkInInfo(self):
236
loggable = log.Loggable()
237
log.setDebug("%d" % log.INFO)
238
log.addLogHandler(self.handler)
240
loggable.writeMarker(marker, log.INFO)
241
self.assertEquals(self.message, marker)
243
def testWriteMarkInLog(self):
244
loggable = log.Loggable()
245
log.setDebug("%d" % log.LOG)
246
log.addLogHandler(self.handler)
248
loggable.writeMarker(marker, log.LOG)
249
self.assertEquals(self.message, marker)
251
def testWriteMarkInError(self):
252
loggable = log.Loggable()
253
log.setDebug("%d" % log.ERROR)
254
log.addLogHandler(self.handler)
256
loggable.writeMarker(marker, log.ERROR)
257
self.assertEquals(self.message, marker)
260
class TestLogNames(unittest.TestCase):
262
def testGetLevelNames(self):
263
self.assertEquals(['ERROR', 'WARN', 'FIXME', 'INFO', 'DEBUG', 'LOG'],
266
def testGetLevelCode(self):
267
self.assertEquals(1, log.getLevelInt('ERROR'))
268
self.assertEquals(2, log.getLevelInt('WARN'))
269
self.assertEquals(3, log.getLevelInt('FIXME'))
270
self.assertEquals(4, log.getLevelInt('INFO'))
271
self.assertEquals(5, log.getLevelInt('DEBUG'))
272
self.assertEquals(6, log.getLevelInt('LOG'))
274
def testGetLevelName(self):
275
self.assertEquals('ERROR', log.getLevelName(1))
276
self.assertEquals('WARN', log.getLevelName(2))
277
self.assertEquals('FIXME', log.getLevelName(3))
278
self.assertEquals('INFO', log.getLevelName(4))
279
self.assertEquals('DEBUG', log.getLevelName(5))
280
self.assertEquals('LOG', log.getLevelName(6))