Skip to content

Commit

Permalink
test_puma_server, test_puma_server_ssl - refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
MSP-Greg committed Feb 15, 2021
1 parent b54ed51 commit 03c3e3e
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 31 deletions.
35 changes: 19 additions & 16 deletions test/test_puma_server.rb
Expand Up @@ -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)
Expand Down Expand Up @@ -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]]
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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

Expand All @@ -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

Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -1159,31 +1162,31 @@ 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
backend = NIO::Selector.backends.first

@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
35 changes: 20 additions & 15 deletions test/test_puma_server_ssl.rb
Expand Up @@ -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
Expand Down Expand Up @@ -36,6 +36,7 @@ def ssl_error(error, ssl_socket)

class TestPumaServerSSL < Minitest::Test
parallelize_me!

def setup
@http = nil
@server = nil
Expand Down Expand Up @@ -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
Expand All @@ -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

Expand Down Expand Up @@ -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]]
Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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

Expand Down

0 comments on commit 03c3e3e

Please sign in to comment.