@@ -583,6 +583,22 @@ def test_take_bug_8215
583583 end
584584end
585585
586+ module RingIPv4
587+ def ipv4_mc ( rf )
588+ begin
589+ v4mc = rf . make_socket ( '239.0.0.1' )
590+ rescue Errno ::ENETUNREACH , Errno ::ENOBUFS , Errno ::ENODEV
591+ omit 'IPv4 multicast not available'
592+ end
593+
594+ begin
595+ yield v4mc
596+ ensure
597+ v4mc . close
598+ end
599+ end
600+ end
601+
586602module RingIPv6
587603 def prepare_ipv6 ( r )
588604 begin
@@ -625,6 +641,7 @@ def ipv6_mc(rf, hops = nil)
625641end
626642
627643class TestRingServer < Test ::Unit ::TestCase
644+ include RingIPv4
628645
629646 def setup
630647 @port = Rinda ::Ring_PORT
@@ -697,27 +714,23 @@ def test_make_socket_unicast
697714 end
698715
699716 def test_make_socket_ipv4_multicast
700- begin
701- v4mc = @rs . make_socket ( '239.0.0.1' )
702- rescue Errno ::ENOBUFS => e
703- omit "Missing multicast support in OS: #{ e . message } "
704- end
705-
706- begin
707- if Socket . const_defined? ( :SO_REUSEPORT ) then
708- assert ( v4mc . getsockopt ( :SOCKET , :SO_REUSEPORT ) . bool )
709- else
710- assert ( v4mc . getsockopt ( :SOCKET , :SO_REUSEADDR ) . bool )
711- end
712- rescue TypeError
713- if /aix/ =~ RUBY_PLATFORM
714- omit "Known bug in getsockopt(2) on AIX"
717+ ipv4_mc ( @rs ) do |v4mc |
718+ begin
719+ if Socket . const_defined? ( :SO_REUSEPORT ) then
720+ assert ( v4mc . getsockopt ( :SOCKET , :SO_REUSEPORT ) . bool )
721+ else
722+ assert ( v4mc . getsockopt ( :SOCKET , :SO_REUSEADDR ) . bool )
723+ end
724+ rescue TypeError
725+ if /aix/ =~ RUBY_PLATFORM
726+ omit "Known bug in getsockopt(2) on AIX"
727+ end
728+ raise $!
715729 end
716- raise $!
717- end
718730
719- assert_equal ( '0.0.0.0' , v4mc . local_address . ip_address )
720- assert_equal ( @port , v4mc . local_address . ip_port )
731+ assert_equal ( '0.0.0.0' , v4mc . local_address . ip_address )
732+ assert_equal ( @port , v4mc . local_address . ip_port )
733+ end
721734 end
722735
723736 def test_make_socket_ipv6_multicast
@@ -746,7 +759,7 @@ def test_ring_server_ipv4_multicast
746759 @rs . shutdown
747760 begin
748761 @rs = Rinda ::RingServer . new ( @ts , [ [ '239.0.0.1' , '0.0.0.0' ] ] , @port )
749- rescue Errno ::ENOBUFS => e
762+ rescue Errno ::ENOBUFS , Errno :: ENODEV => e
750763 omit "Missing multicast support in OS: #{ e . message } "
751764 end
752765
@@ -848,6 +861,7 @@ def wait_for(n)
848861
849862class TestRingFinger < Test ::Unit ::TestCase
850863 include RingIPv6
864+ include RingIPv4
851865
852866 def setup
853867 @rf = Rinda ::RingFinger . new
@@ -867,12 +881,10 @@ def test_make_socket_unicast
867881 end
868882
869883 def test_make_socket_ipv4_multicast
870- v4mc = @rf . make_socket ( '239.0.0.1' )
871-
872- assert_equal ( 1 , v4mc . getsockopt ( :IPPROTO_IP , :IP_MULTICAST_LOOP ) . ipv4_multicast_loop )
873- assert_equal ( 1 , v4mc . getsockopt ( :IPPROTO_IP , :IP_MULTICAST_TTL ) . ipv4_multicast_ttl )
874- ensure
875- v4mc . close if v4mc
884+ ipv4_mc ( @rf ) do |v4mc |
885+ assert_equal ( 1 , v4mc . getsockopt ( :IPPROTO_IP , :IP_MULTICAST_LOOP ) . ipv4_multicast_loop )
886+ assert_equal ( 1 , v4mc . getsockopt ( :IPPROTO_IP , :IP_MULTICAST_TTL ) . ipv4_multicast_ttl )
887+ end
876888 end
877889
878890 def test_make_socket_ipv6_multicast
@@ -884,10 +896,9 @@ def test_make_socket_ipv6_multicast
884896
885897 def test_make_socket_ipv4_multicast_hops
886898 @rf . multicast_hops = 2
887- v4mc = @rf . make_socket ( '239.0.0.1' )
888- assert_equal ( 2 , v4mc . getsockopt ( :IPPROTO_IP , :IP_MULTICAST_TTL ) . ipv4_multicast_ttl )
889- ensure
890- v4mc . close if v4mc
899+ ipv4_mc ( @rf ) do |v4mc |
900+ assert_equal ( 2 , v4mc . getsockopt ( :IPPROTO_IP , :IP_MULTICAST_TTL ) . ipv4_multicast_ttl )
901+ end
891902 end
892903
893904 def test_make_socket_ipv6_multicast_hops
0 commit comments