@@ -780,17 +780,18 @@ def test_resolurion_error_error_code
780
780
781
781
def test_tcp_socket_v6_hostname_resolved_earlier
782
782
opts = %w[ -rsocket -W1 ]
783
- assert_separately opts , "#{ <<-"begin;" } \n #{ <<-'end;' } "
784
-
785
- begin;
783
+ assert_separately opts , <<~RUBY
784
+ begin
786
785
begin
786
+ # Verify that "localhost" can be resolved to an IPv6 address
787
+ Socket.getaddrinfo("localhost", 0, Socket::AF_INET6)
787
788
server = TCPServer.new("::1", 0)
788
- rescue Errno::EADDRNOTAVAIL # IPv6 is not supported
789
- exit
789
+ rescue Socket::ResolutionError, Errno::EADDRNOTAVAIL # IPv6 is not supported
790
+ return
790
791
end
791
792
793
+ _, port, = server.addr
792
794
server_thread = Thread.new { server.accept }
793
- port = server.addr[1]
794
795
795
796
Addrinfo.define_singleton_method(:getaddrinfo) do |_, _, family, *_|
796
797
case family
@@ -801,19 +802,21 @@ def test_tcp_socket_v6_hostname_resolved_earlier
801
802
802
803
socket = Socket.tcp("localhost", port)
803
804
assert_true(socket.remote_address.ipv6?)
804
- server_thread.value.close
805
- server.close
806
- socket.close if socket && !socket.closed?
807
- end;
805
+ ensure
806
+ server_thread&.value&.close
807
+ server&.close
808
+ socket&.close
809
+ end
810
+ RUBY
808
811
end
809
812
810
813
def test_tcp_socket_v4_hostname_resolved_earlier
811
814
opts = %w[ -rsocket -W1 ]
812
- assert_separately opts , "#{ <<-"begin;" } \n #{ <<-'end;' } "
813
-
814
- begin;
815
+ assert_separately opts , <<~RUBY
816
+ begin
815
817
server = TCPServer.new("127.0.0.1", 0)
816
- port = server.addr[1]
818
+ _, port, = server.addr
819
+ server_thread = Thread.new { server.accept }
817
820
818
821
Addrinfo.define_singleton_method(:getaddrinfo) do |_, _, family, *_|
819
822
case family
@@ -822,27 +825,31 @@ def test_tcp_socket_v4_hostname_resolved_earlier
822
825
end
823
826
end
824
827
825
- server_thread = Thread.new { server.accept }
826
828
socket = Socket.tcp("localhost", port)
827
829
assert_true(socket.remote_address.ipv4?)
828
- server_thread.value.close
829
- server.close
830
- socket.close if socket && !socket.closed?
831
- end;
830
+ ensure
831
+ server_thread&.value&.close
832
+ server&.close
833
+ socket&.close
834
+ end
835
+ RUBY
832
836
end
833
837
834
838
def test_tcp_socket_v6_hostname_resolved_in_resolution_delay
835
839
opts = %w[ -rsocket -W1 ]
836
- assert_separately opts , "#{ <<-"begin;" } \n #{ <<-'end;' } "
837
-
838
- begin;
840
+ assert_separately opts , <<~RUBY
841
+ begin
839
842
begin
843
+ # Verify that "localhost" can be resolved to an IPv6 address
844
+ Socket.getaddrinfo("localhost", 0, Socket::AF_INET6)
840
845
server = TCPServer.new("::1", 0)
841
- rescue Errno::EADDRNOTAVAIL # IPv6 is not supported
842
- exit
846
+ rescue Socket::ResolutionError, Errno::EADDRNOTAVAIL # IPv6 is not supported
847
+ return
843
848
end
844
849
845
- port = server.addr[1]
850
+ _, port, = server.addr
851
+ server_thread = Thread.new { server.accept }
852
+
846
853
delay_time = 0.025 # Socket::RESOLUTION_DELAY (private) is 0.05
847
854
848
855
Addrinfo.define_singleton_method(:getaddrinfo) do |_, _, family, *_|
@@ -852,24 +859,25 @@ def test_tcp_socket_v6_hostname_resolved_in_resolution_delay
852
859
end
853
860
end
854
861
855
- server_thread = Thread.new { server.accept }
856
862
socket = Socket.tcp("localhost", port)
857
863
assert_true(socket.remote_address.ipv6?)
858
- server_thread.value.close
859
- server.close
860
- socket.close if socket && !socket.closed?
861
- end;
864
+ ensure
865
+ server_thread&.value&.close
866
+ server&.close
867
+ socket&.close
868
+ end
869
+ RUBY
862
870
end
863
871
864
872
def test_tcp_socket_v6_hostname_resolved_earlier_and_v6_server_is_not_listening
865
873
opts = %w[ -rsocket -W1 ]
866
- assert_separately opts , "#{ <<-"begin;" } \n #{ <<-'end;' } "
867
-
868
- begin;
874
+ assert_separately opts , <<~RUBY
875
+ begin
869
876
ipv4_address = "127.0.0.1"
870
- ipv4_server = Socket.new(Socket::AF_INET, :STREAM)
871
- ipv4_server.bind(Socket.pack_sockaddr_in(0, ipv4_address))
872
- port = ipv4_server.connect_address.ip_port
877
+ server = Socket.new(Socket::AF_INET, :STREAM)
878
+ server.bind(Socket.pack_sockaddr_in(0, ipv4_address))
879
+ port = server.connect_address.ip_port
880
+ server_thread = Thread.new { server.listen(1); server.accept }
873
881
874
882
Addrinfo.define_singleton_method(:getaddrinfo) do |_, _, family, *_|
875
883
case family
@@ -878,67 +886,71 @@ def test_tcp_socket_v6_hostname_resolved_earlier_and_v6_server_is_not_listening
878
886
end
879
887
end
880
888
881
- ipv4_server_thread = Thread.new { ipv4_server.listen(1); ipv4_server.accept }
882
889
socket = Socket.tcp("localhost", port)
883
890
assert_equal(ipv4_address, socket.remote_address.ip_address)
884
-
885
- accepted, _ = ipv4_server_thread.value
886
- accepted.close
887
- ipv4_server.close
888
- socket.close if socket && !socket.closed?
889
- end;
891
+ ensure
892
+ accepted, _ = server_thread&.value
893
+ accepted&.close
894
+ server&.close
895
+ socket&.close
896
+ end
897
+ RUBY
890
898
end
891
899
892
900
def test_tcp_socket_resolv_timeout
893
901
opts = %w[ -rsocket -W1 ]
894
- assert_separately opts , "#{ <<-"begin;" } \n #{ <<-'end;' } "
902
+ assert_separately opts , <<~RUBY
903
+ begin
904
+ server = TCPServer.new("localhost", 0)
905
+ _, port, = server.addr
895
906
896
- begin;
897
907
Addrinfo.define_singleton_method(:getaddrinfo) { |*_| sleep }
898
- port = TCPServer.new("localhost", 0).addr[1]
899
908
900
909
assert_raise(Errno::ETIMEDOUT) do
901
910
Socket.tcp("localhost", port, resolv_timeout: 0.01)
902
911
end
903
- end;
912
+ ensure
913
+ server&.close
914
+ end
915
+ RUBY
904
916
end
905
917
906
918
def test_tcp_socket_resolv_timeout_with_connection_failure
907
919
opts = %w[ -rsocket -W1 ]
908
- assert_separately opts , "#{ <<-"begin;" } \n #{ <<-'end;' } "
909
-
910
- begin;
911
- server = TCPServer.new("127.0.0.1", 12345)
912
- _, port, = server.addr
920
+ assert_separately opts , <<~RUBY
921
+ server = TCPServer.new("127.0.0.1", 12345)
922
+ _, port, = server.addr
913
923
914
- Addrinfo.define_singleton_method(:getaddrinfo) do |_, _, family, *_|
915
- if family == Socket::AF_INET6
916
- sleep
917
- else
918
- [Addrinfo.tcp("127.0.0.1", port)]
919
- end
924
+ Addrinfo.define_singleton_method(:getaddrinfo) do |_, _, family, *_|
925
+ if family == Socket::AF_INET6
926
+ sleep
927
+ else
928
+ [Addrinfo.tcp("127.0.0.1", port)]
920
929
end
930
+ end
921
931
922
- server.close
932
+ server.close
923
933
924
- assert_raise(Errno::ETIMEDOUT) do
925
- Socket.tcp("localhost", port, resolv_timeout: 0.01)
926
- end
927
- end;
934
+ assert_raise(Errno::ETIMEDOUT) do
935
+ Socket.tcp("localhost", port, resolv_timeout: 0.01)
936
+ end
937
+ RUBY
928
938
end
929
939
930
940
def test_tcp_socket_one_hostname_resolution_succeeded_at_least
931
941
opts = %w[ -rsocket -W1 ]
932
- assert_separately opts , "#{ <<-"begin;" } \n #{ <<-'end;' } "
933
-
934
- begin;
942
+ assert_separately opts , <<~RUBY
943
+ begin
935
944
begin
945
+ # Verify that "localhost" can be resolved to an IPv6 address
946
+ Socket.getaddrinfo("localhost", 0, Socket::AF_INET6)
936
947
server = TCPServer.new("::1", 0)
937
- rescue Errno::EADDRNOTAVAIL # IPv6 is not supported
938
- exit
948
+ rescue Socket::ResolutionError, Errno::EADDRNOTAVAIL # IPv6 is not supported
949
+ return
939
950
end
940
951
941
- port = server.addr[1]
952
+ _, port, = server.addr
953
+ server_thread = Thread.new { server.accept }
942
954
943
955
Addrinfo.define_singleton_method(:getaddrinfo) do |_, _, family, *_|
944
956
case family
@@ -947,75 +959,81 @@ def test_tcp_socket_one_hostname_resolution_succeeded_at_least
947
959
end
948
960
end
949
961
950
- server_thread = Thread.new { server.accept }
951
962
socket = nil
952
963
953
964
assert_nothing_raised do
954
965
socket = Socket.tcp("localhost", port)
955
966
end
956
-
957
- server_thread.value.close
958
- server.close
959
- socket.close if socket && !socket.closed?
960
- end;
967
+ ensure
968
+ server_thread&.value&.close
969
+ server&.close
970
+ socket&.close
971
+ end
972
+ RUBY
961
973
end
962
974
963
975
def test_tcp_socket_all_hostname_resolution_failed
964
976
opts = %w[ -rsocket -W1 ]
965
- assert_separately opts , "#{ <<-"begin;" } \n #{ <<-'end;' } "
977
+ assert_separately opts , <<~RUBY
978
+ begin
979
+ server = TCPServer.new("localhost", 0)
980
+ _, port, = server.addr
966
981
967
- begin;
968
982
Addrinfo.define_singleton_method(:getaddrinfo) do |_, _, family, *_|
969
983
case family
970
984
when Socket::AF_INET6 then raise SocketError
971
985
when Socket::AF_INET then sleep(0.001); raise SocketError, "Last hostname resolution error"
972
986
end
973
987
end
974
- port = TCPServer.new("localhost", 0).addr[1]
975
988
976
989
assert_raise_with_message(SocketError, "Last hostname resolution error") do
977
990
Socket.tcp("localhost", port)
978
991
end
979
- end;
992
+ ensure
993
+ server&.close
994
+ end
995
+ RUBY
980
996
end
981
997
982
998
def test_tcp_socket_v6_address_passed
983
999
opts = %w[ -rsocket -W1 ]
984
- assert_separately opts , "#{ <<-"begin;" } \n #{ <<-'end;' } "
985
-
986
- begin;
1000
+ assert_separately opts , <<~RUBY
1001
+ begin
987
1002
begin
1003
+ # Verify that "localhost" can be resolved to an IPv6 address
1004
+ Socket.getaddrinfo("localhost", 0, Socket::AF_INET6)
988
1005
server = TCPServer.new("::1", 0)
989
- rescue Errno::EADDRNOTAVAIL # IPv6 is not supported
990
- exit
1006
+ rescue Socket::ResolutionError, Errno::EADDRNOTAVAIL # IPv6 is not supported
1007
+ return
991
1008
end
992
1009
993
1010
_, port, = server.addr
1011
+ server_thread = Thread.new { server.accept }
994
1012
995
1013
Addrinfo.define_singleton_method(:getaddrinfo) do |*_|
996
1014
[Addrinfo.tcp("::1", port)]
997
1015
end
998
1016
999
- server_thread = Thread.new { server.accept }
1000
1017
socket = Socket.tcp("::1", port)
1001
-
1002
1018
assert_true(socket.remote_address.ipv6?)
1003
- server_thread.value.close
1004
- server.close
1005
- socket.close if socket && !socket.closed?
1006
- end;
1019
+ ensure
1020
+ server_thread&.value&.close
1021
+ server&.close
1022
+ socket&.close
1023
+ end
1024
+ RUBY
1007
1025
end
1008
1026
1009
1027
def test_tcp_socket_fast_fallback_is_false
1010
1028
server = TCPServer . new ( "127.0.0.1" , 0 )
1011
1029
_ , port , = server . addr
1012
1030
server_thread = Thread . new { server . accept }
1013
1031
socket = Socket . tcp ( "127.0.0.1" , port , fast_fallback : false )
1014
-
1015
1032
assert_true ( socket . remote_address . ipv4? )
1016
- server_thread . value . close
1017
- server . close
1018
- socket . close if socket && !socket . closed?
1033
+ ensure
1034
+ server_thread &.value &.close
1035
+ server &.close
1036
+ socket &.close
1019
1037
end
1020
1038
1021
1039
def test_tcp_fast_fallback
0 commit comments