summaryrefslogtreecommitdiff
path: root/jni/ruby/test/test_syslog.rb
diff options
context:
space:
mode:
Diffstat (limited to 'jni/ruby/test/test_syslog.rb')
-rw-r--r--jni/ruby/test/test_syslog.rb189
1 files changed, 189 insertions, 0 deletions
diff --git a/jni/ruby/test/test_syslog.rb b/jni/ruby/test/test_syslog.rb
new file mode 100644
index 0000000..3164d07
--- /dev/null
+++ b/jni/ruby/test/test_syslog.rb
@@ -0,0 +1,189 @@
+# Please only run this test on machines reasonable for testing.
+# If in doubt, ask your admin.
+
+require 'test/unit'
+
+begin
+ require 'syslog'
+rescue LoadError
+ # suppress error messages.
+end
+
+class TestSyslog < Test::Unit::TestCase
+ def test_new
+ assert_raises(NoMethodError) {
+ Syslog.new
+ }
+ end
+
+ def test_instance
+ sl1 = Syslog.instance
+ sl2 = Syslog.open
+ sl3 = Syslog.instance
+
+ assert_equal(Syslog, sl1)
+ assert_equal(Syslog, sl2)
+ assert_equal(Syslog, sl3)
+ ensure
+ Syslog.close if Syslog.opened?
+ end
+
+ def test_open
+ # default parameters
+ Syslog.open
+
+ assert_equal($0, Syslog.ident)
+ assert_equal(Syslog::LOG_PID | Syslog::LOG_CONS, Syslog.options)
+ assert_equal(Syslog::LOG_USER, Syslog.facility)
+
+ # open without close
+ assert_raises(RuntimeError) {
+ Syslog.open
+ }
+
+ Syslog.close
+
+ # given parameters
+ options = Syslog::LOG_NDELAY | Syslog::LOG_PID
+ Syslog.open("foo", options, Syslog::LOG_DAEMON)
+
+ assert_equal('foo', Syslog.ident)
+ assert_equal(options, Syslog.options)
+ assert_equal(Syslog::LOG_DAEMON, Syslog.facility)
+
+ Syslog.close
+
+ # default parameters again (after close)
+ Syslog.open
+ Syslog.close
+
+ assert_equal(nil, Syslog.ident)
+ assert_equal(nil, Syslog.options)
+ assert_equal(nil, Syslog.facility)
+
+ # block
+ param = nil
+ Syslog.open { |syslog|
+ param = syslog
+ }
+ assert_equal(Syslog, param)
+ ensure
+ Syslog.close if Syslog.opened?
+ end
+
+ def test_opened?
+ assert_equal(false, Syslog.opened?)
+
+ Syslog.open
+ assert_equal(true, Syslog.opened?)
+
+ Syslog.close
+ assert_equal(false, Syslog.opened?)
+
+ Syslog.open {
+ assert_equal(true, Syslog.opened?)
+ }
+
+ assert_equal(false, Syslog.opened?)
+ end
+
+ def test_close
+ assert_raises(RuntimeError) {
+ Syslog.close
+ }
+ end
+
+ def test_mask
+ assert_equal(nil, Syslog.mask)
+
+ Syslog.open
+
+ orig = Syslog.mask
+
+ Syslog.mask = Syslog.LOG_UPTO(Syslog::LOG_ERR)
+ assert_equal(Syslog.LOG_UPTO(Syslog::LOG_ERR), Syslog.mask)
+
+ Syslog.mask = Syslog.LOG_MASK(Syslog::LOG_CRIT)
+ assert_equal(Syslog.LOG_MASK(Syslog::LOG_CRIT), Syslog.mask)
+
+ Syslog.mask = orig
+ ensure
+ Syslog.close if Syslog.opened?
+ end
+
+ def syslog_line_regex(ident, message)
+ /(?:^| )#{Regexp.quote(ident)}(?:\[([1-9][0-9]*)\])?(?: |[: ].* )#{Regexp.quote(message)}$/
+ end
+
+ def test_log
+ IO.pipe {|stderr|
+ pid = fork {
+ stderr[0].close
+ STDERR.reopen(stderr[1])
+ stderr[1].close
+
+ options = Syslog::LOG_PERROR | Syslog::LOG_NDELAY
+
+ Syslog.open("syslog_test", options) { |sl|
+ sl.log(Syslog::LOG_NOTICE, "test1 - hello, %s!", "world")
+ sl.notice("test1 - hello, %s!", "world")
+ }
+
+ Syslog.open("syslog_test", options | Syslog::LOG_PID) { |sl|
+ sl.log(Syslog::LOG_CRIT, "test2 - pid")
+ sl.crit("test2 - pid")
+ }
+ exit!
+ }
+
+ stderr[1].close
+ Process.waitpid(pid)
+
+ # LOG_PERROR is not implemented on Cygwin or Solaris. Only test
+ # these on systems that define it.
+ return unless Syslog.const_defined?(:LOG_PERROR)
+
+ 2.times {
+ re = syslog_line_regex("syslog_test", "test1 - hello, world!")
+ line = stderr[0].gets
+ # In AIX, each LOG_PERROR output line has an appended empty line.
+ if /aix/ =~ RUBY_PLATFORM && line =~ /^$/
+ line = stderr[0].gets
+ end
+ m = re.match(line)
+ assert_not_nil(m)
+ if m[1]
+ # pid is written regardless of LOG_PID on OS X 10.7+
+ assert_equal(pid, m[1].to_i)
+ end
+ }
+
+ 2.times {
+ re = syslog_line_regex("syslog_test", "test2 - pid")
+ line = stderr[0].gets
+ # In AIX, each LOG_PERROR output line has an appended empty line.
+ if /aix/ =~ RUBY_PLATFORM && line =~ /^$/
+ line = stderr[0].gets
+ end
+ m = re.match(line)
+ assert_not_nil(m)
+ assert_not_nil(m[1])
+ assert_equal(pid, m[1].to_i)
+ }
+ }
+ end
+
+ def test_inspect
+ Syslog.open { |sl|
+ assert_equal(format('<#%s: opened=true, ident="%s", options=%d, facility=%d, mask=%d>',
+ Syslog,
+ sl.ident,
+ sl.options,
+ sl.facility,
+ sl.mask),
+ sl.inspect)
+ }
+
+ assert_equal(format('<#%s: opened=false>', Syslog), Syslog.inspect)
+ end
+end if defined?(Syslog)