diff --git a/test/test_puma_server.rb b/test/test_puma_server.rb index c7d14e97..88a9bc19 100644 --- a/test/test_puma_server.rb +++ b/test/test_puma_server.rb @@ -18,14 +18,14 @@ class TestPumaServer < Minitest::Test end def teardown - @server.stop(true) @ios.each { |io| io.close if io && !io.closed? } + @server.stop true end def server_run(**options, &block) @server = Puma::Server.new block || @app, @events, options @port = (@server.add_tcp_listener @host, 0).addr[1] - @server.run + @thread = @server.run sleep 0.15 if Puma.jruby? end @@ -1191,16 +1191,34 @@ EOF end def test_drain_on_shutdown - wait = Queue.new server_run(drain_on_shutdown: true, max_threads: 1) do - wait.pop rescue nil + sleep 0.005 [200, {}, ["DONE"]] end - connections = Array.new(10) {send_http "GET / HTTP/1.0\r\n\r\n"} + connections = Array.new(20) { send_http "GET / HTTP/1.0\r\n\r\n" } @server.stop - wait.close + @thread.join connections.each do |s| assert_match 'DONE', s.read end end + + def test_not_drain_on_shutdown + server_run(max_threads: 1) do + sleep 0.005 + [200, {}, ["DONE"]] + end + connections = Array.new(20) { send_http "GET / HTTP/1.0\r\n\r\n" } + @server.stop + @thread.join + bad = 0 + connections.each do |s| + begin + assert_match 'DONE', s.read + rescue Errno::ECONNRESET + bad += 1 + end + end + assert_operator bad, :>, 5 + end end