Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Removes connected_port, implements connected_ports #2076

Merged
merged 1 commit into from Feb 27, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
19 changes: 11 additions & 8 deletions lib/puma/binder.rb
Expand Up @@ -226,19 +226,22 @@ def add_tcp_listener(host, port, optimize_for_latency=true, backlog=1024)
end

host = host[1..-2] if host and host[0..0] == '['
s = TCPServer.new(host, port)
tcp_server = TCPServer.new(host, port)
if optimize_for_latency
s.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
tcp_server.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
end
s.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR, true)
s.listen backlog
@connected_port = s.addr[1]
tcp_server.setsockopt(Socket::SOL_SOCKET,Socket::SO_REUSEADDR, true)
tcp_server.listen backlog

@ios << s
s
@ios << tcp_server
tcp_server
end

attr_reader :connected_port
attr_reader :connected_ports
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not necessary as you define the method on the next line


def connected_ports
ios.map { |io| io.addr[1] }
end

def inherit_tcp_listener(host, port, fd)
if fd.kind_of? TCPServer
Expand Down
6 changes: 3 additions & 3 deletions lib/puma/launcher.rb
Expand Up @@ -187,9 +187,9 @@ def run
@binder.close_unix_paths
end

# Return which tcp port the launcher is using, if it's using TCP
def connected_port
@binder.connected_port
# Return all tcp ports the launcher may be using, TCP or SSL
def connected_ports
@binder.connected_ports
end

def restart_args
Expand Down
4 changes: 4 additions & 0 deletions lib/puma/minissl.rb
Expand Up @@ -270,6 +270,10 @@ def accept_nonblock
Socket.new io, engine
end

def addr
@socket.addr
end

def close
@socket.close unless @socket.closed? # closed? call is for Windows
end
Expand Down
2 changes: 1 addition & 1 deletion lib/puma/server.rb
Expand Up @@ -89,7 +89,7 @@ def initialize(app, events=Events.stdio, options={})

attr_accessor :binder, :leak_stack_on_error, :early_hints

def_delegators :@binder, :add_tcp_listener, :add_ssl_listener, :add_unix_listener, :connected_port
def_delegators :@binder, :add_tcp_listener, :add_ssl_listener, :add_unix_listener, :connected_ports

def inherit_binder(bind)
@binder = bind
Expand Down
8 changes: 2 additions & 6 deletions test/test_cli.rb
Expand Up @@ -37,12 +37,10 @@ def teardown
end

def test_control_for_tcp
tcp = UniquePort.call
cntl = UniquePort.call
url = "tcp://127.0.0.1:#{cntl}/"

cli = Puma::CLI.new ["-b", "tcp://127.0.0.1:#{tcp}",
"--control-url", url,
cli = Puma::CLI.new [ "--control-url", url,
"--control-token", "",
"test/rackup/lobster.ru"], @events

Expand All @@ -66,14 +64,12 @@ def test_control_for_tcp
end

def test_control_for_ssl
app_port = UniquePort.call
control_port = UniquePort.call
control_host = "127.0.0.1"
control_url = "ssl://#{control_host}:#{control_port}?#{ssl_query}"
token = "token"

cli = Puma::CLI.new ["-b", "tcp://127.0.0.1:#{app_port}",
"--control-url", control_url,
cli = Puma::CLI.new ["--control-url", control_url,
"--control-token", token,
"test/rackup/lobster.ru"], @events

Expand Down
3 changes: 2 additions & 1 deletion test/test_events.rb
Expand Up @@ -167,7 +167,8 @@ def test_parse_error
server.add_tcp_listener host, port
server.run

sock = TCPSocket.new host, server.connected_port
port = server.connected_ports[0]
sock = TCPSocket.new host, port
path = "/"
params = "a"*1024*10

Expand Down
14 changes: 9 additions & 5 deletions test/test_puma_server.rb
Expand Up @@ -39,14 +39,16 @@ def header(sock)
end

def send_http_and_read(req)
sock = TCPSocket.new @host, @server.connected_port
port = @server.connected_ports[0]
sock = TCPSocket.new @host, port
@ios << sock
sock << req
sock.read
end

def send_http(req)
sock = TCPSocket.new @host, @server.connected_port
port = @server.connected_ports[0]
sock = TCPSocket.new @host, port
@ios << sock
sock << req
sock
Expand Down Expand Up @@ -137,7 +139,8 @@ def test_default_server_port
req = Net::HTTP::Get.new '/'
req['HOST'] = 'example.com'

res = Net::HTTP.start @host, @server.connected_port do |http|
port = @server.connected_ports[0]
res = Net::HTTP.start @host, port do |http|
http.request(req)
end

Expand All @@ -153,7 +156,8 @@ def test_default_server_port_respects_x_forwarded_proto
req['HOST'] = "example.com"
req['X_FORWARDED_PROTO'] = "https,http"

res = Net::HTTP.start @host, @server.connected_port do |http|
port = @server.connected_ports[0]
res = Net::HTTP.start @host, port do |http|
http.request(req)
end

Expand Down Expand Up @@ -740,7 +744,7 @@ def test_request_body_wait_chunked
}

sock = send_http "GET / HTTP/1.1\r\nConnection: close\r\nTransfer-Encoding: chunked\r\n\r\n1\r\nh\r\n"
sleep 1
sleep 3
sock << "4\r\nello\r\n0\r\n\r\n"

sock.gets
Expand Down
11 changes: 6 additions & 5 deletions test/test_puma_server_ssl.rb
Expand Up @@ -45,7 +45,7 @@ def teardown

# yields ctx to block, use for ctx setup & configuration
def start_server
@port = UniquePort.call
@port = 0
@host = "127.0.0.1"

app = lambda { |env| [200, {}, [env['rack.url_scheme']]] }
Expand All @@ -69,7 +69,7 @@ def start_server
@ssl_listener = @server.add_ssl_listener @host, @port, ctx
@server.run

@http = Net::HTTP.new @host, @port
@http = Net::HTTP.new @host, @server.connected_ports[0]
@http.use_ssl = true
@http.verify_mode = OpenSSL::SSL::VERIFY_NONE
end
Expand All @@ -93,7 +93,8 @@ def test_request_wont_block_thread
# Open a connection and give enough data to trigger a read, then wait
ctx = OpenSSL::SSL::SSLContext.new
ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
socket = OpenSSL::SSL::SSLSocket.new TCPSocket.new(@host, @port), ctx
port = @server.connected_ports[0]
socket = OpenSSL::SSL::SSLSocket.new TCPSocket.new(@host, port), ctx
socket.write "x"
sleep 0.1

Expand Down Expand Up @@ -206,7 +207,7 @@ class TestPumaServerSSLClient < Minitest::Test
parallelize_me!
def assert_ssl_client_error_match(error, subject=nil, &blk)
host = "127.0.0.1"
port = UniquePort.call
port = 0

app = lambda { |env| [200, {}, [env['rack.url_scheme']]] }

Expand All @@ -226,7 +227,7 @@ def assert_ssl_client_error_match(error, subject=nil, &blk)
server.add_ssl_listener host, port, ctx
server.run

http = Net::HTTP.new host, port
http = Net::HTTP.new host, server.connected_ports[0]
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

Expand Down
2 changes: 1 addition & 1 deletion test/test_rack_handler.rb
Expand Up @@ -49,7 +49,7 @@ def test_handler_boots
host = windows? ? "127.0.1.1" : "0.0.0.0"
opts = { Host: host }
in_handler(app, opts) do |launcher|
hit(["http://#{host}:#{ launcher.connected_port }/test"])
hit(["http://#{host}:#{ launcher.connected_ports[0] }/test"])
assert_equal("/test", @input["PATH_INFO"])
end
end
Expand Down
10 changes: 5 additions & 5 deletions test/test_rack_server.rb
Expand Up @@ -55,7 +55,7 @@ def test_lint

@server.run

hit(["http://127.0.0.1:#{ @server.connected_port }/test"])
hit(["http://127.0.0.1:#{ @server.connected_ports[0] }/test"])

stop

Expand All @@ -70,7 +70,7 @@ def test_large_post_body

big = "x" * (1024 * 16)

Net::HTTP.post_form URI.parse("http://127.0.0.1:#{ @server.connected_port }/test"),
Net::HTTP.post_form URI.parse("http://127.0.0.1:#{ @server.connected_ports[0] }/test"),
{ "big" => big }

stop
Expand All @@ -83,7 +83,7 @@ def test_path_info
@server.app = lambda { |env| input = env; @simple.call(env) }
@server.run

hit(["http://127.0.0.1:#{ @server.connected_port }/test/a/b/c"])
hit(["http://127.0.0.1:#{ @server.connected_ports[0] }/test/a/b/c"])

stop

Expand All @@ -100,7 +100,7 @@ def test_after_reply

@server.run

hit(["http://127.0.0.1:#{ @server.connected_port }/test"])
hit(["http://127.0.0.1:#{ @server.connected_ports[0] }/test"])

stop

Expand All @@ -116,7 +116,7 @@ def test_common_logger

@server.run

hit(["http://127.0.0.1:#{ @server.connected_port }/test"])
hit(["http://127.0.0.1:#{ @server.connected_ports[0] }/test"])

stop

Expand Down
6 changes: 3 additions & 3 deletions test/test_web_server.rb
Expand Up @@ -34,7 +34,7 @@ def teardown
end

def test_simple_server
hit(["http://127.0.0.1:#{@server.connected_port}/test"])
hit(["http://127.0.0.1:#{@server.connected_ports[0]}/test"])
assert @tester.ran_test, "Handler didn't really run"
end

Expand Down Expand Up @@ -75,7 +75,7 @@ def test_file_streamed_request

def do_test(string, chunk)
# Do not use instance variables here, because it needs to be thread safe
socket = TCPSocket.new("127.0.0.1", @server.connected_port);
socket = TCPSocket.new("127.0.0.1", @server.connected_ports[0]);
request = StringIO.new(string)
chunks_out = 0

Expand All @@ -88,7 +88,7 @@ def do_test(string, chunk)

def do_test_raise(string, chunk, close_after = nil)
# Do not use instance variables here, because it needs to be thread safe
socket = TCPSocket.new("127.0.0.1", @server.connected_port);
socket = TCPSocket.new("127.0.0.1", @server.connected_ports[0]);
request = StringIO.new(string)
chunks_out = 0

Expand Down