summaryrefslogtreecommitdiff
path: root/test/logger
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-12-14 05:43:01 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-12-14 05:43:01 +0000
commit95ed081663af63b688f5094d2c454adb4e64f63f (patch)
tree1f414110b05c6f12ccdd358b42d49ab3d6c184b1 /test/logger
parent742659cb6c03da6ab61c7036a0ca6abdd5964119 (diff)
logger.rb: fix extra log ratation
* lib/logger.rb (lock_shift_log): no need to rotate the log file if it has been rotated by another process. based on the patch by no6v (Nobuhiro IMAI) in [ruby-core:58620]. [Bug #9133] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44203 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/logger')
-rw-r--r--test/logger/test_logger.rb39
1 files changed, 39 insertions, 0 deletions
diff --git a/test/logger/test_logger.rb b/test/logger/test_logger.rb
index 04bf779538..eda6484a56 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 'tmpdir'
require_relative '../ruby/envutil'
@@ -542,6 +543,44 @@ class TestLogDevice < Test::Unit::TestCase
end
end
+ def test_shifting_size_not_rotate_too_much
+ d(@filename).__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)
+ 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
+ end
+
private
def run_children(n, args, src)