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