This commit is contained in:
Thomas Walpole 2016-07-25 10:04:50 -07:00
parent 2fece3ae24
commit d4b0137f8e
1 changed files with 11 additions and 3 deletions

View File

@ -64,7 +64,7 @@ module Capybara
@middleware = Middleware.new(@app) @middleware = Middleware.new(@app)
@server_thread = nil # suppress warnings @server_thread = nil # suppress warnings
@host, @port = host, port @host, @port = host, port
@port ||= Capybara::Server.ports[Capybara.reuse_server ? @app.object_id : @middleware.object_id] @port ||= Capybara::Server.ports[port_key]
@port ||= find_available_port(host) @port ||= find_available_port(host)
end end
@ -89,14 +89,14 @@ module Capybara
end end
def wait_for_pending_requests def wait_for_pending_requests
Timeout.timeout(60) { sleep(0.01) while @middleware.pending_requests? } Timeout.timeout(60) { sleep(0.01) while pending_requests? }
rescue Timeout::Error rescue Timeout::Error
raise "Requests did not finish in 60 seconds" raise "Requests did not finish in 60 seconds"
end end
def boot def boot
unless responsive? unless responsive?
Capybara::Server.ports[Capybara.reuse_server ? @app.object_id : @middleware.object_id] = @port Capybara::Server.ports[port_key] = @port
@server_thread = Thread.new do @server_thread = Thread.new do
Capybara.server.call(@middleware, @port, @host) Capybara.server.call(@middleware, @port, @host)
@ -112,6 +112,14 @@ module Capybara
private private
def port_key
Capybara.reuse_server ? @app.object_id : @middleware.object_id
end
def pending_requests?
@middleware.pending_requests?
end
def find_available_port(host) def find_available_port(host)
server = TCPServer.new(host, 0) server = TCPServer.new(host, 0)
server.addr[1] server.addr[1]