PageRenderTime 41ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/test/externals/ruby1.8/logger/test_logger.rb

https://bitbucket.org/nicksieger/jruby
Ruby | 380 lines | 338 code | 29 blank | 13 comment | 4 complexity | c47621f47c8321d5b7fc559238a5cf4a MD5 | raw file
Possible License(s): GPL-3.0, JSON
  1. require 'test/unit'
  2. require 'logger'
  3. require 'tempfile'
  4. class TestLoggerSeverity < Test::Unit::TestCase
  5. def test_enum
  6. logger_levels = Logger.constants
  7. levels = ["WARN", "UNKNOWN", "INFO", "FATAL", "DEBUG", "ERROR"]
  8. Logger::Severity.constants.each do |level|
  9. assert(levels.include?(level))
  10. assert(logger_levels.include?(level))
  11. end
  12. assert_equal(levels.size, Logger::Severity.constants.size)
  13. end
  14. end
  15. class TestLogger < Test::Unit::TestCase
  16. include Logger::Severity
  17. def setup
  18. @logger = Logger.new(nil)
  19. end
  20. def test_const_progname
  21. assert %r!\Alogger\.rb/\S+\z! === Logger::ProgName
  22. end
  23. class Log
  24. attr_reader :label, :datetime, :pid, :severity, :progname, :msg
  25. def initialize(line)
  26. /\A(\w+), \[([^#]*)#(\d+)\]\s+(\w+) -- (\w*): ([\x0-\xff]*)/ =~ line
  27. @label, @datetime, @pid, @severity, @progname, @msg = $1, $2, $3, $4, $5, $6
  28. end
  29. end
  30. def log_add(logger, severity, msg, progname = nil, &block)
  31. log(logger, :add, severity, msg, progname, &block)
  32. end
  33. def log(logger, msg_id, *arg, &block)
  34. Log.new(log_raw(logger, msg_id, *arg, &block))
  35. end
  36. def log_raw(logger, msg_id, *arg, &block)
  37. logdev = Tempfile.new(File.basename(__FILE__) + '.log')
  38. logger.instance_eval { @logdev = Logger::LogDevice.new(logdev) }
  39. logger.__send__(msg_id, *arg, &block)
  40. logdev.open
  41. msg = logdev.read
  42. logdev.close
  43. msg
  44. end
  45. def test_level
  46. @logger.level = UNKNOWN
  47. assert_equal(UNKNOWN, @logger.level)
  48. @logger.level = INFO
  49. assert_equal(INFO, @logger.level)
  50. @logger.sev_threshold = ERROR
  51. assert_equal(ERROR, @logger.sev_threshold)
  52. @logger.sev_threshold = WARN
  53. assert_equal(WARN, @logger.sev_threshold)
  54. assert_equal(WARN, @logger.level)
  55. @logger.level = DEBUG
  56. assert(@logger.debug?)
  57. assert(@logger.info?)
  58. @logger.level = INFO
  59. assert(!@logger.debug?)
  60. assert(@logger.info?)
  61. assert(@logger.warn?)
  62. @logger.level = WARN
  63. assert(!@logger.info?)
  64. assert(@logger.warn?)
  65. assert(@logger.error?)
  66. @logger.level = ERROR
  67. assert(!@logger.warn?)
  68. assert(@logger.error?)
  69. assert(@logger.fatal?)
  70. @logger.level = FATAL
  71. assert(!@logger.error?)
  72. assert(@logger.fatal?)
  73. @logger.level = UNKNOWN
  74. assert(!@logger.error?)
  75. assert(!@logger.fatal?)
  76. end
  77. def test_progname
  78. assert_nil(@logger.progname)
  79. @logger.progname = "name"
  80. assert_equal("name", @logger.progname)
  81. end
  82. def test_datetime_format
  83. dummy = STDERR
  84. logger = Logger.new(dummy)
  85. log = log_add(logger, INFO, "foo")
  86. assert_match(/^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\s*\d+ $/, log.datetime)
  87. logger.datetime_format = "%d%b%Y@%H:%M:%S"
  88. log = log_add(logger, INFO, "foo")
  89. assert_match(/^\d\d\w\w\w\d\d\d\d@\d\d:\d\d:\d\d$/, log.datetime)
  90. logger.datetime_format = ""
  91. log = log_add(logger, INFO, "foo")
  92. assert_match(/^$/, log.datetime)
  93. end
  94. def test_formatter
  95. dummy = STDERR
  96. logger = Logger.new(dummy)
  97. # default
  98. log = log(logger, :info, "foo")
  99. assert_equal("foo\n", log.msg)
  100. # config
  101. logger.formatter = proc { |severity, timestamp, progname, msg|
  102. "#{severity}:#{msg}\n\n"
  103. }
  104. line = log_raw(logger, :info, "foo")
  105. assert_equal("INFO:foo\n\n", line)
  106. # recover
  107. logger.formatter = nil
  108. log = log(logger, :info, "foo")
  109. assert_equal("foo\n", log.msg)
  110. # again
  111. o = Object.new
  112. def o.call(severity, timestamp, progname, msg)
  113. "<<#{severity}-#{msg}>>\n"
  114. end
  115. logger.formatter = o
  116. line = log_raw(logger, :info, "foo")
  117. assert_equal("<<INFO-foo>>\n", line)
  118. end
  119. def test_initialize
  120. logger = Logger.new(STDERR)
  121. assert_nil(logger.progname)
  122. assert_equal(DEBUG, logger.level)
  123. assert_nil(logger.datetime_format)
  124. end
  125. def test_add
  126. logger = Logger.new(nil)
  127. logger.progname = "my_progname"
  128. assert(logger.add(INFO))
  129. log = log_add(logger, nil, "msg")
  130. assert_equal("ANY", log.severity)
  131. assert_equal("my_progname", log.progname)
  132. logger.level = WARN
  133. assert(logger.log(INFO))
  134. assert_nil(log_add(logger, INFO, "msg").msg)
  135. log = log_add(logger, WARN, nil) { "msg" }
  136. assert_equal("msg\n", log.msg)
  137. log = log_add(logger, WARN, "") { "msg" }
  138. assert_equal("\n", log.msg)
  139. assert_equal("my_progname", log.progname)
  140. log = log_add(logger, WARN, nil, "progname?")
  141. assert_equal("progname?\n", log.msg)
  142. assert_equal("my_progname", log.progname)
  143. end
  144. def test_level_log
  145. logger = Logger.new(nil)
  146. logger.progname = "my_progname"
  147. log = log(logger, :debug, "custom_progname") { "msg" }
  148. assert_equal("msg\n", log.msg)
  149. assert_equal("custom_progname", log.progname)
  150. assert_equal("DEBUG", log.severity)
  151. assert_equal("D", log.label)
  152. #
  153. log = log(logger, :debug) { "msg_block" }
  154. assert_equal("msg_block\n", log.msg)
  155. assert_equal("my_progname", log.progname)
  156. log = log(logger, :debug, "msg_inline")
  157. assert_equal("msg_inline\n", log.msg)
  158. assert_equal("my_progname", log.progname)
  159. #
  160. log = log(logger, :info, "custom_progname") { "msg" }
  161. assert_equal("msg\n", log.msg)
  162. assert_equal("custom_progname", log.progname)
  163. assert_equal("INFO", log.severity)
  164. assert_equal("I", log.label)
  165. #
  166. log = log(logger, :warn, "custom_progname") { "msg" }
  167. assert_equal("msg\n", log.msg)
  168. assert_equal("custom_progname", log.progname)
  169. assert_equal("WARN", log.severity)
  170. assert_equal("W", log.label)
  171. #
  172. log = log(logger, :error, "custom_progname") { "msg" }
  173. assert_equal("msg\n", log.msg)
  174. assert_equal("custom_progname", log.progname)
  175. assert_equal("ERROR", log.severity)
  176. assert_equal("E", log.label)
  177. #
  178. log = log(logger, :fatal, "custom_progname") { "msg" }
  179. assert_equal("msg\n", log.msg)
  180. assert_equal("custom_progname", log.progname)
  181. assert_equal("FATAL", log.severity)
  182. assert_equal("F", log.label)
  183. #
  184. log = log(logger, :unknown, "custom_progname") { "msg" }
  185. assert_equal("msg\n", log.msg)
  186. assert_equal("custom_progname", log.progname)
  187. assert_equal("ANY", log.severity)
  188. assert_equal("A", log.label)
  189. end
  190. def test_close
  191. r, w = IO.pipe
  192. assert(!w.closed?)
  193. logger = Logger.new(w)
  194. logger.close
  195. assert(w.closed?)
  196. r.close
  197. end
  198. class MyError < StandardError
  199. end
  200. class MyMsg
  201. def inspect
  202. "my_msg"
  203. end
  204. end
  205. def test_format
  206. logger = Logger.new(nil)
  207. log = log_add(logger, INFO, "msg\n")
  208. assert_equal("msg\n\n", log.msg)
  209. begin
  210. raise MyError.new("excn")
  211. rescue MyError => e
  212. log = log_add(logger, INFO, e)
  213. assert_match(/^excn \(TestLogger::MyError\)/, log.msg)
  214. # expects backtrace is dumped across multi lines. 10 might be changed.
  215. assert(log.msg.split(/\n/).size >= 10)
  216. end
  217. log = log_add(logger, INFO, MyMsg.new)
  218. assert_equal("my_msg\n", log.msg)
  219. end
  220. def test_lshift
  221. r, w = IO.pipe
  222. logger = Logger.new(w)
  223. logger << "msg"
  224. read_ready, = IO.select([r], nil, nil, 0.1)
  225. w.close
  226. msg = r.read
  227. r.close
  228. assert_equal("msg", msg)
  229. #
  230. r, w = IO.pipe
  231. logger = Logger.new(w)
  232. logger << "msg2\n\n"
  233. read_ready, = IO.select([r], nil, nil, 0.1)
  234. w.close
  235. msg = r.read
  236. r.close
  237. assert_equal("msg2\n\n", msg)
  238. end
  239. end
  240. class TestLogDevice < Test::Unit::TestCase
  241. def d(log)
  242. Logger::LogDevice.new(log)
  243. end
  244. def test_initialize
  245. logdev = d(STDERR)
  246. assert_equal(STDERR, logdev.dev)
  247. assert_nil(logdev.filename)
  248. assert_raises(TypeError) do
  249. d(nil)
  250. end
  251. #
  252. filename = __FILE__ + ".#{$$}"
  253. begin
  254. logdev = d(filename)
  255. assert(File.exist?(filename))
  256. assert(logdev.dev.sync)
  257. assert_equal(filename, logdev.filename)
  258. ensure
  259. logdev.close
  260. File.unlink(filename)
  261. end
  262. end
  263. def test_write
  264. r, w = IO.pipe
  265. logdev = d(w)
  266. logdev.write("msg2\n\n")
  267. read_ready, = IO.select([r], nil, nil, 0.1)
  268. w.close
  269. msg = r.read
  270. r.close
  271. assert_equal("msg2\n\n", msg)
  272. end
  273. def test_close
  274. r, w = IO.pipe
  275. logdev = d(w)
  276. logdev.write("msg2\n\n")
  277. read_ready, = IO.select([r], nil, nil, 0.1)
  278. assert(!w.closed?)
  279. logdev.close
  280. assert(w.closed?)
  281. r.close
  282. end
  283. def test_shifting_size
  284. logfile = File.basename(__FILE__) + '_1.log'
  285. logfile0 = logfile + '.0'
  286. logfile1 = logfile + '.1'
  287. logfile2 = logfile + '.2'
  288. logfile3 = logfile + '.3'
  289. File.unlink(logfile) if File.exist?(logfile)
  290. File.unlink(logfile0) if File.exist?(logfile0)
  291. File.unlink(logfile1) if File.exist?(logfile1)
  292. File.unlink(logfile2) if File.exist?(logfile2)
  293. logger = Logger.new(logfile, 4, 100)
  294. logger.error("0" * 15)
  295. assert(File.exist?(logfile))
  296. assert(!File.exist?(logfile0))
  297. logger.error("0" * 15)
  298. assert(File.exist?(logfile0))
  299. assert(!File.exist?(logfile1))
  300. logger.error("0" * 15)
  301. assert(File.exist?(logfile1))
  302. assert(!File.exist?(logfile2))
  303. logger.error("0" * 15)
  304. assert(File.exist?(logfile2))
  305. assert(!File.exist?(logfile3))
  306. logger.error("0" * 15)
  307. assert(!File.exist?(logfile3))
  308. logger.error("0" * 15)
  309. assert(!File.exist?(logfile3))
  310. logger.close
  311. File.unlink(logfile)
  312. File.unlink(logfile0)
  313. File.unlink(logfile1)
  314. File.unlink(logfile2)
  315. logfile = File.basename(__FILE__) + '_2.log'
  316. logfile0 = logfile + '.0'
  317. logfile1 = logfile + '.1'
  318. logfile2 = logfile + '.2'
  319. logfile3 = logfile + '.3'
  320. logger = Logger.new(logfile, 4, 150)
  321. logger.error("0" * 15)
  322. assert(File.exist?(logfile))
  323. assert(!File.exist?(logfile0))
  324. logger.error("0" * 15)
  325. assert(!File.exist?(logfile0))
  326. logger.error("0" * 15)
  327. assert(File.exist?(logfile0))
  328. assert(!File.exist?(logfile1))
  329. logger.error("0" * 15)
  330. assert(!File.exist?(logfile1))
  331. logger.error("0" * 15)
  332. assert(File.exist?(logfile1))
  333. assert(!File.exist?(logfile2))
  334. logger.error("0" * 15)
  335. assert(!File.exist?(logfile2))
  336. logger.error("0" * 15)
  337. assert(File.exist?(logfile2))
  338. assert(!File.exist?(logfile3))
  339. logger.error("0" * 15)
  340. assert(!File.exist?(logfile3))
  341. logger.error("0" * 15)
  342. assert(!File.exist?(logfile3))
  343. logger.error("0" * 15)
  344. assert(!File.exist?(logfile3))
  345. logger.close
  346. File.unlink(logfile)
  347. File.unlink(logfile0)
  348. File.unlink(logfile1)
  349. File.unlink(logfile2)
  350. end
  351. end