diff --git a/test/test_puma_server.rb b/test/test_puma_server.rb index eb05d1c9e0..87baa38478 100644 --- a/test/test_puma_server.rb +++ b/test/test_puma_server.rb @@ -18,8 +18,8 @@ def setup end def teardown - @server.stop(true) @ios.each { |io| io.close if io && !io.closed? } + @server.stop true end def server_run(app: @app, early_hints: false) @@ -88,7 +88,7 @@ def test_puma_socket end def test_very_large_return - giant = "x" * 2056610 + giant = '─x─x-x' * 209_716 # bytesize is 2_097_160 (2 MB is 2_097_152) server_run app: ->(env) do [200, {}, [giant]] @@ -101,9 +101,13 @@ def test_very_large_return break if line == "\r\n" end - out = sock.read + body = sock.read.force_encoding('UTF-8') - assert_equal giant.bytesize, out.bytesize + assert_equal giant.bytesize, body.bytesize + # just check start and end, in case of error, we don't want 2MB dumped + # to the console + assert_equal giant[0..100], body[0..100] + assert_equal giant[-100..-1], body[-100..-1] end def test_respect_x_forwarded_proto @@ -264,7 +268,6 @@ def test_eof_on_connection_close_is_not_logged_as_an_error new_connection.close # Make a connection and close without writing - @server.stop(true) stderr = @events.stderr.string assert stderr.empty?, "Expected stderr from server to be empty but it was #{stderr.inspect}" end @@ -274,7 +277,7 @@ def test_force_shutdown_custom_error_message @server = Puma::Server.new @app, @events, {:lowlevel_error_handler => handler, :force_shutdown_after => 2} server_run app: ->(env) do - @server.stop + @server.stop true sleep 5 end @@ -289,7 +292,7 @@ def test_force_shutdown_error_default @server = Puma::Server.new @app, @events, {:force_shutdown_after => 2} server_run app: ->(env) do - @server.stop + @server.stop true sleep 5 end @@ -377,7 +380,7 @@ def test_status_hook_fires_when_server_changes_states assert_equal [:booting, :running], states - @server.stop(true) + @server.stop true assert_equal [:booting, :running, :stop, :done], states end @@ -1148,7 +1151,7 @@ def test_idle_connections_closed_immediately_on_shutdown server_run sock = new_connection sleep 0.5 # give enough time for new connection to enter reactor - @server.stop false + @server.stop assert IO.select([sock], nil, nil, 1), 'Unexpected timeout' assert_raises EOFError do @@ -1159,20 +1162,23 @@ def test_idle_connections_closed_immediately_on_shutdown def test_run_stop_thread_safety 100.times do thread = @server.run - @server.stop + @server.stop true assert thread.join(1) end end def test_command_ignored_before_run - @server.stop # ignored - @server.run - @server.halt done = Queue.new @server.events.register(:state) do |state| done << @server.instance_variable_get(:@status) if state == :done end + + @server.stop # ignored + @server.run + @server.halt + assert_equal :halt, done.pop + assert_empty done end def test_custom_io_selector @@ -1180,10 +1186,7 @@ def test_custom_io_selector @server = Puma::Server.new @app, @events, {:io_selector_backend => backend} @server.run - @server.stop - selector = @server.instance_variable_get(:@reactor).instance_variable_get(:@selector) - assert_equal selector.backend, backend end end diff --git a/test/test_puma_server_ssl.rb b/test/test_puma_server_ssl.rb index e42b663cb5..3357f874e8 100644 --- a/test/test_puma_server_ssl.rb +++ b/test/test_puma_server_ssl.rb @@ -2,12 +2,12 @@ # # helper is required first since it loads Puma, which needs to be # loaded so HAS_SSL is defined -require_relative "helper" +require_relative 'helper' if ::Puma::HAS_SSL - require "puma/minissl" - require "puma/events" - require "net/http" + require 'puma/minissl' + require 'puma/events' + require 'net/http' class SSLEventsHelper < ::Puma::Events attr_accessor :addr, :cert, :error @@ -36,6 +36,7 @@ def ssl_error(error, ssl_socket) class TestPumaServerSSL < Minitest::Test parallelize_me! + def setup @http = nil @server = nil @@ -68,10 +69,10 @@ def start_server @events = SSLEventsHelper.new STDOUT, STDERR @server = Puma::Server.new app, @events - @port = (@server.add_ssl_listener @host, 0, ctx).addr[1] + @bind_port = (@server.add_ssl_listener @host, 0, ctx).addr[1] @server.run - @http = Net::HTTP.new @host, @port + @http = Net::HTTP.new @host, @bind_port @http.use_ssl = true @http.verify_mode = OpenSSL::SSL::VERIFY_NONE end @@ -82,8 +83,8 @@ def test_url_scheme_for_https @http.start do req = Net::HTTP::Get.new "/", {} - @http.request(req) do |rep| - body = rep.body + @http.request(req) do |resp| + body = resp.body end end @@ -114,7 +115,7 @@ def test_request_wont_block_thread def test_very_large_return start_server - giant = "x" * 2056610 + giant = '─x─x-x' * 209_716 # bytesize is 2_097_160 (2 MB is 2_097_152) @server.app = proc do [200, {}, [giant]] @@ -123,12 +124,16 @@ def test_very_large_return body = nil @http.start do req = Net::HTTP::Get.new "/" - @http.request(req) do |rep| - body = rep.body + @http.request(req) do |resp| + body = resp.body.force_encoding('UTF-8') end end assert_equal giant.bytesize, body.bytesize + # just check start and end, in case of error, we don't want 2MB dumped + # to the console + assert_equal giant[0..100], body[0..100] + assert_equal giant[-100..-1], body[-100..-1] end def test_form_submit @@ -138,8 +143,8 @@ def test_form_submit req = Net::HTTP::Post.new '/' req.set_form_data('a' => '1', 'b' => '2') - @http.request(req) do |rep| - body = rep.body + @http.request(req) do |resp| + body = resp.body end end @@ -218,14 +223,14 @@ def test_http_rejection req_http = Net::HTTP::Get.new "/", {} # Net::ReadTimeout - TruffleRuby assert_raises(Errno::ECONNREFUSED, EOFError, Net::ReadTimeout) do - http.start.request(req_http) { |rep| body_http = rep.body } + http.start.request(req_http) { |resp| body_http = resp.body } end end ssl = Thread.new do @http.start do req_https = Net::HTTP::Get.new "/", {} - @http.request(req_https) { |rep_https| body_https = rep_https.body } + @http.request(req_https) { |resp_https| body_https = resp_https.body } end end