From a850dc62e939b5dac5062a28e706dbb715f1400a Mon Sep 17 00:00:00 2001 From: naruse Date: Mon, 25 Mar 2013 18:50:50 +0000 Subject: Use more general approach to get scope_id see #8159 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39930 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/rinda/test_rinda.rb | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'test/rinda/test_rinda.rb') diff --git a/test/rinda/test_rinda.rb b/test/rinda/test_rinda.rb index 65df228751..7791c7e523 100644 --- a/test/rinda/test_rinda.rb +++ b/test/rinda/test_rinda.rb @@ -525,6 +525,21 @@ class TupleSpaceProxyTest < Test::Unit::TestCase @server = DRb.primary_server || DRb.start_service end +module RingIPv6 + def prepare_ipv6(r) + Socket.ip_address_list.any? do |addrinfo| + if /%(?\w+)\z/ =~ addrinfo.ip_address + next if /\Alo/ =~ ifname + _family, _port, _flowinfo, _addr, scope_id = + addrinfo.to_sockaddr.unpack("s!S!La16L") + r.multicast_interface = scope_id + return + end + end + skip 'IPv6 not available' + end +end + class TestRingServer < Test::Unit::TestCase def setup @@ -588,22 +603,10 @@ class TestRingServer < Test::Unit::TestCase end class TestRingFinger < Test::Unit::TestCase + include RingIPv6 def setup @rf = Rinda::RingFinger.new - ifindex = nil - 10.times do |i| - begin - addrinfo = Addrinfo.udp('ff02::1', Rinda::Ring_PORT) - soc = Socket.new(addrinfo.pfamily, addrinfo.socktype, addrinfo.protocol) - soc.setsockopt(:IPPROTO_IPV6, :IPV6_MULTICAST_IF, - [i].pack('I')) - ifindex = i - break - rescue - end - end - @rf.multicast_interface = ifindex end def test_make_socket_unicast @@ -620,26 +623,23 @@ class TestRingFinger < Test::Unit::TestCase end def test_make_socket_ipv6_multicast - skip 'IPv6 not available' unless - Socket.ip_address_list.any? { |addrinfo| addrinfo.ipv6? } - + prepare_ipv6(@rf) v6mc = @rf.make_socket('ff02::1') assert_equal(1, v6mc.getsockopt(:IPPROTO_IPV6, :IPV6_MULTICAST_LOOP).int) assert_equal(1, v6mc.getsockopt(:IPPROTO_IPV6, :IPV6_MULTICAST_HOPS).int) end - def test_make_socket_multicast_hops + def test_make_socket_ipv4_multicast_hops @rf.multicast_hops = 2 - v4mc = @rf.make_socket('239.0.0.1') - assert_equal(2, v4mc.getsockopt(:IPPROTO_IP, :IP_MULTICAST_TTL).int) + end - return unless Socket.ip_address_list.any? { |addrinfo| addrinfo.ipv6? } - + def test_make_socket_ipv6_multicast_hops + prepare_ipv6(@rf) + @rf.multicast_hops = 2 v6mc = @rf.make_socket('ff02::1') - assert_equal(2, v6mc.getsockopt(:IPPROTO_IPV6, :IPV6_MULTICAST_HOPS).int) end -- cgit v1.2.3