aboutsummaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-08-09 03:32:51 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-08-09 03:32:51 +0000
commitab8791d7d27c0b266506785ca11587d627e5465a (patch)
treeee89ae73af7ae351bf365adcfd4bebae8fc83e1f /spec
parent52102f6ff50eebf8c16667c9b49cef579d2057c1 (diff)
downloadruby-ab8791d7d27c0b266506785ca11587d627e5465a.tar.gz
spec/ruby/library/socket/*: more FreeBSD fixes
FreeBSD portability notes: Loopback connections are not instantaneous (unlike Linux), so non-blocking read-after-write MUST check for readability via IO.select or IO#wait_readable before attempting non-blocking recv/read operations. IPv6 seems favored, so we'll get "::" instead of "0.0.0.0" Some constants are different or obsolete, so that should be self-explanatory. There are still other failures I or somebody else needs to get to when we have time and feel like dealing with spec DSL: http://rubyci.s3.amazonaws.com/freebsd11zfs/ruby-trunk/recent.html git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64239 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec')
-rw-r--r--spec/ruby/library/socket/basicsocket/recvmsg_nonblock_spec.rb1
-rw-r--r--spec/ruby/library/socket/constants/constants_spec.rb13
-rw-r--r--spec/ruby/library/socket/socket/accept_nonblock_spec.rb2
-rw-r--r--spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb4
-rw-r--r--spec/ruby/library/socket/socket/udp_server_recv_spec.rb6
-rw-r--r--spec/ruby/library/socket/tcpserver/initialize_spec.rb10
-rw-r--r--spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb2
7 files changed, 33 insertions, 5 deletions
diff --git a/spec/ruby/library/socket/basicsocket/recvmsg_nonblock_spec.rb b/spec/ruby/library/socket/basicsocket/recvmsg_nonblock_spec.rb
index 698b9e7ba5..30f74a2164 100644
--- a/spec/ruby/library/socket/basicsocket/recvmsg_nonblock_spec.rb
+++ b/spec/ruby/library/socket/basicsocket/recvmsg_nonblock_spec.rb
@@ -156,6 +156,7 @@ describe 'BasicSocket#recvmsg_nonblock' do
describe 'the returned Array' do
before do
+ platform_is(:freebsd) { IO.select([@socket]) }
@array = @socket.recvmsg_nonblock
end
diff --git a/spec/ruby/library/socket/constants/constants_spec.rb b/spec/ruby/library/socket/constants/constants_spec.rb
index 2d44636abd..2a218c7c5d 100644
--- a/spec/ruby/library/socket/constants/constants_spec.rb
+++ b/spec/ruby/library/socket/constants/constants_spec.rb
@@ -89,11 +89,22 @@ describe "Socket::Constants" do
platform_is_not :windows do
it 'defines SCM options' do
- Socket::Constants.should have_constant('SCM_CREDENTIALS')
+ platform_is :freebsd do
+ Socket::Constants.should have_constant('SCM_CREDS')
+ end
+ platform_is_not :freebsd do
+ Socket::Constants.should have_constant('SCM_CREDENTIALS')
+ end
end
it 'defines error options' do
consts = ["EAI_ADDRFAMILY", "EAI_NODATA"]
+
+ # FreeBSD (11.1, at least) obsoletes EAI_ADDRFAMILY and EAI_NODATA
+ platform_is :freebsd do
+ consts = %w(EAI_MEMORY)
+ end
+
consts.each do |c|
Socket::Constants.should have_constant(c)
end
diff --git a/spec/ruby/library/socket/socket/accept_nonblock_spec.rb b/spec/ruby/library/socket/socket/accept_nonblock_spec.rb
index 201d472f16..0942ff8a90 100644
--- a/spec/ruby/library/socket/socket/accept_nonblock_spec.rb
+++ b/spec/ruby/library/socket/socket/accept_nonblock_spec.rb
@@ -86,6 +86,8 @@ describe 'Socket#accept_nonblock' do
@client = Socket.new(family, :STREAM, 0)
@client.connect(addr)
+
+ platform_is(:freebsd) { IO.select([@server]) }
end
after do
diff --git a/spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb b/spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb
index 76a07e3bfb..5437e9b0bb 100644
--- a/spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb
+++ b/spec/ruby/library/socket/socket/recvfrom_nonblock_spec.rb
@@ -36,6 +36,8 @@ describe 'Socket#recvfrom_nonblock' do
describe 'with data available' do
before do
@client.write('hello')
+
+ platform_is(:freebsd) { IO.select([@server]) }
end
platform_is_not :windows do
@@ -52,6 +54,8 @@ describe 'Socket#recvfrom_nonblock' do
5.times do
@client.write('hello')
+ platform_is(:freebsd) { IO.select([@server]) }
+
msg, _ = @server.recvfrom_nonblock(5)
msg.should == 'hello'
diff --git a/spec/ruby/library/socket/socket/udp_server_recv_spec.rb b/spec/ruby/library/socket/socket/udp_server_recv_spec.rb
index 05fef4bca8..f3db167b92 100644
--- a/spec/ruby/library/socket/socket/udp_server_recv_spec.rb
+++ b/spec/ruby/library/socket/socket/udp_server_recv_spec.rb
@@ -20,6 +20,12 @@ describe 'Socket.udp_server_recv' do
@client.write('hello')
+ # FreeBSD sockets are not instanteous over loopback and
+ # will EAGAIN on recv.
+ platform_is :freebsd do
+ IO.select([@server])
+ end
+
Socket.udp_server_recv([@server]) do |message, source|
msg = message
src = source
diff --git a/spec/ruby/library/socket/tcpserver/initialize_spec.rb b/spec/ruby/library/socket/tcpserver/initialize_spec.rb
index 2de8c764b2..9a55cf17e2 100644
--- a/spec/ruby/library/socket/tcpserver/initialize_spec.rb
+++ b/spec/ruby/library/socket/tcpserver/initialize_spec.rb
@@ -17,8 +17,9 @@ describe 'TCPServer#initialize' do
end
platform_is_not :windows do
- it 'sets the hostname to 0.0.0.0' do
- @server.local_address.ip_address.should == '0.0.0.0'
+ it 'sets the hostname to 0.0.0.0 or ::' do
+ a = @server.local_address
+ a.ip_address.should == (a.ipv6? ? '::' : '0.0.0.0')
end
end
@@ -42,8 +43,9 @@ describe 'TCPServer#initialize' do
end
platform_is_not :windows do
- it 'sets the hostname to 0.0.0.0' do
- @server.local_address.ip_address.should == '0.0.0.0'
+ it 'sets the hostname to 0.0.0.0 or ::' do
+ a = @server.local_address
+ a.ip_address.should == (a.ipv6? ? '::' : '0.0.0.0')
end
end
end
diff --git a/spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb b/spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb
index 48b7360035..8c9d598676 100644
--- a/spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb
+++ b/spec/ruby/library/socket/udpsocket/recvfrom_nonblock_spec.rb
@@ -40,6 +40,8 @@ describe 'UDPSocket#recvfrom_nonblock' do
describe 'with data available' do
before do
@client.write('hello')
+
+ platform_is(:freebsd) { IO.select([@server]) }
end
it 'returns an Array containing the data and an Array' do