/vendor/gems/logging-1.6.1/test/appenders/test_syslog.rb

https://github.com/ryanmuller/folders2web · Ruby · 194 lines · 147 code · 43 blank · 4 comment · 3 complexity · 42f4ecfca1ab5f172c19c86697a11e64 MD5 · raw file

  1. require File.expand_path('../setup', File.dirname(__FILE__))
  2. if HAVE_SYSLOG
  3. module TestLogging
  4. module TestAppenders
  5. class TestSyslog < Test::Unit::TestCase
  6. include LoggingTestCase
  7. include ::Syslog::Constants
  8. def setup
  9. super
  10. Logging.init
  11. @levels = Logging::LEVELS
  12. @logopt = defined?(::Syslog::LOG_NDELAY) ?
  13. (::Syslog::LOG_PERROR | ::Syslog::LOG_NDELAY) :
  14. (::Syslog::LOG_PERROR)
  15. end
  16. def test_append
  17. return if RUBY_PLATFORM =~ %r/cygwin|java/i
  18. stderr = IO::pipe
  19. pid = fork do
  20. stderr[0].close
  21. STDERR.reopen(stderr[1])
  22. stderr[1].close
  23. appender = create_syslog
  24. event = Logging::LogEvent.new('TestLogger', @levels['info'],
  25. [1, 2, 3, 4], false)
  26. appender.append event
  27. event.level = @levels['debug']
  28. event.data = 'the big log message'
  29. appender.append event
  30. appender.level = :warn
  31. event.level = @levels['info']
  32. event.data = 'this message should not get logged'
  33. appender.append event
  34. event.level = @levels['warn']
  35. event.data = 'this is your last warning'
  36. appender.append event
  37. exit!
  38. end
  39. stderr[1].close
  40. Process.waitpid(pid)
  41. assert_equal("syslog_test: INFO TestLogger : <Array> #{[1,2,3,4]}\n",
  42. stderr[0].gets)
  43. assert_equal("syslog_test: DEBUG TestLogger : the big log message\n",
  44. stderr[0].gets)
  45. assert_equal("syslog_test: WARN TestLogger : this is your last warning\n",
  46. stderr[0].gets)
  47. end
  48. def test_append_error
  49. appender = create_syslog
  50. appender.close false
  51. event = Logging::LogEvent.new('TestLogger', @levels['warn'],
  52. [1, 2, 3, 4], false)
  53. assert_raise(RuntimeError) {appender.append event}
  54. assert_equal true, appender.closed?
  55. end
  56. def test_close
  57. appender = create_syslog
  58. assert_equal false, appender.closed?
  59. appender.close false
  60. assert_equal true, appender.closed?
  61. end
  62. def test_concat
  63. return if RUBY_PLATFORM =~ %r/cygwin|java/i
  64. stderr = IO::pipe
  65. pid = fork do
  66. stderr[0].close
  67. STDERR.reopen(stderr[1])
  68. stderr[1].close
  69. appender = create_syslog
  70. appender << 'this is a test message'
  71. appender << 'this is another message'
  72. appender << 'some other line'
  73. exit!
  74. end
  75. stderr[1].close
  76. Process.waitpid(pid)
  77. assert_equal("syslog_test: this is a test message\n", stderr[0].gets)
  78. assert_equal("syslog_test: this is another message\n", stderr[0].gets)
  79. assert_equal("syslog_test: some other line\n", stderr[0].gets)
  80. end
  81. def test_concat_error
  82. appender = create_syslog
  83. appender.close false
  84. assert_raise(RuntimeError) {appender << 'oopsy'}
  85. assert_equal true, appender.closed?
  86. end
  87. def test_map_eq
  88. appender = create_syslog
  89. assert_equal(
  90. [LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERR, LOG_CRIT],
  91. get_map_from(appender)
  92. )
  93. appender.map = {
  94. :debug => LOG_DEBUG,
  95. :info => 'LOG_NOTICE',
  96. :warn => :LOG_WARNING,
  97. :error => 'log_err',
  98. :fatal => :log_alert
  99. }
  100. assert_equal(
  101. [LOG_DEBUG, LOG_NOTICE, LOG_WARNING, LOG_ERR, LOG_ALERT],
  102. get_map_from(appender)
  103. )
  104. end
  105. def test_map_eq_error
  106. appender = create_syslog
  107. # Object is not a valid syslog level
  108. assert_raise(ArgumentError) do
  109. appender.map = {:debug => Object}
  110. end
  111. # there is no syslog level named "info"
  112. # it should be "log_info"
  113. assert_raise(NameError) do
  114. appender.map = {:info => 'lg_info'}
  115. end
  116. end
  117. def test_initialize_map
  118. appender = Logging.appenders.syslog(
  119. 'syslog_test',
  120. :logopt => @logopt,
  121. :map => {
  122. :debug => :log_debug,
  123. :info => :log_info,
  124. :warn => :log_warning,
  125. :error => :log_err,
  126. :fatal => :log_alert
  127. }
  128. )
  129. assert_equal(
  130. [LOG_DEBUG, LOG_INFO, LOG_WARNING, LOG_ERR, LOG_ALERT],
  131. get_map_from(appender)
  132. )
  133. end
  134. private
  135. def create_syslog
  136. layout = Logging.layouts.pattern(:pattern => '%5l %c : %m')
  137. Logging.appenders.syslog(
  138. 'syslog_test',
  139. :logopt => @logopt,
  140. :facility => ::Syslog::LOG_USER,
  141. :layout => layout
  142. )
  143. end
  144. def get_map_from( syslog )
  145. syslog.instance_variable_get :@map
  146. end
  147. end # class TestSyslog
  148. end # module TestAppenders
  149. end # module TestLogging
  150. end # HAVE_SYSLOG
  151. # EOF