diff options
Diffstat (limited to 'test/test_reopen_logs.rb')
-rw-r--r-- | test/test_reopen_logs.rb | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/test/test_reopen_logs.rb b/test/test_reopen_logs.rb new file mode 100644 index 0000000..a5aeca7 --- /dev/null +++ b/test/test_reopen_logs.rb @@ -0,0 +1,59 @@ +# Copyright (C) 2013, Eric Wong <normalperson@yhbt.net> and all contributors +# License: GPLv3 or later (https://www.gnu.org/licenses/gpl-3.0.txt) +require_relative 'server_helper' +require 'rack/commonlogger' + +class TestReopenLogs < Testcase + parallelize_me! + include ServerHelper + alias setup server_helper_setup + alias teardown server_helper_teardown + + def test_reopen_logs_noworker; reopen(false); end + def test_reopen_logs_worker; reopen(true); end + + def reopen(worker) + err = @err + out = tmpfile(%w(log .out)) + opath = out.path + cfg = Yahns::Config.new + host, port = @srv.addr[3], @srv.addr[1] + cfg.instance_eval do + stderr_path err.path + stdout_path opath + GTL.synchronize do + app = Rack::Builder.new do + use Rack::CommonLogger, $stdout + use Rack::ContentLength + use Rack::ContentType, "text/plain" + run lambda { |_| [ 200, {}, [ "#$$" ] ] } + end + app(:rack, app.to_app) { listen "#{host}:#{port}" } + end + worker_processes 1 if worker + end + pid = fork do + ENV["YAHNS_FD"] = @srv.fileno.to_s + Yahns::Server.new(cfg).start.join + end + Net::HTTP.start(host, port) do |http| + res = http.request(Net::HTTP::Get.new("/aaa")) + assert_equal 200, res.code.to_i + orig = res.body + Timeout.timeout(10) { Thread.pass until File.read(opath) =~ /aaa/ } + File.unlink(opath) + Process.kill(:USR1, pid) + Timeout.timeout(10) { sleep(0.01) until File.exist?(opath) } + + res = http.request(Net::HTTP::Get.new("/bbb")) + assert_equal 200, res.code.to_i + assert_equal orig, res.body + Timeout.timeout(10) { Thread.pass until File.read(opath) =~ /bbb/ } + end + rescue => e + Yahns::Log.exception(Logger.new($stderr), "test", e) + raise + ensure + quit_wait(pid) + end +end |