diff options
Diffstat (limited to 'test')
| -rw-r--r-- | test/socket/test_socket.rb | 22 | ||||
| -rw-r--r-- | test/socket/test_tcp.rb | 2 |
2 files changed, 23 insertions, 1 deletions
diff --git a/test/socket/test_socket.rb b/test/socket/test_socket.rb index 4d75caab50..27e60b3335 100644 --- a/test/socket/test_socket.rb +++ b/test/socket/test_socket.rb @@ -995,6 +995,28 @@ class TestSocket < Test::Unit::TestCase RUBY end + def test_tcp_socket_hostname_resolution_failed_after_connection_failure + opts = %w[-rsocket -W1] + assert_separately opts, <<~RUBY + server = TCPServer.new("127.0.0.1", 0) + port = server.connect_address.ip_port + + Addrinfo.define_singleton_method(:getaddrinfo) do |_, _, family, *_| + case family + when Socket::AF_INET6 then sleep(0.1); raise Socket::ResolutionError + when Socket::AF_INET then [Addrinfo.tcp("127.0.0.1", port)] + end + end + + server.close + + # SystemCallError is a workaround for Windows environment + assert_raise(Errno::ECONNREFUSED, SystemCallError) do + Socket.tcp("localhost", port) + end + RUBY + end + def test_tcp_socket_v6_address_passed opts = %w[-rsocket -W1] assert_separately opts, <<~RUBY diff --git a/test/socket/test_tcp.rb b/test/socket/test_tcp.rb index 4984a7e7bc..e6a41f5660 100644 --- a/test/socket/test_tcp.rb +++ b/test/socket/test_tcp.rb @@ -316,7 +316,7 @@ class TestSocket_TCPSocket < Test::Unit::TestCase port = server.connect_address.ip_port server.close - assert_raise(Socket::ResolutionError) do + assert_raise(Errno::ECONNREFUSED) do TCPSocket.new( "localhost", port, |
