6 class TestLoggerSeverity < Test::Unit::TestCase
8 logger_levels = Logger.constants
9 levels = ["WARN", "UNKNOWN", "INFO", "FATAL", "DEBUG", "ERROR"]
10 Logger::Severity.constants.each do |level|
11 assert(levels.include?(level))
12 assert(logger_levels.include?(level))
14 assert_equal(levels.size, Logger::Severity.constants.size)
19 class TestLogger < Test::Unit::TestCase
20 include Logger::Severity
23 @logger = Logger.new(nil)
27 attr_reader :label, :datetime, :pid, :severity, :progname, :msg
29 /\A(\w+), \[([^#]*)#(\d+)\]\s+(\w+) -- (\w*): ([\x0-\xff]*)/ =~ line
30 @label, @datetime, @pid, @severity, @progname, @msg = $1, $2, $3, $4, $5, $6
34 def log_add(logger, severity, msg, progname = nil, &block)
35 log(logger, :add, severity, msg, progname, &block)
38 def log(logger, msg_id, *arg, &block)
39 Log.new(log_raw(logger, msg_id, *arg, &block))
42 def log_raw(logger, msg_id, *arg, &block)
43 logdev = Tempfile.new(File.basename(__FILE__) + '.log')
44 logger.instance_eval { @logdev = Logger::LogDevice.new(logdev) }
45 logger.__send__(msg_id, *arg, &block)
53 @logger.level = UNKNOWN
54 assert_equal(UNKNOWN, @logger.level)
56 assert_equal(INFO, @logger.level)
57 @logger.sev_threshold = ERROR
58 assert_equal(ERROR, @logger.sev_threshold)
59 @logger.sev_threshold = WARN
60 assert_equal(WARN, @logger.sev_threshold)
61 assert_equal(WARN, @logger.level)
64 assert(@logger.debug?)
67 assert(!@logger.debug?)
71 assert(!@logger.info?)
73 assert(@logger.error?)
75 assert(!@logger.warn?)
76 assert(@logger.error?)
77 assert(@logger.fatal?)
79 assert(!@logger.error?)
80 assert(@logger.fatal?)
81 @logger.level = UNKNOWN
82 assert(!@logger.error?)
83 assert(!@logger.fatal?)
87 assert_nil(@logger.progname)
88 @logger.progname = "name"
89 assert_equal("name", @logger.progname)
92 def test_datetime_format
94 logger = Logger.new(dummy)
95 log = log_add(logger, INFO, "foo")
96 assert_match(/^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\s*\d+ $/, log.datetime)
97 logger.datetime_format = "%d%b%Y@%H:%M:%S"
98 log = log_add(logger, INFO, "foo")
99 assert_match(/^\d\d\w\w\w\d\d\d\d@\d\d:\d\d:\d\d$/, log.datetime)
100 logger.datetime_format = ""
101 log = log_add(logger, INFO, "foo")
102 assert_match(/^$/, log.datetime)
107 logger = Logger.new(dummy)
109 log = log(logger, :info, "foo")
110 assert_equal("foo\n", log.msg)
112 logger.formatter = proc { |severity, timestamp, progname, msg|
113 "#{severity}:#{msg}\n\n"
115 line = log_raw(logger, :info, "foo")
116 assert_equal("INFO:foo\n\n", line)
118 logger.formatter = nil
119 log = log(logger, :info, "foo")
120 assert_equal("foo\n", log.msg)
123 def o.call(severity, timestamp, progname, msg)
124 "<<#{severity}-#{msg}>>\n"
127 line = log_raw(logger, :info, "foo")
128 assert_equal("<<INFO-foo>>\n", line)
132 logger = Logger.new(STDERR)
133 assert_nil(logger.progname)
134 assert_equal(DEBUG, logger.level)
135 assert_nil(logger.datetime_format)
139 logger = Logger.new(nil)
140 logger.progname = "my_progname"
141 assert(logger.add(INFO))
142 log = log_add(logger, nil, "msg")
143 assert_equal("ANY", log.severity)
144 assert_equal("my_progname", log.progname)
146 assert(logger.log(INFO))
147 assert_nil(log_add(logger, INFO, "msg").msg)
148 log = log_add(logger, WARN, nil) { "msg" }
149 assert_equal("msg\n", log.msg)
150 log = log_add(logger, WARN, "") { "msg" }
151 assert_equal("\n", log.msg)
152 assert_equal("my_progname", log.progname)
153 log = log_add(logger, WARN, nil, "progname?")
154 assert_equal("progname?\n", log.msg)
155 assert_equal("my_progname", log.progname)
159 logger = Logger.new(nil)
160 logger.progname = "my_progname"
161 log = log(logger, :debug, "custom_progname") { "msg" }
162 assert_equal("msg\n", log.msg)
163 assert_equal("custom_progname", log.progname)
164 assert_equal("DEBUG", log.severity)
165 assert_equal("D", log.label)
167 log = log(logger, :debug) { "msg_block" }
168 assert_equal("msg_block\n", log.msg)
169 assert_equal("my_progname", log.progname)
170 log = log(logger, :debug, "msg_inline")
171 assert_equal("msg_inline\n", log.msg)
172 assert_equal("my_progname", log.progname)
174 log = log(logger, :info, "custom_progname") { "msg" }
175 assert_equal("msg\n", log.msg)
176 assert_equal("custom_progname", log.progname)
177 assert_equal("INFO", log.severity)
178 assert_equal("I", log.label)
180 log = log(logger, :warn, "custom_progname") { "msg" }
181 assert_equal("msg\n", log.msg)
182 assert_equal("custom_progname", log.progname)
183 assert_equal("WARN", log.severity)
184 assert_equal("W", log.label)
186 log = log(logger, :error, "custom_progname") { "msg" }
187 assert_equal("msg\n", log.msg)
188 assert_equal("custom_progname", log.progname)
189 assert_equal("ERROR", log.severity)
190 assert_equal("E", log.label)
192 log = log(logger, :fatal, "custom_progname") { "msg" }
193 assert_equal("msg\n", log.msg)
194 assert_equal("custom_progname", log.progname)
195 assert_equal("FATAL", log.severity)
196 assert_equal("F", log.label)
198 log = log(logger, :unknown, "custom_progname") { "msg" }
199 assert_equal("msg\n", log.msg)
200 assert_equal("custom_progname", log.progname)
201 assert_equal("ANY", log.severity)
202 assert_equal("A", log.label)
208 logger = Logger.new(w)
214 class MyError < StandardError
224 logger = Logger.new(nil)
225 log = log_add(logger, INFO, "msg\n")
226 assert_equal("msg\n\n", log.msg)
228 raise MyError.new("excn")
230 log = log_add(logger, INFO, e)
231 assert_match(/^excn \(TestLogger::MyError\)/, log.msg)
232 # expects backtrace is dumped across multi lines. 10 might be changed.
233 assert(log.msg.split(/\n/).size >= 10)
235 log = log_add(logger, INFO, MyMsg.new)
236 assert_equal("my_msg\n", log.msg)
241 logger = Logger.new(w)
243 read_ready, = IO.select([r], nil, nil, 0.1)
247 assert_equal("msg", msg)
250 logger = Logger.new(w)
252 read_ready, = IO.select([r], nil, nil, 0.1)
256 assert_equal("msg2\n\n", msg)
260 class TestLogDevice < Test::Unit::TestCase
262 Logger::LogDevice.new(log)
267 assert_equal(STDERR, logdev.dev)
268 assert_nil(logdev.filename)
269 assert_raises(TypeError) do
273 filename = __FILE__ + ".#{$$}"
276 assert(File.exist?(filename))
277 assert(logdev.dev.sync)
278 assert_equal(filename, logdev.filename)
281 File.unlink(filename)
288 logdev.write("msg2\n\n")
289 read_ready, = IO.select([r], nil, nil, 0.1)
293 assert_equal("msg2\n\n", msg)
299 logdev.write("msg2\n\n")
300 read_ready, = IO.select([r], nil, nil, 0.1)
307 def test_shifting_size
308 logfile = File.basename(__FILE__) + '_1.log'
309 logfile0 = logfile + '.0'
310 logfile1 = logfile + '.1'
311 logfile2 = logfile + '.2'
312 logfile3 = logfile + '.3'
313 File.unlink(logfile) if File.exist?(logfile)
314 File.unlink(logfile0) if File.exist?(logfile0)
315 File.unlink(logfile1) if File.exist?(logfile1)
316 File.unlink(logfile2) if File.exist?(logfile2)
317 logger = Logger.new(logfile, 4, 100)
318 logger.error("0" * 15)
319 assert(File.exist?(logfile))
320 assert(!File.exist?(logfile0))
321 logger.error("0" * 15)
322 assert(File.exist?(logfile0))
323 assert(!File.exist?(logfile1))
324 logger.error("0" * 15)
325 assert(File.exist?(logfile1))
326 assert(!File.exist?(logfile2))
327 logger.error("0" * 15)
328 assert(File.exist?(logfile2))
329 assert(!File.exist?(logfile3))
330 logger.error("0" * 15)
331 assert(!File.exist?(logfile3))
332 logger.error("0" * 15)
333 assert(!File.exist?(logfile3))
336 File.unlink(logfile0)
337 File.unlink(logfile1)
338 File.unlink(logfile2)
340 logfile = File.basename(__FILE__) + '_2.log'
341 logfile0 = logfile + '.0'
342 logfile1 = logfile + '.1'
343 logfile2 = logfile + '.2'
344 logfile3 = logfile + '.3'
345 logger = Logger.new(logfile, 4, 150)
346 logger.error("0" * 15)
347 assert(File.exist?(logfile))
348 assert(!File.exist?(logfile0))
349 logger.error("0" * 15)
350 assert(!File.exist?(logfile0))
351 logger.error("0" * 15)
352 assert(File.exist?(logfile0))
353 assert(!File.exist?(logfile1))
354 logger.error("0" * 15)
355 assert(!File.exist?(logfile1))
356 logger.error("0" * 15)
357 assert(File.exist?(logfile1))
358 assert(!File.exist?(logfile2))
359 logger.error("0" * 15)
360 assert(!File.exist?(logfile2))
361 logger.error("0" * 15)
362 assert(File.exist?(logfile2))
363 assert(!File.exist?(logfile3))
364 logger.error("0" * 15)
365 assert(!File.exist?(logfile3))
366 logger.error("0" * 15)
367 assert(!File.exist?(logfile3))
368 logger.error("0" * 15)
369 assert(!File.exist?(logfile3))
372 File.unlink(logfile0)
373 File.unlink(logfile1)
374 File.unlink(logfile2)