summaryrefslogtreecommitdiff
path: root/spec/ruby/library/socket/addrinfo/ip_address_spec.rb
diff options
context:
space:
mode:
authoreregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-08-03 16:19:40 +0000
committereregon <eregon@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-08-03 16:19:40 +0000
commitb53cf149ad8d7c46572e4567ca949b4f82ebb22c (patch)
treeee5032bcb38573dade8ba2c46acbcc0d5f3ddfe3 /spec/ruby/library/socket/addrinfo/ip_address_spec.rb
parentaeeaadaad08038217440c1e9e7c5ca126d7dc633 (diff)
Update to ruby/spec@9be7c7e
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64180 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'spec/ruby/library/socket/addrinfo/ip_address_spec.rb')
-rw-r--r--spec/ruby/library/socket/addrinfo/ip_address_spec.rb55
1 files changed, 52 insertions, 3 deletions
diff --git a/spec/ruby/library/socket/addrinfo/ip_address_spec.rb b/spec/ruby/library/socket/addrinfo/ip_address_spec.rb
index c36399bf0c..004de37254 100644
--- a/spec/ruby/library/socket/addrinfo/ip_address_spec.rb
+++ b/spec/ruby/library/socket/addrinfo/ip_address_spec.rb
@@ -1,5 +1,4 @@
-require_relative '../../../spec_helper'
-require 'socket'
+require_relative '../spec_helper'
describe "Addrinfo#ip_address" do
describe "for an ipv4 socket" do
@@ -22,7 +21,7 @@ describe "Addrinfo#ip_address" do
end
end
- platform_is_not :windows do
+ with_feature :unix_socket do
describe "for a unix socket" do
before :each do
@addrinfo = Addrinfo.unix("/tmp/sock")
@@ -33,4 +32,54 @@ describe "Addrinfo#ip_address" do
end
end
end
+
+ describe 'with an Array as the socket address' do
+ it 'returns the IP as a String' do
+ sockaddr = ['AF_INET', 80, 'localhost', '127.0.0.1']
+ addr = Addrinfo.new(sockaddr)
+
+ addr.ip_address.should == '127.0.0.1'
+ end
+ end
+
+ describe 'without an IP address' do
+ before do
+ @ips = ['127.0.0.1', '0.0.0.0', '::1']
+ end
+
+ # Both these cases seem to return different values at times on MRI. Since
+ # this is network dependent we can't rely on an exact IP being returned.
+ it 'returns the local IP address when using an empty String as the IP' do
+ sockaddr = Socket.sockaddr_in(80, '')
+ addr = Addrinfo.new(sockaddr)
+
+ @ips.include?(addr.ip_address).should == true
+ end
+
+ it 'returns the local IP address when using nil as the IP' do
+ sockaddr = Socket.sockaddr_in(80, nil)
+ addr = Addrinfo.new(sockaddr)
+
+ @ips.include?(addr.ip_address).should == true
+ end
+ end
+
+ # On MRI calling Addrinfo#ip_address with AF_UNSPEC as the address family is
+ # supposed to raise a SocketError. MRI however doesn't provide a way to
+ # actually initialize an Addrinfo with AF_UNSPEC, nor does it allow stubbing
+ # of any methods since Addrinfo doesn't use any Ruby methods for checking the
+ # IP address. As a result we can only run this test on Rubinius.
+ with_feature :pure_ruby_addrinfo do
+ describe 'with a non IPv4 or IPv6 address' do
+ it 'raises SocketError' do
+ sockaddr = Socket.sockaddr_in(80, '127.0.0.1')
+ addr = Addrinfo.new(sockaddr)
+
+ addr.stub!(:ipv4?).and_return(false)
+ addr.stub!(:ipv6?).and_return(false)
+
+ lambda { addr.ip_address }.should raise_error(SocketError)
+ end
+ end
+ end
end