Library/Homebrew: add free_port test helper
Co-Authored-By: Mike McQuaid <mike@mikemcquaid.com>
This commit is contained in:
parent
ee1f05e029
commit
bfcba0f5f0
@ -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
|
||||
|
||||
15
Library/Homebrew/formula_free_port.rb
Normal file
15
Library/Homebrew/formula_free_port.rb
Normal 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
|
||||
@ -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
|
||||
|
||||
25
Library/Homebrew/test/formula_free_port_spec.rb
Normal file
25
Library/Homebrew/test/formula_free_port_spec.rb
Normal 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
|
||||
Loading…
x
Reference in New Issue
Block a user