summaryrefslogtreecommitdiff
path: root/jni/ruby/test/syslog/test_syslog_logger.rb
diff options
context:
space:
mode:
authorJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-16 18:49:26 +0900
committerJari Vetoniemi <jari.vetoniemi@indooratlas.com>2020-03-30 00:39:06 +0900
commitfcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch)
tree64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/test/syslog/test_syslog_logger.rb
Fresh start
Diffstat (limited to 'jni/ruby/test/syslog/test_syslog_logger.rb')
-rw-r--r--jni/ruby/test/syslog/test_syslog_logger.rb572
1 files changed, 572 insertions, 0 deletions
diff --git a/jni/ruby/test/syslog/test_syslog_logger.rb b/jni/ruby/test/syslog/test_syslog_logger.rb
new file mode 100644
index 0000000..d1998a1
--- /dev/null
+++ b/jni/ruby/test/syslog/test_syslog_logger.rb
@@ -0,0 +1,572 @@
+# coding: US-ASCII
+require 'test/unit'
+require 'tempfile'
+begin
+ require 'syslog/logger'
+rescue LoadError
+ # skip. see the bottom of this file.
+end
+
+# These tests ensure Syslog::Logger works like Logger
+
+class TestSyslogRootLogger < Test::Unit::TestCase
+
+ module MockSyslog
+
+ PRIMASK = Syslog::Level.constants.inject(0) { |mask, name| mask | Syslog::Level.const_get(name) }
+
+ LEVEL_LABEL_MAP = {
+ Syslog::LOG_ALERT => 'ALERT',
+ Syslog::LOG_ERR => 'ERR',
+ Syslog::LOG_WARNING => 'WARNING',
+ Syslog::LOG_NOTICE => 'NOTICE',
+ Syslog::LOG_INFO => 'INFO',
+ Syslog::LOG_DEBUG => 'DEBUG'
+ }
+
+ @facility = Syslog::LOG_USER
+
+ class << self
+
+ attr_reader :facility
+ attr_reader :line
+ attr_reader :program_name
+
+ def log(priority, format, *args)
+ level = priority & PRIMASK
+ @line = "<#{priority}> #{LEVEL_LABEL_MAP[level]} - #{format % args}"
+ end
+
+ def open(program_name)
+ @program_name = program_name
+ end
+
+ def reset
+ @line = ''
+ end
+
+ end
+ end
+
+ Syslog::Logger.syslog = MockSyslog
+
+ LEVEL_LABEL_MAP = {
+ Logger::DEBUG => 'DEBUG',
+ Logger::INFO => 'INFO',
+ Logger::WARN => 'WARN',
+ Logger::ERROR => 'ERROR',
+ Logger::FATAL => 'FATAL',
+ Logger::UNKNOWN => 'ANY',
+ }
+
+ def setup
+ @logger = Logger.new(nil)
+ end
+
+ class Log
+ attr_reader :line, :label, :datetime, :pid, :severity, :progname, :msg
+ def initialize(line)
+ @line = line
+ /\A(\w+), \[([^#]*)#(\d+)\]\s+(\w+) -- (\w*): ([\x0-\xff]*)/ =~ @line
+ @label, @datetime, @pid, @severity, @progname, @msg = $1, $2, $3, $4, $5, $6
+ end
+ end
+
+ def log_add(severity, msg, progname = nil, &block)
+ log(:add, severity, msg, progname, &block)
+ end
+
+ def log(msg_id, *arg, &block)
+ Log.new(log_raw(msg_id, *arg, &block))
+ end
+
+ def log_raw(msg_id, *arg, &block)
+ Tempfile.create(File.basename(__FILE__) + '.log') {|logdev|
+ @logger.instance_eval { @logdev = Logger::LogDevice.new(logdev) }
+ assert_equal true, @logger.__send__(msg_id, *arg, &block)
+ logdev.rewind
+ logdev.read
+ }
+ end
+
+ def test_initialize
+ assert_equal Logger::DEBUG, @logger.level
+ end
+
+ def test_custom_formatter
+ @logger.formatter = Class.new {
+ def call severity, time, progname, msg
+ "hi mom!"
+ end
+ }.new
+
+ assert_match(/hi mom!/, log_raw(:fatal, 'fatal level message'))
+ end
+
+ def test_add
+ msg = log_add nil, 'unknown level message' # nil == unknown
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+
+ msg = log_add Logger::FATAL, 'fatal level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
+
+ msg = log_add Logger::ERROR, 'error level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
+
+ msg = log_add Logger::WARN, 'warn level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
+
+ msg = log_add Logger::INFO, 'info level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::INFO], msg.severity
+
+ msg = log_add Logger::DEBUG, 'debug level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::DEBUG], msg.severity
+ end
+
+ def test_add_level_unknown
+ @logger.level = Logger::UNKNOWN
+
+ msg = log_add nil, 'unknown level message' # nil == unknown
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+
+ msg = log_add Logger::FATAL, 'fatal level message'
+ assert_equal '', msg.line
+
+ msg = log_add Logger::ERROR, 'error level message'
+ assert_equal '', msg.line
+
+ msg = log_add Logger::WARN, 'warn level message'
+ assert_equal '', msg.line
+
+ msg = log_add Logger::INFO, 'info level message'
+ assert_equal '', msg.line
+
+ msg = log_add Logger::DEBUG, 'debug level message'
+ assert_equal '', msg.line
+ end
+
+ def test_add_level_fatal
+ @logger.level = Logger::FATAL
+
+ msg = log_add nil, 'unknown level message' # nil == unknown
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+
+ msg = log_add Logger::FATAL, 'fatal level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
+
+ msg = log_add Logger::ERROR, 'error level message'
+ assert_equal '', msg.line
+
+ msg = log_add Logger::WARN, 'warn level message'
+ assert_equal '', msg.line
+
+ msg = log_add Logger::INFO, 'info level message'
+ assert_equal '', msg.line
+
+ msg = log_add Logger::DEBUG, 'debug level message'
+ assert_equal '', msg.line
+ end
+
+ def test_add_level_error
+ @logger.level = Logger::ERROR
+
+ msg = log_add nil, 'unknown level message' # nil == unknown
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+
+ msg = log_add Logger::FATAL, 'fatal level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
+
+ msg = log_add Logger::ERROR, 'error level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
+
+ msg = log_add Logger::WARN, 'warn level message'
+ assert_equal '', msg.line
+
+ msg = log_add Logger::INFO, 'info level message'
+ assert_equal '', msg.line
+
+ msg = log_add Logger::DEBUG, 'debug level message'
+ assert_equal '', msg.line
+ end
+
+ def test_add_level_warn
+ @logger.level = Logger::WARN
+
+ msg = log_add nil, 'unknown level message' # nil == unknown
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+
+ msg = log_add Logger::FATAL, 'fatal level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
+
+ msg = log_add Logger::ERROR, 'error level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
+
+ msg = log_add Logger::WARN, 'warn level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
+
+ msg = log_add Logger::INFO, 'info level message'
+ assert_equal '', msg.line
+
+ msg = log_add Logger::DEBUG, 'debug level message'
+ assert_equal '', msg.line
+ end
+
+ def test_add_level_info
+ @logger.level = Logger::INFO
+
+ msg = log_add nil, 'unknown level message' # nil == unknown
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+
+ msg = log_add Logger::FATAL, 'fatal level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
+
+ msg = log_add Logger::ERROR, 'error level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
+
+ msg = log_add Logger::WARN, 'warn level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
+
+ msg = log_add Logger::INFO, 'info level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::INFO], msg.severity
+
+ msg = log_add Logger::DEBUG, 'debug level message'
+ assert_equal '', msg.line
+ end
+
+ def test_add_level_debug
+ @logger.level = Logger::DEBUG
+
+ msg = log_add nil, 'unknown level message' # nil == unknown
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+
+ msg = log_add Logger::FATAL, 'fatal level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
+
+ msg = log_add Logger::ERROR, 'error level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
+
+ msg = log_add Logger::WARN, 'warn level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
+
+ msg = log_add Logger::INFO, 'info level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::INFO], msg.severity
+
+ msg = log_add Logger::DEBUG, 'debug level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::DEBUG], msg.severity
+ end
+
+ def test_unknown
+ msg = log :unknown, 'unknown level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+
+ @logger.level = Logger::UNKNOWN
+ msg = log :unknown, 'unknown level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+
+ @logger.level = Logger::FATAL
+ msg = log :unknown, 'unknown level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+
+ @logger.level = Logger::ERROR
+ msg = log :unknown, 'unknown level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+
+ @logger.level = Logger::WARN
+ msg = log :unknown, 'unknown level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+
+ @logger.level = Logger::INFO
+ msg = log :unknown, 'unknown level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+
+ @logger.level = Logger::DEBUG
+ msg = log :unknown, 'unknown level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::UNKNOWN], msg.severity
+ end
+
+ def test_fatal
+ msg = log :fatal, 'fatal level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
+
+ @logger.level = Logger::UNKNOWN
+ msg = log :fatal, 'fatal level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::FATAL
+ msg = log :fatal, 'fatal level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
+
+ @logger.level = Logger::ERROR
+ msg = log :fatal, 'fatal level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
+
+ @logger.level = Logger::WARN
+ msg = log :fatal, 'fatal level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
+
+ @logger.level = Logger::INFO
+ msg = log :fatal, 'fatal level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
+
+ @logger.level = Logger::DEBUG
+ msg = log :fatal, 'fatal level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::FATAL], msg.severity
+ end
+
+ def test_fatal_eh
+ @logger.level = Logger::FATAL
+ assert_equal true, @logger.fatal?
+
+ @logger.level = Logger::UNKNOWN
+ assert_equal false, @logger.fatal?
+ end
+
+ def test_error
+ msg = log :error, 'error level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
+
+ @logger.level = Logger::UNKNOWN
+ msg = log :error, 'error level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::FATAL
+ msg = log :error, 'error level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::ERROR
+ msg = log :error, 'error level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
+
+ @logger.level = Logger::WARN
+ msg = log :error, 'error level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
+
+ @logger.level = Logger::INFO
+ msg = log :error, 'error level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
+
+ @logger.level = Logger::DEBUG
+ msg = log :error, 'error level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::ERROR], msg.severity
+ end
+
+ def test_error_eh
+ @logger.level = Logger::ERROR
+ assert_equal true, @logger.error?
+
+ @logger.level = Logger::FATAL
+ assert_equal false, @logger.error?
+ end
+
+ def test_warn
+ msg = log :warn, 'warn level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
+
+ @logger.level = Logger::UNKNOWN
+ msg = log :warn, 'warn level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::FATAL
+ msg = log :warn, 'warn level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::ERROR
+ msg = log :warn, 'warn level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::WARN
+ msg = log :warn, 'warn level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
+
+ @logger.level = Logger::INFO
+ msg = log :warn, 'warn level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
+
+ @logger.level = Logger::DEBUG
+ msg = log :warn, 'warn level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::WARN], msg.severity
+ end
+
+ def test_warn_eh
+ @logger.level = Logger::WARN
+ assert_equal true, @logger.warn?
+
+ @logger.level = Logger::ERROR
+ assert_equal false, @logger.warn?
+ end
+
+ def test_info
+ msg = log :info, 'info level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::INFO], msg.severity
+
+ @logger.level = Logger::UNKNOWN
+ msg = log :info, 'info level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::FATAL
+ msg = log :info, 'info level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::ERROR
+ msg = log :info, 'info level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::WARN
+ msg = log :info, 'info level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::INFO
+ msg = log :info, 'info level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::INFO], msg.severity
+
+ @logger.level = Logger::DEBUG
+ msg = log :info, 'info level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::INFO], msg.severity
+ end
+
+ def test_info_eh
+ @logger.level = Logger::INFO
+ assert_equal true, @logger.info?
+
+ @logger.level = Logger::WARN
+ assert_equal false, @logger.info?
+ end
+
+ def test_debug
+ msg = log :debug, 'debug level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::DEBUG], msg.severity
+
+ @logger.level = Logger::UNKNOWN
+ msg = log :debug, 'debug level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::FATAL
+ msg = log :debug, 'debug level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::ERROR
+ msg = log :debug, 'debug level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::WARN
+ msg = log :debug, 'debug level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::INFO
+ msg = log :debug, 'debug level message'
+ assert_equal '', msg.line
+
+ @logger.level = Logger::DEBUG
+ msg = log :debug, 'debug level message'
+ assert_equal LEVEL_LABEL_MAP[Logger::DEBUG], msg.severity
+ end
+
+ def test_debug_eh
+ @logger.level = Logger::DEBUG
+ assert_equal true, @logger.debug?
+
+ @logger.level = Logger::INFO
+ assert_equal false, @logger.debug?
+ end
+
+end if defined?(Syslog)
+
+class TestSyslogLogger < TestSyslogRootLogger
+
+ @facility = Syslog::LOG_USER
+
+ def facility
+ self.class.instance_variable_get("@facility")
+ end
+
+ def setup
+ super
+ @logger = Syslog::Logger.new
+ end
+
+ SEVERITY_MAP = {}.tap { |map|
+ level2severity = Syslog::Logger::LEVEL_MAP.invert
+
+ MockSyslog::LEVEL_LABEL_MAP.each { |level, name|
+ map[name] = TestSyslogRootLogger::LEVEL_LABEL_MAP[level2severity[level]]
+ }
+ }
+
+ class Log
+ attr_reader :line, :label, :datetime, :pid, :severity, :progname, :msg, :priority
+ def initialize(line)
+ @line = line
+ return unless /\A<(\d+)> (\w+) - (.*)\Z/ =~ @line
+ priority, severity, @msg = $1, $2, $3
+ @severity = SEVERITY_MAP[severity]
+ @priority = priority.to_i
+ end
+ end
+
+ def log_add(severity, msg, progname = nil, &block)
+ log(:add, severity, msg, progname, &block)
+ end
+
+ def log(msg_id, *arg, &block)
+ Log.new(log_raw(msg_id, *arg, &block))
+ end
+
+ def log_raw(msg_id, *arg, &block)
+ assert_equal true, @logger.__send__(msg_id, *arg, &block)
+ msg = MockSyslog.line
+ MockSyslog.reset
+ return msg
+ end
+
+ def test_unknown_eh
+ @logger.level = Logger::UNKNOWN
+ assert_equal true, @logger.unknown?
+
+ @logger.level = Logger::UNKNOWN + 1
+ assert_equal false, @logger.unknown?
+ end
+
+ def test_facility
+ assert_equal facility, @logger.facility
+ end
+
+ def test_priority
+ msg = log_add nil, 'unknown level message' # nil == unknown
+ assert_equal facility|Syslog::LOG_ALERT, msg.priority
+
+ msg = log_add Logger::FATAL, 'fatal level message'
+ assert_equal facility|Syslog::LOG_ERR, msg.priority
+
+ msg = log_add Logger::ERROR, 'error level message'
+ assert_equal facility|Syslog::LOG_WARNING, msg.priority
+
+ msg = log_add Logger::WARN, 'warn level message'
+ assert_equal facility|Syslog::LOG_NOTICE, msg.priority
+
+ msg = log_add Logger::INFO, 'info level message'
+ assert_equal facility|Syslog::LOG_INFO, msg.priority
+
+ msg = log_add Logger::DEBUG, 'debug level message'
+ assert_equal facility|Syslog::LOG_DEBUG, msg.priority
+ end
+
+end if defined?(Syslog)
+
+
+# Create test class for each available facility
+
+Syslog::Facility.constants.each do |facility_symb|
+
+ test_syslog_class = Class.new(TestSyslogLogger) do
+
+ @facility = Syslog.const_get(facility_symb)
+
+ def setup
+ super
+ @logger.facility = facility
+ end
+
+ end
+ Object.const_set("TestSyslogLogger_#{facility_symb}", test_syslog_class)
+
+end if defined?(Syslog)