improve reliability of webserver port binding

use "127.0.0.1" instead of "localhost" to avoid binding to ipv4 and ipv6
don't assume port 10006 will be open in the machine
rely on the ranges and the actual bound port for the assertions

Fixes #11263
This commit is contained in:
Joao Duarte 2019-10-23 16:18:47 +01:00 committed by João Duarte
parent 5b5e479725
commit 6bf1ed932c

View file

@ -12,7 +12,7 @@ def block_ports(range)
range.each do |port| range.each do |port|
begin begin
server = TCPServer.new("localhost", port) server = TCPServer.new("127.0.0.1", port)
servers << server servers << server
rescue => e rescue => e
# The port can already be taken # The port can already be taken
@ -45,7 +45,7 @@ describe LogStash::WebServer do
subject { LogStash::WebServer.new(logger, subject { LogStash::WebServer.new(logger,
agent, agent,
{ :http_host => "localhost", :http_ports => port_range })} { :http_host => "127.0.0.1", :http_ports => port_range })}
let(:port_range) { 10000..10010 } let(:port_range) { 10000..10010 }
@ -89,8 +89,9 @@ describe LogStash::WebServer do
after(:each) { free_ports(@servers) } after(:each) { free_ports(@servers) }
context "when we have available ports" do context "when we have available ports" do
let(:blocked_range) { 10000..10005 }
before(:each) do before(:each) do
@servers = block_ports(10000..10005) @servers = block_ports(blocked_range)
end end
it "successfully find an available port" do it "successfully find an available port" do
@ -99,10 +100,13 @@ describe LogStash::WebServer do
end end
sleep(1) sleep(1)
address = subject.address
port = address.split(":").last.to_i
expect(port_range).to cover(port)
expect(blocked_range).to_not cover(port)
response = open("http://localhost:10006").read response = open("http://#{address}").read
expect { LogStash::Json.load(response) }.not_to raise_error expect { LogStash::Json.load(response) }.not_to raise_error
expect(subject.address).to eq("localhost:10006")
subject.stop subject.stop
t.join t.join