mirror of
https://github.com/puma/puma.git
synced 2022-11-09 13:48:40 -05:00
a284179d9d
Uses `flush` after every write if the stdio it is not synchronized. Closes: https://github.com/puma/puma/issues/1948 Co-authored-by: Nate Berkopec <nate.berkopec@gmail.com>
95 lines
2.1 KiB
Ruby
95 lines
2.1 KiB
Ruby
require 'puma/error_logger'
|
|
require_relative "helper"
|
|
|
|
class TestErrorLogger < Minitest::Test
|
|
Req = Struct.new(:env, :body)
|
|
|
|
def test_stdio
|
|
error_logger = Puma::ErrorLogger.stdio
|
|
|
|
assert_equal STDERR, error_logger.ioerr
|
|
end
|
|
|
|
|
|
def test_stdio_respects_sync
|
|
error_logger = Puma::ErrorLogger.stdio
|
|
|
|
assert_equal STDERR.sync, error_logger.ioerr.sync
|
|
assert_equal STDERR, error_logger.ioerr
|
|
end
|
|
|
|
def test_info_with_only_error
|
|
_, err = capture_io do
|
|
Puma::ErrorLogger.stdio.info(error: StandardError.new('ready'))
|
|
end
|
|
|
|
assert_match %r!#<StandardError: ready>!, err
|
|
end
|
|
|
|
def test_info_with_request
|
|
env = {
|
|
'REQUEST_METHOD' => 'GET',
|
|
'PATH_INFO' => '/debug',
|
|
'HTTP_X_FORWARDED_FOR' => '8.8.8.8'
|
|
}
|
|
req = Req.new(env, '{"hello":"world"}')
|
|
|
|
_, err = capture_io do
|
|
Puma::ErrorLogger.stdio.info(error: StandardError.new, req: req)
|
|
end
|
|
|
|
assert_match %r!\("GET /debug" - \(8\.8\.8\.8\)\)!, err
|
|
end
|
|
|
|
def test_info_with_text
|
|
_, err = capture_io do
|
|
Puma::ErrorLogger.stdio.info(text: 'The client disconnected while we were reading data')
|
|
end
|
|
|
|
assert_match %r!The client disconnected while we were reading data!, err
|
|
end
|
|
|
|
def test_debug_without_debug_mode
|
|
_, err = capture_io do
|
|
Puma::ErrorLogger.stdio.debug(text: 'blank')
|
|
end
|
|
|
|
assert_empty err
|
|
end
|
|
|
|
def test_debug_with_debug_mode
|
|
with_debug_mode do
|
|
_, err = capture_io do
|
|
Puma::ErrorLogger.stdio.debug(text: 'non-blank')
|
|
end
|
|
|
|
assert_match %r!non-blank!, err
|
|
end
|
|
end
|
|
|
|
def test_debug_backtrace_logging
|
|
with_debug_mode do
|
|
def dummy_error
|
|
raise StandardError.new('non-blank')
|
|
rescue => e
|
|
Puma::ErrorLogger.stdio.debug(error: e)
|
|
end
|
|
|
|
_, err = capture_io do
|
|
dummy_error
|
|
end
|
|
|
|
assert_match %r!non-blank!, err
|
|
assert_match %r!:in `dummy_error'!, err
|
|
end
|
|
end
|
|
|
|
private
|
|
|
|
def with_debug_mode
|
|
original_debug, ENV["PUMA_DEBUG"] = ENV["PUMA_DEBUG"], "1"
|
|
yield
|
|
ensure
|
|
ENV["PUMA_DEBUG"] = original_debug
|
|
end
|
|
end
|