tests: support Linux kernels with CONFIG_IPV6=n

Detecting the presence of constants in C headers is insufficient,
as a Linux kernel can be built with CONFIG_IPV6=n

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65055 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2018-10-13 05:18:49 +00:00
parent d7c806c079
commit 54ad3167e8
4 changed files with 29 additions and 21 deletions

View File

@ -237,6 +237,7 @@ describe 'BasicSocket#setsockopt' do
@socket.getsockopt(:IP, :TTL).int.should == 255 @socket.getsockopt(:IP, :TTL).int.should == 255
end end
guard -> { SocketSpecs.ipv6_available? } do
it 'sets an IPv6 boolean option' do it 'sets an IPv6 boolean option' do
socket = Socket.new(:INET6, :STREAM) socket = Socket.new(:INET6, :STREAM)
begin begin
@ -246,6 +247,7 @@ describe 'BasicSocket#setsockopt' do
socket.close socket.close
end end
end end
end
platform_is_not :windows do platform_is_not :windows do
it 'raises Errno::EINVAL when setting an invalid option value' do it 'raises Errno::EINVAL when setting an invalid option value' do

View File

@ -50,7 +50,7 @@ module SocketSpecs
def self.ipv6_available? def self.ipv6_available?
@ipv6_available ||= begin @ipv6_available ||= begin
server = TCPServer.new('::1', 0) server = TCPServer.new('::1', 0)
rescue Errno::EADDRNOTAVAIL, SocketError rescue Errno::EAFNOSUPPORT, Errno::EADDRNOTAVAIL, SocketError
:no :no
else else
server.close server.close

View File

@ -1,6 +1,7 @@
require_relative '../spec_helper' require_relative '../spec_helper'
describe 'Socket#ipv6only!' do guard -> { SocketSpecs.ipv6_available? } do
describe 'Socket#ipv6only!' do
before do before do
@socket = Socket.new(:INET6, :DGRAM) @socket = Socket.new(:INET6, :DGRAM)
end end
@ -14,4 +15,5 @@ describe 'Socket#ipv6only!' do
@socket.getsockopt(:IPV6, :V6ONLY).bool.should == true @socket.getsockopt(:IPV6, :V6ONLY).bool.should == true
end end
end
end end

View File

@ -20,9 +20,13 @@ class TestSocket_UDPSocket < Test::Unit::TestCase
assert_match(/AF_INET\b/, sock.inspect) assert_match(/AF_INET\b/, sock.inspect)
} }
if Socket.const_defined?(:AF_INET6) if Socket.const_defined?(:AF_INET6)
begin
UDPSocket.open(Socket::AF_INET6) {|sock| UDPSocket.open(Socket::AF_INET6) {|sock|
assert_match(/AF_INET6\b/, sock.inspect) assert_match(/AF_INET6\b/, sock.inspect)
} }
rescue Errno::EAFNOSUPPORT
skip 'AF_INET6 not supported by kernel'
end
end end
end end