Module: HttpTest::Server::Port

Extended by:
Port
Included in:
Port
Defined in:
lib/http-test/server/port.rb

Instance Method Summary collapse

Instance Method Details

#available!(port, timeout = 0.1) ⇒ Object

is a given port available? This raises ECONNREFUSED or EHOSTUNREACH if not, and Timeout::Error if we don’t know.



21
22
23
24
25
26
27
28
29
# File 'lib/http-test/server/port.rb', line 21

def available!(port, timeout = 0.1)
  s = nil
  Timeout.timeout(timeout) do
    STDERR.print "."
    s = TCPSocket.new("127.0.0.1", port)
  end
ensure
  s&.close
end

#available?(port, timeout = 0.1) ⇒ Boolean

is a given port available? This returns true if so, and false if not or unsure.

Returns:

  • (Boolean)


32
33
34
35
36
37
# File 'lib/http-test/server/port.rb', line 32

def available?(port, timeout = 0.1)
  available!(port, timeout)
  true
rescue Errno::ECONNREFUSED, Errno::EHOSTUNREACH, Timeout::Error
  false
end

#chooseObject

return an unused port.



11
12
13
14
15
16
17
# File 'lib/http-test/server/port.rb', line 11

def choose
  server = TCPServer.new('127.0.0.1', 0)
  port = server.addr[1]
ensure
  # don't know if this is really necessary
  server&.close
end

#wait(port, timeout = 10) ⇒ Object

wait until a port becomes available. Raises either ECONNREFUSED, EHOSTUNREACH, or Timeout::Error if the port cannot be established.



41
42
43
44
45
46
47
48
# File 'lib/http-test/server/port.rb', line 41

def wait(port, timeout = 10)
  (timeout / 0.1).to_i.times do
    return true if available?(port)
    sleep(0.1)
  end

  available!(port)
end