diff --git a/spec/support/dns.rb b/spec/support/dns.rb index dfbe8a2..a52fac1 100644 --- a/spec/support/dns.rb +++ b/spec/support/dns.rb @@ -20,6 +20,15 @@ Resolv::DefaultResolver.replace_resolvers([hosts_resolver, dns_resolver]) +# resolve-replace doesn't support modern Ruby TCPSocket signature: +# https://github.com/ruby/resolv-replace/issues/2 +class TCPSocket + def initialize(host, serv, *rest, **kwargs) + rest[0] = IPSocket.getaddress(rest[0]) if rest[0] + original_resolv_initialize(IPSocket.getaddress(host), serv, *rest, **kwargs) + end +end + # Patch Socket to rely on Resolve when getting address info # Inspired by the original resolve-replace.rb: https://github.com/ruby/resolv-replace/blob/master/lib/resolv-replace.rb require "socket" @@ -32,7 +41,7 @@ def getaddrinfo(host, *args) begin return original_getaddrinfo(Resolv.getaddress(host).to_s, *args) rescue Resolv::ResolvError - raise SocketError, "Hostname not known: #{host}" + original_getaddrinfo(host, *args) end end end diff --git a/spec/support/nats_server_helper.rb b/spec/support/nats_server_helper.rb index dff3556..5b6f4d1 100644 --- a/spec/support/nats_server_helper.rb +++ b/spec/support/nats_server_helper.rb @@ -1,3 +1,5 @@ +require "socket" + class NatsServerControl BIN_PATH = File.expand_path(File.join(__dir__, "../../scripts/nats-server")) @@ -92,17 +94,19 @@ def kill_server def wait_for_server(uri, max_wait = 5) # :nodoc: start = Time.now while (Time.now - start < max_wait) # Wait max_wait seconds max - break if server_running?(uri) + return if server_running?(uri) sleep(0.1) end + + raise "NATS Server did not start in #{max_wait} seconds" end def server_running?(uri) # :nodoc: - require 'socket' - s = TCPSocket.new(uri.host, uri.port) - s.close - return true + s = TCPSocket.new(uri.host, uri.port, nil, nil, connect_timeout: 0.5) + true rescue - return false + false + ensure + s&.close end end