Library/Homebrew: add free_port test helper

Co-Authored-By: Mike McQuaid <mike@mikemcquaid.com>
This commit is contained in:
Alexander Bayandin 2020-03-27 14:29:50 +00:00
parent ee1f05e029
commit bfcba0f5f0
4 changed files with 43 additions and 0 deletions

View File

@ -36,6 +36,7 @@ module Homebrew
test_args.parse
require "formula_assertions"
require "formula_free_port"
args.resolved_formulae.each do |f|
# Cannot test uninstalled formulae

View File

@ -0,0 +1,15 @@
# frozen_string_literal: true
module Homebrew
module FreePort
require "socket"
def free_port
server = TCPServer.new 0
_, port, = server.addr
server.close
port
end
end
end

View File

@ -7,6 +7,7 @@ require "extend/ENV"
require "timeout"
require "debrew"
require "formula_assertions"
require "formula_free_port"
require "fcntl"
require "socket"
require "cli/parser"
@ -26,6 +27,7 @@ begin
formula = Homebrew.args.resolved_formulae.first
formula.extend(Homebrew::Assertions)
formula.extend(Homebrew::FreePort)
formula.extend(Debrew::Formula) if Homebrew.args.debug?
# tests can also return false to indicate failure

View File

@ -0,0 +1,25 @@
# frozen_string_literal: true
require "socket"
require "formula_free_port"
module Homebrew
describe FreePort do
include described_class
describe "#free_port" do
# IANA suggests user port from 1024 to 49151
# and dynamic port for 49152 to 65535
# http://www.iana.org/assignments/port-numbers
MIN_PORT = 1024
MAX_PORT = 65535
it "returns a free TCP/IP port" do
port = free_port
expect(port).to be_between(MIN_PORT, MAX_PORT)
expect { TCPServer.new(port).close }.not_to raise_error
end
end
end
end