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.
22
from twisted.trial import unittest
26
__version__ = "$Rev: 7162 $"
29
class LogTester(log.Loggable):
30
logCategory = 'testlog'
33
class LogFunctionTester(log.Loggable):
35
def logFunction(self, format, *args):
36
return (("override " + format), ) + args[1:]
39
class TestLog(unittest.TestCase):
42
self.category = self.level = self.message = None
43
self.tester = LogTester()
44
# we want to remove the default handler so it doesn't show up stuff
47
# just test for parsing semi- or non-valid FLU_DEBUG variables
49
def testSetDebug(self):
54
# test for adding a log handler
56
def handler(self, level, object, category, file, line, message):
59
self.category = category
62
self.message = message
64
def testLimitInvisible(self):
65
log.setDebug("testlog:3")
66
log.addLimitedLogHandler(self.handler)
68
# log 2 we shouldn't get
69
self.tester.log("not visible")
70
assert not self.category
72
assert not self.message
74
self.tester.debug("not visible")
75
assert not self.category
77
assert not self.message
79
def testLimitedVisible(self):
80
log.setDebug("testlog:3")
81
log.addLimitedLogHandler(self.handler)
84
self.tester.info("visible")
85
assert self.category == 'testlog'
86
assert self.level == log.INFO
87
assert self.message == 'visible'
89
self.tester.warning("also visible")
90
assert self.category == 'testlog'
91
assert self.level == log.WARN
92
assert self.message == 'also visible'
94
def testFormatStrings(self):
95
log.setDebug("testlog:3")
96
log.addLimitedLogHandler(self.handler)
98
self.tester.info("%d %s", 42, 'the answer')
99
assert self.category == 'testlog'
100
assert self.level == log.INFO
101
assert self.message == '42 the answer'
103
def testLimitedError(self):
104
log.setDebug("testlog:3")
105
log.addLimitedLogHandler(self.handler)
107
self.assertRaises(SystemExit, self.tester.error, "error")
108
assert self.category == 'testlog'
109
assert self.level == log.ERROR
110
assert self.message == 'error'
112
def testLogHandlerLimitedLevels(self):
113
log.setDebug("testlog:3")
114
log.addLimitedLogHandler(self.handler)
116
# now try debug and log again too
117
log.setDebug("testlog:5")
119
self.tester.debug("debug")
120
assert self.category == 'testlog'
121
assert self.level == log.DEBUG
122
assert self.message == 'debug'
124
self.tester.log("log")
125
assert self.category == 'testlog'
126
assert self.level == log.LOG
127
assert self.message == 'log'
129
# test that we get all log messages
131
def testLogHandler(self):
132
log.setDebug("testlog:3")
133
log.addLogHandler(self.handler)
135
self.tester.log("visible")
136
assert self.message == 'visible'
138
self.tester.warning("also visible")
139
assert self.message == 'also visible'
142
class TestOwnLogHandler(unittest.TestCase):
145
self.category = self.level = self.message = None
146
self.tester = LogFunctionTester()
148
def handler(self, level, object, category, file, line, message):
151
self.category = category
154
self.message = message
156
# test if our own log handler correctly mangles the message
158
def testOwnLogHandlerLimited(self):
159
log.setDebug("testlog:3")
160
log.addLogHandler(self.handler)
162
self.tester.log("visible")
163
assert self.message == 'override visible'
165
def testLogHandlerAssertion(self):
166
self.assertRaises(TypeError, log.addLimitedLogHandler, None)
169
class TestGetExceptionMessage(unittest.TestCase):
178
raise TypeError("I am in func1")
180
def testLevel2(self):
185
self.verifyException(e)
187
def testLevel3(self):
192
self.verifyException(e)
194
def verifyException(self, e):
195
message = log.getExceptionMessage(e)
196
self.failUnless("func1()" in message)
197
self.failUnless("test_log.py" in message)
198
self.failUnless("TypeError" in message)
201
class TestLogSettings(unittest.TestCase):
204
old = log.getLogSettings()
206
self.assertNotEquals(old, log.getLogSettings())
208
log.setLogSettings(old)
209
self.assertEquals(old, log.getLogSettings())
212
class TestWriteMark(unittest.TestCase):
214
def handler(self, level, object, category, file, line, message):
217
self.category = category
220
self.message = message
222
def testWriteMarkInDebug(self):
223
loggable = log.Loggable()
225
log.addLogHandler(self.handler)
227
loggable.writeMarker(marker, log.DEBUG)
228
self.assertEquals(self.message, marker)
230
def testWriteMarkInWarn(self):
231
loggable = log.Loggable()
233
log.addLogHandler(self.handler)
235
loggable.writeMarker(marker, log.WARN)
236
self.assertEquals(self.message, marker)
238
def testWriteMarkInInfo(self):
239
loggable = log.Loggable()
241
log.addLogHandler(self.handler)
243
loggable.writeMarker(marker, log.INFO)
244
self.assertEquals(self.message, marker)
246
def testWriteMarkInLog(self):
247
loggable = log.Loggable()
249
log.addLogHandler(self.handler)
251
loggable.writeMarker(marker, log.LOG)
252
self.assertEquals(self.message, marker)
254
def testWriteMarkInError(self):
255
loggable = log.Loggable()
257
log.addLogHandler(self.handler)
259
self.assertRaises(SystemExit, loggable.writeMarker, marker, log.ERROR)
260
self.assertEquals(self.message, marker)
263
class TestLogNames(unittest.TestCase):
265
def testGetLevelNames(self):
266
self.assertEquals(['ERROR', 'WARN', 'INFO', 'DEBUG', 'LOG'],
269
def testGetLevelCode(self):
270
self.assertEquals(1, log.getLevelInt('ERROR'))
271
self.assertEquals(2, log.getLevelInt('WARN'))
272
self.assertEquals(3, log.getLevelInt('INFO'))
273
self.assertEquals(4, log.getLevelInt('DEBUG'))
274
self.assertEquals(5, log.getLevelInt('LOG'))
276
def testGetLevelName(self):
277
self.assertEquals('ERROR', log.getLevelName(1))
278
self.assertEquals('WARN', log.getLevelName(2))
279
self.assertEquals('INFO', log.getLevelName(3))
280
self.assertEquals('DEBUG', log.getLevelName(4))
281
self.assertEquals('LOG', log.getLevelName(5))
283
if __name__ == '__main__':