diff options
Diffstat (limited to 'test/logger')
| -rw-r--r-- | test/logger/test_formatter.rb | 35 | ||||
| -rw-r--r-- | test/logger/test_logdevice.rb | 859 | ||||
| -rw-r--r-- | test/logger/test_logger.rb | 402 | ||||
| -rw-r--r-- | test/logger/test_logperiod.rb | 67 | ||||
| -rw-r--r-- | test/logger/test_severity.rb | 58 |
5 files changed, 0 insertions, 1421 deletions
diff --git a/test/logger/test_formatter.rb b/test/logger/test_formatter.rb deleted file mode 100644 index 9465722991..0000000000 --- a/test/logger/test_formatter.rb +++ /dev/null @@ -1,35 +0,0 @@ -# coding: US-ASCII -# frozen_string_literal: false -require 'logger' - -class TestFormatter < Test::Unit::TestCase - def test_call - severity = 'INFO' - time = Time.now - progname = 'ruby' - msg = 'This is a test' - formatter = Logger::Formatter.new - - result = formatter.call(severity, time, progname, msg) - time_matcher = /\d{4}\-\d{2}\-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}/ - matcher = /#{severity[0..0]}, \[#{time_matcher} #\d+\] #{severity} -- #{progname}: #{msg}\n/ - - assert_match(matcher, result) - end - - class CustomFormatter < Logger::Formatter - def call(time) - format_datetime(time) - end - end - - def test_format_datetime - time = Time.now - formatter = CustomFormatter.new - - result = formatter.call(time) - matcher = /^\d{4}\-\d{2}\-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}$/ - - assert_match(matcher, result) - end -end diff --git a/test/logger/test_logdevice.rb b/test/logger/test_logdevice.rb deleted file mode 100644 index 8f1c15542a..0000000000 --- a/test/logger/test_logdevice.rb +++ /dev/null @@ -1,859 +0,0 @@ -# coding: US-ASCII -# frozen_string_literal: false -require 'logger' -require 'tempfile' -require 'tmpdir' - -class TestLogDevice < Test::Unit::TestCase - class LogExcnRaiser - def write(*arg) - raise 'disk is full' - end - - def close - end - - def stat - Object.new - end - end - - def setup - @tempfile = Tempfile.new("logger") - @tempfile.close - @filename = @tempfile.path - File.unlink(@filename) - end - - def teardown - @tempfile.close(true) - end - - def d(log, opt = {}) - Logger::LogDevice.new(log, **opt) - end - - def test_initialize - logdev = d(STDERR) - assert_equal(STDERR, logdev.dev) - assert_nil(logdev.filename) - assert_raise(TypeError) do - d(nil) - end - # - logdev = d(@filename) - begin - assert_file.exist?(@filename) - assert_predicate(logdev.dev, :sync) - refute_predicate(logdev.dev, :binmode?) - assert_equal(@filename, logdev.filename) - logdev.write('hello') - ensure - logdev.close - end - # create logfile which is already exist. - logdev = d(@filename) - begin - assert_predicate(logdev.dev, :sync) - refute_predicate(logdev.dev, :binmode?) - logdev.write('world') - logfile = File.read(@filename) - assert_equal(2, logfile.split(/\n/).size) - assert_match(/^helloworld$/, logfile) - ensure - logdev.close - end - # logfile object with path - tempfile = Tempfile.new("logger") - tempfile.sync = true - logdev = d(tempfile) - begin - logdev.write('world') - logfile = File.read(tempfile.path) - assert_equal(1, logfile.split(/\n/).size) - assert_match(/^world$/, logfile) - assert_equal(tempfile.path, logdev.filename) - ensure - logdev.close - File.unlink(tempfile) - tempfile.close(true) - end - end - - def test_write - r, w = IO.pipe - logdev = d(w) - logdev.write("msg2\n\n") - IO.select([r], nil, nil, 0.1) - w.close - msg = r.read - r.close - assert_equal("msg2\n\n", msg) - # - logdev = d(LogExcnRaiser.new) - class << (stderr = '') - alias write concat - end - $stderr, stderr = stderr, $stderr - begin - assert_nothing_raised do - logdev.write('hello') - end - ensure - logdev.close - $stderr, stderr = stderr, $stderr - end - assert_equal "log writing failed. disk is full\n", stderr - end - - def test_close - r, w = IO.pipe - logdev = d(w) - logdev.write("msg2\n\n") - IO.select([r], nil, nil, 0.1) - assert_not_predicate(w, :closed?) - logdev.close - assert_predicate(w, :closed?) - r.close - end - - def test_reopen_io - logdev = d(STDERR) - old_dev = logdev.dev - logdev.reopen - assert_equal(STDERR, logdev.dev) - assert_not_predicate(old_dev, :closed?) - end - - def test_reopen_io_by_io - logdev = d(STDERR) - old_dev = logdev.dev - logdev.reopen(STDOUT) - assert_equal(STDOUT, logdev.dev) - assert_not_predicate(old_dev, :closed?) - end - - def test_reopen_io_by_file - logdev = d(STDERR) - old_dev = logdev.dev - logdev.reopen(@filename) - begin - assert_file.exist?(@filename) - assert_equal(@filename, logdev.filename) - assert_not_predicate(old_dev, :closed?) - ensure - logdev.close - end - end - - def test_reopen_file - logdev = d(@filename) - old_dev = logdev.dev - - logdev.reopen - begin - assert_file.exist?(@filename) - assert_equal(@filename, logdev.filename) - assert_predicate(old_dev, :closed?) - ensure - logdev.close - end - end - - def test_reopen_file_by_io - logdev = d(@filename) - old_dev = logdev.dev - logdev.reopen(STDOUT) - assert_equal(STDOUT, logdev.dev) - assert_nil(logdev.filename) - assert_predicate(old_dev, :closed?) - end - - def test_reopen_file_by_file - logdev = d(@filename) - old_dev = logdev.dev - - tempfile2 = Tempfile.new("logger") - tempfile2.close - filename2 = tempfile2.path - File.unlink(filename2) - - logdev.reopen(filename2) - begin - assert_file.exist?(filename2) - assert_equal(filename2, logdev.filename) - assert_predicate(old_dev, :closed?) - ensure - logdev.close - tempfile2.close(true) - end - end - - def test_shifting_size - tmpfile = Tempfile.new([File.basename(__FILE__, '.*'), '_1.log']) - logfile = tmpfile.path - logfile0 = logfile + '.0' - logfile1 = logfile + '.1' - logfile2 = logfile + '.2' - logfile3 = logfile + '.3' - tmpfile.close(true) - File.unlink(logfile) if File.exist?(logfile) - File.unlink(logfile0) if File.exist?(logfile0) - File.unlink(logfile1) if File.exist?(logfile1) - File.unlink(logfile2) if File.exist?(logfile2) - logger = Logger.new(logfile, 4, 100) - logger.error("0" * 15) - assert_file.exist?(logfile) - assert_file.not_exist?(logfile0) - logger.error("0" * 15) - assert_file.exist?(logfile0) - assert_file.not_exist?(logfile1) - logger.error("0" * 15) - assert_file.exist?(logfile1) - assert_file.not_exist?(logfile2) - logger.error("0" * 15) - assert_file.exist?(logfile2) - assert_file.not_exist?(logfile3) - logger.error("0" * 15) - assert_file.not_exist?(logfile3) - logger.error("0" * 15) - assert_file.not_exist?(logfile3) - logger.close - File.unlink(logfile) - File.unlink(logfile0) - File.unlink(logfile1) - File.unlink(logfile2) - - tmpfile = Tempfile.new([File.basename(__FILE__, '.*'), '_2.log']) - logfile = tmpfile.path - logfile0 = logfile + '.0' - logfile1 = logfile + '.1' - logfile2 = logfile + '.2' - logfile3 = logfile + '.3' - tmpfile.close(true) - logger = Logger.new(logfile, 4, 150) - logger.error("0" * 15) - assert_file.exist?(logfile) - assert_file.not_exist?(logfile0) - logger.error("0" * 15) - assert_file.not_exist?(logfile0) - logger.error("0" * 15) - assert_file.exist?(logfile0) - assert_file.not_exist?(logfile1) - logger.error("0" * 15) - assert_file.not_exist?(logfile1) - logger.error("0" * 15) - assert_file.exist?(logfile1) - assert_file.not_exist?(logfile2) - logger.error("0" * 15) - assert_file.not_exist?(logfile2) - logger.error("0" * 15) - assert_file.exist?(logfile2) - assert_file.not_exist?(logfile3) - logger.error("0" * 15) - assert_file.not_exist?(logfile3) - logger.error("0" * 15) - assert_file.not_exist?(logfile3) - logger.error("0" * 15) - assert_file.not_exist?(logfile3) - logger.close - File.unlink(logfile) - File.unlink(logfile0) - File.unlink(logfile1) - File.unlink(logfile2) - end - - def test_shifting_age_variants - logger = Logger.new(@filename, 'daily') - logger.info('daily') - logger.close - logger = Logger.new(@filename, 'weekly') - logger.info('weekly') - logger.close - logger = Logger.new(@filename, 'monthly') - logger.info('monthly') - logger.close - end - - def test_invalid_shifting_age - assert_raise(ArgumentError) { Logger::Period.next_rotate_time(Time.now, 'invalid') } - assert_raise(ArgumentError) { Logger::Period.previous_period_end(Time.now, 'invalid') } - end - - def test_shifting_age - yyyymmdd = Time.now.strftime("%Y%m%d") - filename1 = @filename + ".#{yyyymmdd}" - filename2 = @filename + ".#{yyyymmdd}.1" - filename3 = @filename + ".#{yyyymmdd}.2" - begin - logger = Logger.new(@filename, 'now') - assert_file.exist?(@filename) - assert_file.not_exist?(filename1) - assert_file.not_exist?(filename2) - assert_file.not_exist?(filename3) - logger.info("0" * 15) - assert_file.exist?(@filename) - assert_file.exist?(filename1) - assert_file.not_exist?(filename2) - assert_file.not_exist?(filename3) - logger.warn("0" * 15) - assert_file.exist?(@filename) - assert_file.exist?(filename1) - assert_file.exist?(filename2) - assert_file.not_exist?(filename3) - logger.error("0" * 15) - assert_file.exist?(@filename) - assert_file.exist?(filename1) - assert_file.exist?(filename2) - assert_file.exist?(filename3) - ensure - logger.close if logger - [filename1, filename2, filename3].each do |filename| - File.unlink(filename) if File.exist?(filename) - end - end - end - - def test_shifting_period_suffix - ['%Y%m%d', '%Y-%m-%d', '%Y'].each do |format| - if format == '%Y%m%d' # default - logger = Logger.new(@filename, 'now', 1048576) - else # config - logger = Logger.new(@filename, 'now', 1048576, shift_period_suffix: format) - end - begin - yyyymmdd = Time.now.strftime(format) - filename1 = @filename + ".#{yyyymmdd}" - filename2 = @filename + ".#{yyyymmdd}.1" - filename3 = @filename + ".#{yyyymmdd}.2" - logger.info("0" * 15) - logger.info("0" * 15) - logger.info("0" * 15) - assert_file.exist?(@filename) - assert_file.exist?(filename1) - assert_file.exist?(filename2) - assert_file.exist?(filename3) - ensure - logger.close if logger - [filename1, filename2, filename3].each do |filename| - File.unlink(filename) if File.exist?(filename) - end - end - end - end - - def test_shifting_size_in_multiprocess - tmpfile = Tempfile.new([File.basename(__FILE__, '.*'), '_1.log']) - logfile = tmpfile.path - logfile0 = logfile + '.0' - logfile1 = logfile + '.1' - logfile2 = logfile + '.2' - tmpfile.close(true) - File.unlink(logfile) if File.exist?(logfile) - File.unlink(logfile0) if File.exist?(logfile0) - File.unlink(logfile1) if File.exist?(logfile1) - File.unlink(logfile2) if File.exist?(logfile2) - begin - stderr = run_children(2, [logfile], "#{<<-"begin;"}\n#{<<-'end;'}") - begin; - logger = Logger.new(ARGV[0], 4, 10) - 10.times do - logger.info '0' * 15 - end - end; - assert_no_match(/log shifting failed/, stderr) - assert_no_match(/log writing failed/, stderr) - assert_no_match(/log rotation inter-process lock failed/, stderr) - ensure - File.unlink(logfile) if File.exist?(logfile) - File.unlink(logfile0) if File.exist?(logfile0) - File.unlink(logfile1) if File.exist?(logfile1) - File.unlink(logfile2) if File.exist?(logfile2) - end - end - - def test_shifting_age_in_multiprocess - yyyymmdd = Time.now.strftime("%Y%m%d") - begin - stderr = run_children(2, [@filename], "#{<<-"begin;"}\n#{<<-'end;'}") - begin; - logger = Logger.new(ARGV[0], 'now') - 10.times do - logger.info '0' * 15 - end - end; - assert_no_match(/log shifting failed/, stderr) - assert_no_match(/log writing failed/, stderr) - assert_no_match(/log rotation inter-process lock failed/, stderr) - ensure - Dir.glob("#{@filename}.#{yyyymmdd}{,.[1-9]*}") do |filename| - File.unlink(filename) if File.exist?(filename) - end - end - end - - def test_open_logfile_in_multiprocess - tmpfile = Tempfile.new([File.basename(__FILE__, '.*'), '_1.log']) - logfile = tmpfile.path - tmpfile.close(true) - begin - 20.times do - run_children(2, [logfile], "#{<<-"begin;"}\n#{<<-'end;'}") - begin; - logfile = ARGV[0] - logdev = Logger::LogDevice.new(logfile) - logdev.send(:open_logfile, logfile) - end; - assert_equal(1, File.readlines(logfile).grep(/# Logfile created on/).size) - File.unlink(logfile) - end - ensure - File.unlink(logfile) if File.exist?(logfile) - end - end - - def test_shifting_size_not_rotate_too_much - logdev0 = d(@filename) - logdev0.__send__(:add_log_header, @tempfile) - header_size = @tempfile.size - message = "*" * 99 + "\n" - shift_size = header_size + message.size * 3 - 1 - opt = {shift_age: 1, shift_size: shift_size} - - Dir.mktmpdir do |tmpdir| - begin - log = File.join(tmpdir, "log") - logdev1 = d(log, opt) - logdev2 = d(log, opt) - - assert_file.identical?(log, logdev1.dev) - assert_file.identical?(log, logdev2.dev) - - 3.times{logdev1.write(message)} - assert_file.identical?(log, logdev1.dev) - assert_file.identical?(log, logdev2.dev) - - logdev1.write(message) - assert_file.identical?(log, logdev1.dev) - # NOTE: below assertion fails in JRuby 9.3 and TruffleRuby - assert_file.identical?(log + ".0", logdev2.dev) - - logdev2.write(message) - assert_file.identical?(log, logdev1.dev) - assert_file.identical?(log, logdev2.dev) - - logdev1.write(message) - assert_file.identical?(log, logdev1.dev) - assert_file.identical?(log, logdev2.dev) - ensure - logdev1.close if logdev1 - logdev2.close if logdev2 - end - end - ensure - logdev0.close - end unless /mswin|mingw|cygwin/ =~ RbConfig::CONFIG['host_os'] - - def test_shifting_midnight - Dir.mktmpdir do |tmpdir| - assert_in_out_err([*%W"--disable=gems -rlogger -C#{tmpdir} -"], "#{<<-"begin;"}\n#{<<-'end;'}") - begin; - begin - module FakeTime - attr_accessor :now - end - - class << Time - prepend FakeTime - end - - log = "log" - File.open(log, "w") {} - File.utime(*[Time.mktime(2014, 1, 2, 0, 0, 0)]*2, log) - - Time.now = Time.mktime(2014, 1, 2, 23, 59, 59, 999000) - dev = Logger::LogDevice.new(log, shift_age: 'daily') - dev.write("#{Time.now} hello-1\n") - File.utime(Time.now, Time.now, log) - - Time.now = Time.mktime(2014, 1, 3, 1, 1, 1) - dev.write("#{Time.now} hello-2\n") - File.utime(Time.now, Time.now, log) - ensure - dev.close - end - end; - - bug = '[GH-539]' - log = File.join(tmpdir, "log") - cont = File.read(log) - assert_match(/hello-2/, cont) - assert_not_match(/hello-1/, cont) - assert_file.for(bug).exist?(log+".20140102") - assert_match(/hello-1/, File.read(log+".20140102"), bug) - end - end - - env_tz_works = /linux|darwin|freebsd|openbsd/ =~ RUBY_PLATFORM # borrow from test/ruby/test_time_tz.rb - - def test_shifting_weekly - Dir.mktmpdir do |tmpdir| - assert_in_out_err([{"TZ"=>"UTC"}, *%W"-rlogger -C#{tmpdir} -"], "#{<<-"begin;"}\n#{<<-'end;'}") - begin; - begin - module FakeTime - attr_accessor :now - end - - class << Time - prepend FakeTime - end - - log = "log" - File.open(log, "w") {} - Time.now = Time.utc(2015, 12, 14, 0, 1, 1) - File.utime(Time.now, Time.now, log) - - dev = Logger::LogDevice.new("log", shift_age: 'weekly') - - Time.now = Time.utc(2015, 12, 19, 12, 34, 56) - dev.write("#{Time.now} hello-1\n") - File.utime(Time.now, Time.now, log) - - Time.now = Time.utc(2015, 12, 20, 0, 1, 1) - dev.write("#{Time.now} hello-2\n") - File.utime(Time.now, Time.now, log) - ensure - dev.close if dev - end - end; - log = File.join(tmpdir, "log") - cont = File.read(log) - assert_match(/hello-2/, cont) - assert_not_match(/hello-1/, cont) - log = Dir.glob(log+".*") - assert_equal(1, log.size) - log, = *log - cont = File.read(log) - assert_match(/hello-1/, cont) - assert_equal("2015-12-19", cont[/^[-\d]+/]) - assert_equal("20151219", log[/\d+\z/]) - end - end if env_tz_works - - def test_shifting_monthly - Dir.mktmpdir do |tmpdir| - assert_in_out_err([{"TZ"=>"UTC"}, *%W"-rlogger -C#{tmpdir} -"], "#{<<-"begin;"}\n#{<<-'end;'}") - begin; - begin - module FakeTime - attr_accessor :now - end - - class << Time - prepend FakeTime - end - - log = "log" - File.open(log, "w") {} - Time.now = Time.utc(2015, 12, 14, 0, 1, 1) - File.utime(Time.now, Time.now, log) - - dev = Logger::LogDevice.new("log", shift_age: 'monthly') - - Time.now = Time.utc(2015, 12, 31, 12, 34, 56) - dev.write("#{Time.now} hello-1\n") - File.utime(Time.now, Time.now, log) - - Time.now = Time.utc(2016, 1, 1, 0, 1, 1) - dev.write("#{Time.now} hello-2\n") - File.utime(Time.now, Time.now, log) - ensure - dev.close if dev - end - end; - log = File.join(tmpdir, "log") - cont = File.read(log) - assert_match(/hello-2/, cont) - assert_not_match(/hello-1/, cont) - log = Dir.glob(log+".*") - assert_equal(1, log.size) - log, = *log - cont = File.read(log) - assert_match(/hello-1/, cont) - assert_equal("2015-12-31", cont[/^[-\d]+/]) - assert_equal("20151231", log[/\d+\z/]) - end - end if env_tz_works - - def test_shifting_dst_change - Dir.mktmpdir do |tmpdir| - assert_in_out_err([{"TZ"=>"Europe/London"}, *%W"--disable=gems -rlogger -C#{tmpdir} -"], "#{<<-"begin;"}\n#{<<-'end;'}") - begin; - begin - module FakeTime - attr_accessor :now - end - - class << Time - prepend FakeTime - end - - log = "log" - File.open(log, "w") {} - - Time.now = Time.mktime(2014, 3, 30, 0, 1, 1) - File.utime(Time.now, Time.now, log) - - dev = Logger::LogDevice.new(log, shift_age: 'daily') - dev.write("#{Time.now} hello-1\n") - File.utime(*[Time.mktime(2014, 3, 30, 0, 2, 3)]*2, log) - - Time.now = Time.mktime(2014, 3, 31, 0, 1, 1) - dev.write("#{Time.now} hello-2\n") - File.utime(Time.now, Time.now, log) - ensure - dev.close - end - end; - - log = File.join(tmpdir, "log") - cont = File.read(log) - assert_match(/hello-2/, cont) - assert_not_match(/hello-1/, cont) - assert_file.exist?(log+".20140330") - end - end if env_tz_works - - def test_shifting_weekly_dst_change - Dir.mktmpdir do |tmpdir| - assert_separately([{"TZ"=>"Europe/London"}, *%W"-rlogger -C#{tmpdir} -"], "#{<<-"begin;"}\n#{<<-'end;'}") - begin; - begin - module FakeTime - attr_accessor :now - end - - class << Time - prepend FakeTime - end - - log = "log" - File.open(log, "w") {} - Time.now = Time.mktime(2015, 10, 25, 0, 1, 1) - File.utime(Time.now, Time.now, log) - - dev = Logger::LogDevice.new("log", shift_age: 'weekly') - dev.write("#{Time.now} hello-1\n") - File.utime(Time.now, Time.now, log) - ensure - dev.close if dev - end - end; - log = File.join(tmpdir, "log") - cont = File.read(log) - assert_match(/hello-1/, cont) - end - end if env_tz_works - - def test_shifting_monthly_dst_change - Dir.mktmpdir do |tmpdir| - assert_separately([{"TZ"=>"Europe/London"}, *%W"-rlogger -C#{tmpdir} -"], "#{<<-"begin;"}\n#{<<-'end;'}") - begin; - begin - module FakeTime - attr_accessor :now - end - - class << Time - prepend FakeTime - end - - log = "log" - File.open(log, "w") {} - Time.now = Time.utc(2016, 9, 1, 0, 1, 1) - File.utime(Time.now, Time.now, log) - - dev = Logger::LogDevice.new("log", shift_age: 'monthly') - - Time.now = Time.utc(2016, 9, 8, 7, 6, 5) - dev.write("#{Time.now} hello-1\n") - File.utime(Time.now, Time.now, log) - - Time.now = Time.utc(2016, 10, 9, 8, 7, 6) - dev.write("#{Time.now} hello-2\n") - File.utime(Time.now, Time.now, log) - - Time.now = Time.utc(2016, 10, 9, 8, 7, 7) - dev.write("#{Time.now} hello-3\n") - File.utime(Time.now, Time.now, log) - ensure - dev.close if dev - end - end; - log = File.join(tmpdir, "log") - cont = File.read(log) - assert_match(/hello-2/, cont) - assert_not_match(/hello-1/, cont) - log = Dir.glob(log+".*") - assert_equal(1, log.size) - log, = *log - cont = File.read(log) - assert_match(/hello-1/, cont) - assert_equal("2016-09-08", cont[/^[-\d]+/]) - assert_equal("20160930", log[/\d+\z/]) - end - end if env_tz_works - - def test_shifting_midnight_exist_file - Dir.mktmpdir do |tmpdir| - assert_in_out_err([*%W"--disable=gems -rlogger -C#{tmpdir} -"], "#{<<-"begin;"}\n#{<<-'end;'}") - begin; - begin - module FakeTime - attr_accessor :now - end - - class << Time - prepend FakeTime - end - - log = "log" - File.open(log, "w") {} - File.utime(*[Time.mktime(2014, 1, 2, 0, 0, 0)]*2, log) - - Time.now = Time.mktime(2014, 1, 2, 23, 59, 59, 999000) - dev = Logger::LogDevice.new(log, shift_age: 'daily') - dev.write("#{Time.now} hello-1\n") - dev.close - File.utime(Time.now, Time.now, log) - - Time.now = Time.mktime(2014, 1, 3, 1, 1, 1) - dev = Logger::LogDevice.new(log, shift_age: 'daily') - dev.write("#{Time.now} hello-2\n") - File.utime(Time.now, Time.now, log) - ensure - dev.close - end - end; - - bug = '[GH-539]' - log = File.join(tmpdir, "log") - cont = File.read(log) - assert_match(/hello-2/, cont) - assert_not_match(/hello-1/, cont) - assert_file.for(bug).exist?(log+".20140102") - assert_match(/hello-1/, File.read(log+".20140102"), bug) - end - end - - env_tz_works = /linux|darwin|freebsd/ =~ RUBY_PLATFORM # borrow from test/ruby/test_time_tz.rb - - def test_shifting_weekly_exist_file - Dir.mktmpdir do |tmpdir| - assert_in_out_err([{"TZ"=>"UTC"}, *%W"-rlogger -C#{tmpdir} -"], "#{<<-"begin;"}\n#{<<-'end;'}") - begin; - begin - module FakeTime - attr_accessor :now - end - - class << Time - prepend FakeTime - end - - log = "log" - File.open(log, "w") {} - Time.now = Time.utc(2015, 12, 14, 0, 1, 1) - File.utime(Time.now, Time.now, log) - - dev = Logger::LogDevice.new("log", shift_age: 'weekly') - - Time.now = Time.utc(2015, 12, 19, 12, 34, 56) - dev.write("#{Time.now} hello-1\n") - dev.close - File.utime(Time.now, Time.now, log) - - Time.now = Time.utc(2015, 12, 20, 0, 1, 1) - dev = Logger::LogDevice.new("log", shift_age: 'weekly') - dev.write("#{Time.now} hello-2\n") - File.utime(Time.now, Time.now, log) - ensure - dev.close if dev - end - end; - log = File.join(tmpdir, "log") - cont = File.read(log) - assert_match(/hello-2/, cont) - assert_not_match(/hello-1/, cont) - log = Dir.glob(log+".*") - assert_equal(1, log.size) - log, = *log - cont = File.read(log) - assert_match(/hello-1/, cont) - assert_equal("2015-12-19", cont[/^[-\d]+/]) - assert_equal("20151219", log[/\d+\z/]) - end - end if env_tz_works - - def test_shifting_monthly_exist_file - Dir.mktmpdir do |tmpdir| - assert_in_out_err([{"TZ"=>"UTC"}, *%W"-rlogger -C#{tmpdir} -"], "#{<<-"begin;"}\n#{<<-'end;'}") - begin; - begin - module FakeTime - attr_accessor :now - end - - class << Time - prepend FakeTime - end - - log = "log" - File.open(log, "w") {} - Time.now = Time.utc(2015, 12, 14, 0, 1, 1) - File.utime(Time.now, Time.now, log) - - dev = Logger::LogDevice.new("log", shift_age: 'monthly') - - Time.now = Time.utc(2015, 12, 31, 12, 34, 56) - dev.write("#{Time.now} hello-1\n") - dev.close - File.utime(Time.now, Time.now, log) - - Time.now = Time.utc(2016, 1, 1, 0, 1, 1) - dev = Logger::LogDevice.new("log", shift_age: 'monthly') - dev.write("#{Time.now} hello-2\n") - File.utime(Time.now, Time.now, log) - ensure - dev.close if dev - end - end; - log = File.join(tmpdir, "log") - cont = File.read(log) - assert_match(/hello-2/, cont) - assert_not_match(/hello-1/, cont) - log = Dir.glob(log+".*") - assert_equal(1, log.size) - log, = *log - cont = File.read(log) - assert_match(/hello-1/, cont) - assert_equal("2015-12-31", cont[/^[-\d]+/]) - assert_equal("20151231", log[/\d+\z/]) - end - end if env_tz_works - - private - - def run_children(n, args, src) - r, w = IO.pipe - [w, *(1..n).map do - f = IO.popen([EnvUtil.rubybin, *%w[--disable=gems -rlogger -], *args], "w", err: w) - f.puts(src) - f - end].each(&:close) - stderr = r.read - r.close - stderr - end -end diff --git a/test/logger/test_logger.rb b/test/logger/test_logger.rb deleted file mode 100644 index 2023553a6c..0000000000 --- a/test/logger/test_logger.rb +++ /dev/null @@ -1,402 +0,0 @@ -# coding: US-ASCII -# frozen_string_literal: false -require 'logger' -require 'tempfile' - -class TestLogger < Test::Unit::TestCase - include Logger::Severity - - def setup - @logger = Logger.new(nil) - end - - class Log - attr_reader :label, :datetime, :pid, :severity, :progname, :msg - def initialize(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(logger, severity, msg, progname = nil, &block) - log(logger, :add, severity, msg, progname, &block) - end - - def log(logger, msg_id, *arg, &block) - Log.new(log_raw(logger, msg_id, *arg, &block)) - end - - def log_raw(logger, msg_id, *arg, &block) - Tempfile.create(File.basename(__FILE__) + '.log') {|logdev| - logger.instance_eval { @logdev = Logger::LogDevice.new(logdev) } - logger.__send__(msg_id, *arg, &block) - logdev.rewind - logdev.read - } - end - - def test_level - @logger.level = UNKNOWN - assert_equal(UNKNOWN, @logger.level) - @logger.level = INFO - assert_equal(INFO, @logger.level) - @logger.sev_threshold = ERROR - assert_equal(ERROR, @logger.sev_threshold) - @logger.sev_threshold = WARN - assert_equal(WARN, @logger.sev_threshold) - assert_equal(WARN, @logger.level) - - @logger.level = DEBUG - assert(@logger.debug?) - assert(@logger.info?) - @logger.level = INFO - assert(!@logger.debug?) - assert(@logger.info?) - assert(@logger.warn?) - @logger.level = WARN - assert(!@logger.info?) - assert(@logger.warn?) - assert(@logger.error?) - @logger.level = ERROR - assert(!@logger.warn?) - assert(@logger.error?) - assert(@logger.fatal?) - @logger.level = FATAL - assert(!@logger.error?) - assert(@logger.fatal?) - @logger.level = UNKNOWN - assert(!@logger.error?) - assert(!@logger.fatal?) - end - - def test_symbol_level - logger_symbol_levels = { - debug: DEBUG, - info: INFO, - warn: WARN, - error: ERROR, - fatal: FATAL, - unknown: UNKNOWN, - DEBUG: DEBUG, - INFO: INFO, - WARN: WARN, - ERROR: ERROR, - FATAL: FATAL, - UNKNOWN: UNKNOWN, - } - logger_symbol_levels.each do |symbol, level| - @logger.level = symbol - assert(@logger.level == level) - end - assert_raise(ArgumentError) { @logger.level = :something_wrong } - end - - def test_string_level - logger_string_levels = { - 'debug' => DEBUG, - 'info' => INFO, - 'warn' => WARN, - 'error' => ERROR, - 'fatal' => FATAL, - 'unknown' => UNKNOWN, - 'DEBUG' => DEBUG, - 'INFO' => INFO, - 'WARN' => WARN, - 'ERROR' => ERROR, - 'FATAL' => FATAL, - 'UNKNOWN' => UNKNOWN, - } - logger_string_levels.each do |string, level| - @logger.level = string - assert(@logger.level == level) - end - assert_raise(ArgumentError) { @logger.level = 'something_wrong' } - end - - def test_reraise_write_errors - c = Object.new - e = Class.new(StandardError) - c.define_singleton_method(:write){|*| raise e} - c.define_singleton_method(:close){} - logger = Logger.new(c, :reraise_write_errors=>[e]) - assert_raise(e) { logger.warn('foo') } - end - - def test_progname - assert_nil(@logger.progname) - @logger.progname = "name" - assert_equal("name", @logger.progname) - end - - def test_datetime_format - verbose, $VERBOSE = $VERBOSE, false - dummy = STDERR - logger = Logger.new(dummy) - log = log_add(logger, INFO, "foo") - assert_match(/^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\s*\d+$/, log.datetime) - logger.datetime_format = "%d%b%Y@%H:%M:%S" - log = log_add(logger, INFO, "foo") - assert_match(/^\d\d\w\w\w\d\d\d\d@\d\d:\d\d:\d\d$/, log.datetime) - logger.datetime_format = "" - log = log_add(logger, INFO, "foo") - assert_match(/^$/, log.datetime) - ensure - $VERBOSE = verbose - end - - def test_formatter - dummy = STDERR - logger = Logger.new(dummy) - # default - log = log(logger, :info, "foo") - assert_equal("foo\n", log.msg) - # config - logger.formatter = proc { |severity, timestamp, progname, msg| - "#{severity}:#{msg}\n\n" - } - line = log_raw(logger, :info, "foo") - assert_equal("INFO:foo\n\n", line) - # recover - logger.formatter = nil - log = log(logger, :info, "foo") - assert_equal("foo\n", log.msg) - # again - o = Object.new - def o.call(severity, timestamp, progname, msg) - "<<#{severity}-#{msg}>>\n" - end - logger.formatter = o - line = log_raw(logger, :info, "foo") - assert_equal("<""<INFO-foo>>\n", line) - end - - def test_initialize - logger = Logger.new(STDERR) - assert_nil(logger.progname) - assert_equal(DEBUG, logger.level) - assert_nil(logger.datetime_format) - end - - def test_initialize_with_level - # default - logger = Logger.new(STDERR) - assert_equal(Logger::DEBUG, logger.level) - # config - logger = Logger.new(STDERR, level: :info) - assert_equal(Logger::INFO, logger.level) - end - - def test_initialize_with_progname - # default - logger = Logger.new(STDERR) - assert_equal(nil, logger.progname) - # config - logger = Logger.new(STDERR, progname: :progname) - assert_equal(:progname, logger.progname) - end - - def test_initialize_with_formatter - # default - logger = Logger.new(STDERR) - log = log(logger, :info, "foo") - assert_equal("foo\n", log.msg) - # config - logger = Logger.new(STDERR, formatter: proc { |severity, timestamp, progname, msg| - "#{severity}:#{msg}\n\n" - }) - line = log_raw(logger, :info, "foo") - assert_equal("INFO:foo\n\n", line) - end - - def test_initialize_with_datetime_format - # default - logger = Logger.new(STDERR) - log = log_add(logger, INFO, "foo") - assert_match(/^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d.\s*\d+$/, log.datetime) - # config - logger = Logger.new(STDERR, datetime_format: "%d%b%Y@%H:%M:%S") - log = log_add(logger, INFO, "foo") - assert_match(/^\d\d\w\w\w\d\d\d\d@\d\d:\d\d:\d\d$/, log.datetime) - end - - def test_reopen - logger = Logger.new(STDERR) - logger.reopen(STDOUT) - assert_equal(STDOUT, logger.instance_variable_get(:@logdev).dev) - end - - def test_reopen_nil_logdevice - logger = Logger.new(File::NULL) - assert_nothing_raised do - logger.reopen(STDOUT) - end - end - - def test_add - logger = Logger.new(nil) - logger.progname = "my_progname" - assert(logger.add(INFO)) - log = log_add(logger, nil, "msg") - assert_equal("ANY", log.severity) - assert_equal("my_progname", log.progname) - logger.level = WARN - assert(logger.log(INFO)) - assert_nil(log_add(logger, INFO, "msg").msg) - log = log_add(logger, WARN, nil) { "msg" } - assert_equal("msg\n", log.msg) - log = log_add(logger, WARN, "") { "msg" } - assert_equal("\n", log.msg) - assert_equal("my_progname", log.progname) - log = log_add(logger, WARN, nil, "progname?") - assert_equal("progname?\n", log.msg) - assert_equal("my_progname", log.progname) - # - logger = Logger.new(nil) - log = log_add(logger, INFO, nil, false) - assert_equal("false\n", log.msg) - end - - def test_add_binary_data_with_binmode_logdev - EnvUtil.with_default_internal(Encoding::UTF_8) do - begin - tempfile = Tempfile.new("logger") - tempfile.close - filename = tempfile.path - File.unlink(filename) - - logger = Logger.new filename, binmode: true - logger.level = Logger::DEBUG - - str = +"\x80" - str.force_encoding("ASCII-8BIT") - - logger.add Logger::DEBUG, str - assert_equal(2, File.binread(filename).split(/\n/).size) - ensure - logger.close - tempfile.unlink - end - end - end - - def test_level_log - logger = Logger.new(nil) - logger.progname = "my_progname" - log = log(logger, :debug, "custom_progname") { "msg" } - assert_equal("msg\n", log.msg) - assert_equal("custom_progname", log.progname) - assert_equal("DEBUG", log.severity) - assert_equal("D", log.label) - # - log = log(logger, :debug) { "msg_block" } - assert_equal("msg_block\n", log.msg) - assert_equal("my_progname", log.progname) - log = log(logger, :debug, "msg_inline") - assert_equal("msg_inline\n", log.msg) - assert_equal("my_progname", log.progname) - # - log = log(logger, :info, "custom_progname") { "msg" } - assert_equal("msg\n", log.msg) - assert_equal("custom_progname", log.progname) - assert_equal("INFO", log.severity) - assert_equal("I", log.label) - # - log = log(logger, :warn, "custom_progname") { "msg" } - assert_equal("msg\n", log.msg) - assert_equal("custom_progname", log.progname) - assert_equal("WARN", log.severity) - assert_equal("W", log.label) - # - log = log(logger, :error, "custom_progname") { "msg" } - assert_equal("msg\n", log.msg) - assert_equal("custom_progname", log.progname) - assert_equal("ERROR", log.severity) - assert_equal("E", log.label) - # - log = log(logger, :fatal, "custom_progname") { "msg" } - assert_equal("msg\n", log.msg) - assert_equal("custom_progname", log.progname) - assert_equal("FATAL", log.severity) - assert_equal("F", log.label) - # - log = log(logger, :unknown, "custom_progname") { "msg" } - assert_equal("msg\n", log.msg) - assert_equal("custom_progname", log.progname) - assert_equal("ANY", log.severity) - assert_equal("A", log.label) - end - - def test_close - r, w = IO.pipe - assert(!w.closed?) - logger = Logger.new(w) - logger.close - assert(w.closed?) - r.close - end - - class MyError < StandardError - end - - class MyMsg - def inspect - "my_msg" - end - end - - def test_format - logger = Logger.new(nil) - log = log_add(logger, INFO, "msg\n") - assert_equal("msg\n\n", log.msg) - begin - raise MyError.new("excn") - rescue MyError => e - log = log_add(logger, INFO, e) - assert_match(/^excn \(TestLogger::MyError\)/, log.msg) - # expects backtrace is dumped across multi lines. 10 might be changed. - assert(log.msg.split(/\n/).size >= 10) - end - log = log_add(logger, INFO, MyMsg.new) - assert_equal("my_msg\n", log.msg) - end - - def test_lshift - r, w = IO.pipe - logger = Logger.new(w) - logger << "msg" - IO.select([r], nil, nil, 0.1) - w.close - msg = r.read - r.close - assert_equal("msg", msg) - # - r, w = IO.pipe - logger = Logger.new(w) - logger << "msg2\n\n" - IO.select([r], nil, nil, 0.1) - w.close - msg = r.read - r.close - assert_equal("msg2\n\n", msg) - end - - class CustomLogger < Logger - def level - INFO - end - end - - def test_overriding_level - logger = CustomLogger.new(nil) - log = log(logger, :info) { "msg" } - assert_equal "msg\n", log.msg - # - log = log(logger, :debug) { "msg" } - assert_nil log.msg - end - - def test_does_not_instantiate_log_device_for_File_NULL - l = Logger.new(File::NULL) - assert_nil(l.instance_variable_get(:@logdev)) - end -end diff --git a/test/logger/test_logperiod.rb b/test/logger/test_logperiod.rb deleted file mode 100644 index ee38d877c6..0000000000 --- a/test/logger/test_logperiod.rb +++ /dev/null @@ -1,67 +0,0 @@ -# coding: US-ASCII -# frozen_string_literal: false -require "logger" -require "time" - -class TestLogPeriod < Test::Unit::TestCase - def test_next_rotate_time - time = Time.parse("2019-07-18 13:52:02") - - assert_next_rotate_time_words(time, "2019-07-19 00:00:00", ["daily", :daily]) - assert_next_rotate_time_words(time, "2019-07-21 00:00:00", ["weekly", :weekly]) - assert_next_rotate_time_words(time, "2019-08-01 00:00:00", ["monthly", :monthly]) - - assert_raise(ArgumentError) { Logger::Period.next_rotate_time(time, "invalid") } - end - - def test_next_rotate_time_extreme_cases - # First day of Month and Saturday - time = Time.parse("2018-07-01 00:00:00") - - assert_next_rotate_time_words(time, "2018-07-02 00:00:00", ["daily", :daily]) - assert_next_rotate_time_words(time, "2018-07-08 00:00:00", ["weekly", :weekly]) - assert_next_rotate_time_words(time, "2018-08-01 00:00:00", ["monthly", :monthly]) - - assert_raise(ArgumentError) { Logger::Period.next_rotate_time(time, "invalid") } - end - - def test_previous_period_end - time = Time.parse("2019-07-18 13:52:02") - - assert_previous_period_end_words(time, "2019-07-17 23:59:59", ["daily", :daily]) - assert_previous_period_end_words(time, "2019-07-13 23:59:59", ["weekly", :weekly]) - assert_previous_period_end_words(time, "2019-06-30 23:59:59", ["monthly", :monthly]) - - assert_raise(ArgumentError) { Logger::Period.previous_period_end(time, "invalid") } - end - - def test_previous_period_end_extreme_cases - # First day of Month and Saturday - time = Time.parse("2018-07-01 00:00:00") - previous_date = "2018-06-30 23:59:59" - - assert_previous_period_end_words(time, previous_date, ["daily", :daily]) - assert_previous_period_end_words(time, previous_date, ["weekly", :weekly]) - assert_previous_period_end_words(time, previous_date, ["monthly", :monthly]) - - assert_raise(ArgumentError) { Logger::Period.previous_period_end(time, "invalid") } - end - - private - - def assert_next_rotate_time_words(time, next_date, words) - assert_time_words(:next_rotate_time, time, next_date, words) - end - - def assert_previous_period_end_words(time, previous_date, words) - assert_time_words(:previous_period_end, time, previous_date, words) - end - - def assert_time_words(method, time, date, words) - words.each do |word| - daily_result = Logger::Period.public_send(method, time, word) - expected_result = Time.parse(date) - assert_equal(expected_result, daily_result) - end - end -end diff --git a/test/logger/test_severity.rb b/test/logger/test_severity.rb deleted file mode 100644 index e1069c8262..0000000000 --- a/test/logger/test_severity.rb +++ /dev/null @@ -1,58 +0,0 @@ -# coding: US-ASCII -# frozen_string_literal: false -require 'logger' - -class TestLoggerSeverity < Test::Unit::TestCase - include Logger::Severity - - def test_enum - logger_levels = Logger.constants - levels = ["WARN", "UNKNOWN", "INFO", "FATAL", "DEBUG", "ERROR"] - Logger::Severity.constants.each do |level| - assert(levels.include?(level.to_s)) - assert(logger_levels.include?(level)) - end - assert_equal(levels.size, Logger::Severity.constants.size) - end - - def test_level_assignment - logger = Logger.new(nil) - - Logger::Severity.constants.each do |level| - next if level == :UNKNOWN - - logger.send("#{level.downcase}!") - assert(logger.level) == Logger::Severity.const_get(level) - end - end - - def test_thread_local_level - logger = Logger.new(nil) - logger.level = INFO # default level - other = Logger.new(nil) - other.level = ERROR # default level - - assert_equal(other.level, ERROR) - logger.with_level(:WARN) do - assert_equal(other.level, ERROR) - assert_equal(logger.level, WARN) - - logger.with_level(DEBUG) do # verify reentrancy - assert_equal(logger.level, DEBUG) - - Thread.new do - assert_equal(logger.level, INFO) - logger.with_level(:WARN) do - assert_equal(other.level, ERROR) - assert_equal(logger.level, WARN) - end - assert_equal(logger.level, INFO) - end.join - - assert_equal(logger.level, DEBUG) - end - assert_equal(logger.level, WARN) - end - assert_equal(logger.level, INFO) - end -end |
