From 3c8072937c66f7536edfc3f18e76d969cdd62a93 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 2 Nov 2013 06:15:02 +0000 Subject: logger.rb: fix r43511 for Windows * lib/logger.rb (Logger::LogDevice::LogDeviceMutex#lock_shift_log): open file can't be removed or renamed on Windows. [ruby-dev:47790] [Bug #9046] * test/logger/test_logger.rb (TestLogDevice#run_children): don't use fork. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@43513 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/logger/test_logger.rb | 71 +++++++++++++++++----------------------------- 1 file changed, 26 insertions(+), 45 deletions(-) (limited to 'test') diff --git a/test/logger/test_logger.rb b/test/logger/test_logger.rb index 92f27dfe93..6bc9ab8a0a 100644 --- a/test/logger/test_logger.rb +++ b/test/logger/test_logger.rb @@ -2,6 +2,7 @@ require 'test/unit' require 'logger' require 'tempfile' +require_relative '../ruby/envutil' class TestLoggerSeverity < Test::Unit::TestCase @@ -486,30 +487,16 @@ class TestLogDevice < Test::Unit::TestCase File.unlink(logfile1) if File.exist?(logfile1) File.unlink(logfile2) if File.exist?(logfile2) begin - logger = Logger.new(logfile, 4, 10) - r, w = IO.pipe - $stderr = w # To capture #warn output in Logger - pid1 = Process.fork do + stderr = run_children(2, [logfile], <<-'END') + logger = Logger.new(ARGV[0], 4, 10) 10.times do logger.info '0' * 15 end - end - pid2 = Process.fork do - 10.times do - logger.info '0' * 15 - end - end - Process.waitpid pid1 - Process.waitpid pid2 - w.close - stderr = r.read - r.close + 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 - $stderr = STDERR # restore - logger.close if logger File.unlink(logfile) if File.exist?(logfile) File.unlink(logfile0) if File.exist?(logfile0) File.unlink(logfile1) if File.exist?(logfile1) @@ -523,30 +510,16 @@ class TestLogDevice < Test::Unit::TestCase filename2 = @filename + ".#{yyyymmdd}.1" filename3 = @filename + ".#{yyyymmdd}.2" begin - logger = Logger.new(@filename, 'now') - r, w = IO.pipe - $stderr = w # To capture #warn output in Logger - pid1 = Process.fork do - 10.times do - logger.info '0' * 15 - end - end - pid2 = Process.fork do + stderr = run_children(2, [@filename], <<-'END') + logger = Logger.new(ARGV[0], 'now') 10.times do logger.info '0' * 15 end - end - Process.waitpid pid1 - Process.waitpid pid2 - w.close - stderr = r.read - r.close + 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 - $stderr = STDERR # restore - logger.close if logger [filename1, filename2, filename3].each do |filename| File.unlink(filename) if File.exist?(filename) end @@ -557,26 +530,34 @@ class TestLogDevice < Test::Unit::TestCase tmpfile = Tempfile.new([File.basename(__FILE__, '.*'), '_1.log']) logfile = tmpfile.path tmpfile.close(true) - logdev = Logger::LogDevice.new(logfile) - File.unlink(logfile) if File.exist?(logfile) begin 20.times do - pid1 = Process.fork do + run_children(2, [logfile], <<-'END') + logfile = ARGV[0] + logdev = Logger::LogDevice.new(logfile) logdev.send(:open_logfile, logfile) - end - pid2 = Process.fork do - logdev.send(:open_logfile, logfile) - end - Process.waitpid pid1 - Process.waitpid pid2 - assert_not_equal(2, File.readlines(logfile).grep(/# Logfile created on/).size) + END + assert_equal(1, File.readlines(logfile).grep(/# Logfile created on/).size) File.unlink(logfile) end ensure - logdev.close if logdev File.unlink(logfile) if File.exist?(logfile) end end + + 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 -- cgit v1.2.3