/ruby/test/test_syslog.rb

https://github.com/AsherBond/MondocosmOS-Dependencies · Ruby · 185 lines · 131 code · 40 blank · 14 comment · 5 complexity · 512c9c08eed89972eb0e544374397449 MD5 · raw file

  1. #!/usr/bin/env ruby
  2. # $RoughId: test.rb,v 1.9 2002/02/25 08:20:14 knu Exp $
  3. # $Id: test_syslog.rb 32859 2011-08-05 08:26:42Z knu $
  4. # Please only run this test on machines reasonable for testing.
  5. # If in doubt, ask your admin.
  6. require 'test/unit'
  7. begin
  8. require 'syslog'
  9. rescue LoadError
  10. # suppress error messages.
  11. end
  12. class TestSyslog < Test::Unit::TestCase
  13. def test_new
  14. assert_raises(NoMethodError) {
  15. Syslog.new
  16. }
  17. end
  18. def test_instance
  19. sl1 = Syslog.instance
  20. sl2 = Syslog.open
  21. sl3 = Syslog.instance
  22. assert_equal(Syslog, sl1)
  23. assert_equal(Syslog, sl2)
  24. assert_equal(Syslog, sl3)
  25. ensure
  26. Syslog.close if Syslog.opened?
  27. end
  28. def test_open
  29. # default parameters
  30. Syslog.open
  31. assert_equal($0, Syslog.ident)
  32. assert_equal(Syslog::LOG_PID | Syslog::LOG_CONS, Syslog.options)
  33. assert_equal(Syslog::LOG_USER, Syslog.facility)
  34. # open without close
  35. assert_raises(RuntimeError) {
  36. Syslog.open
  37. }
  38. Syslog.close
  39. # given parameters
  40. options = Syslog::LOG_NDELAY | Syslog::LOG_PID
  41. Syslog.open("foo", options, Syslog::LOG_DAEMON)
  42. assert_equal('foo', Syslog.ident)
  43. assert_equal(options, Syslog.options)
  44. assert_equal(Syslog::LOG_DAEMON, Syslog.facility)
  45. Syslog.close
  46. # default parameters again (after close)
  47. Syslog.open
  48. Syslog.close
  49. assert_equal(nil, Syslog.ident)
  50. assert_equal(nil, Syslog.options)
  51. assert_equal(nil, Syslog.facility)
  52. # block
  53. param = nil
  54. Syslog.open { |syslog|
  55. param = syslog
  56. }
  57. assert_equal(Syslog, param)
  58. ensure
  59. Syslog.close if Syslog.opened?
  60. end
  61. def test_opened?
  62. assert_equal(false, Syslog.opened?)
  63. Syslog.open
  64. assert_equal(true, Syslog.opened?)
  65. Syslog.close
  66. assert_equal(false, Syslog.opened?)
  67. Syslog.open {
  68. assert_equal(true, Syslog.opened?)
  69. }
  70. assert_equal(false, Syslog.opened?)
  71. end
  72. def test_close
  73. assert_raises(RuntimeError) {
  74. Syslog.close
  75. }
  76. end
  77. def test_mask
  78. assert_equal(nil, Syslog.mask)
  79. Syslog.open
  80. orig = Syslog.mask
  81. Syslog.mask = Syslog.LOG_UPTO(Syslog::LOG_ERR)
  82. assert_equal(Syslog.LOG_UPTO(Syslog::LOG_ERR), Syslog.mask)
  83. Syslog.mask = Syslog.LOG_MASK(Syslog::LOG_CRIT)
  84. assert_equal(Syslog.LOG_MASK(Syslog::LOG_CRIT), Syslog.mask)
  85. Syslog.mask = orig
  86. ensure
  87. Syslog.close if Syslog.opened?
  88. end
  89. def syslog_line_regex(ident, message)
  90. /(?:^| )#{Regexp.quote(ident)}(?:\[([1-9][0-9]*)\])?(?: |[: ].* )#{Regexp.quote(message)}$/
  91. end
  92. def test_log
  93. stderr = IO::pipe
  94. pid = fork {
  95. stderr[0].close
  96. STDERR.reopen(stderr[1])
  97. stderr[1].close
  98. options = Syslog::LOG_PERROR | Syslog::LOG_NDELAY
  99. Syslog.open("syslog_test", options) { |sl|
  100. sl.log(Syslog::LOG_NOTICE, "test1 - hello, %s!", "world")
  101. sl.notice("test1 - hello, %s!", "world")
  102. }
  103. Syslog.open("syslog_test", options | Syslog::LOG_PID) { |sl|
  104. sl.log(Syslog::LOG_CRIT, "test2 - pid")
  105. sl.crit("test2 - pid")
  106. }
  107. exit!
  108. }
  109. stderr[1].close
  110. Process.waitpid(pid)
  111. # LOG_PERROR is not implemented on Cygwin or Solaris. Only test
  112. # these on systems that define it.
  113. return unless Syslog.const_defined?(:LOG_PERROR)
  114. 2.times {
  115. re = syslog_line_regex("syslog_test", "test1 - hello, world!")
  116. line = stderr[0].gets
  117. m = re.match(line)
  118. assert_not_nil(m)
  119. if m[1]
  120. # pid is written regardless of LOG_PID on OS X 10.7+
  121. assert_equal(pid, m[1].to_i)
  122. end
  123. }
  124. 2.times {
  125. re = syslog_line_regex("syslog_test", "test2 - pid")
  126. line = stderr[0].gets
  127. m = re.match(line)
  128. assert_not_nil(m)
  129. assert_not_nil(m[1])
  130. assert_equal(pid, m[1].to_i)
  131. }
  132. end
  133. def test_inspect
  134. Syslog.open { |sl|
  135. assert_equal(format('<#%s: opened=true, ident="%s", options=%d, facility=%d, mask=%d>',
  136. Syslog,
  137. sl.ident,
  138. sl.options,
  139. sl.facility,
  140. sl.mask),
  141. sl.inspect)
  142. }
  143. assert_equal(format('<#%s: opened=false>', Syslog), Syslog.inspect)
  144. end
  145. end if defined?(Syslog)