mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64180 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
150 lines
3.6 KiB
Ruby
150 lines
3.6 KiB
Ruby
require_relative '../spec_helper'
|
|
require_relative '../fixtures/classes'
|
|
|
|
describe 'Socket#connect_address' do
|
|
describe 'using an unbound socket' do
|
|
after do
|
|
@sock.close
|
|
end
|
|
|
|
it 'raises SocketError' do
|
|
@sock = Socket.new(:INET, :STREAM)
|
|
|
|
lambda { @sock.connect_address }.should raise_error(SocketError)
|
|
end
|
|
end
|
|
|
|
describe 'using a socket bound to 0.0.0.0' do
|
|
before do
|
|
@sock = Socket.new(:INET, :STREAM)
|
|
@sock.bind(Socket.sockaddr_in(0, '0.0.0.0'))
|
|
end
|
|
|
|
after do
|
|
@sock.close
|
|
end
|
|
|
|
it 'returns an Addrinfo' do
|
|
@sock.connect_address.should be_an_instance_of(Addrinfo)
|
|
end
|
|
|
|
it 'uses 127.0.0.1 as the IP address' do
|
|
@sock.connect_address.ip_address.should == '127.0.0.1'
|
|
end
|
|
|
|
it 'uses the correct port number' do
|
|
@sock.connect_address.ip_port.should > 0
|
|
end
|
|
|
|
it 'uses AF_INET as the address family' do
|
|
@sock.connect_address.afamily.should == Socket::AF_INET
|
|
end
|
|
|
|
it 'uses PF_INET as the address family' do
|
|
@sock.connect_address.pfamily.should == Socket::PF_INET
|
|
end
|
|
|
|
it 'uses SOCK_STREAM as the socket type' do
|
|
@sock.connect_address.socktype.should == Socket::SOCK_STREAM
|
|
end
|
|
|
|
it 'uses 0 as the protocol' do
|
|
@sock.connect_address.protocol.should == 0
|
|
end
|
|
end
|
|
|
|
describe 'using a socket bound to ::' do
|
|
before do
|
|
@sock = Socket.new(:INET6, :STREAM)
|
|
@sock.bind(Socket.sockaddr_in(0, '::'))
|
|
end
|
|
|
|
after do
|
|
@sock.close
|
|
end
|
|
|
|
it 'returns an Addrinfo' do
|
|
@sock.connect_address.should be_an_instance_of(Addrinfo)
|
|
end
|
|
|
|
it 'uses ::1 as the IP address' do
|
|
@sock.connect_address.ip_address.should == '::1'
|
|
end
|
|
|
|
it 'uses the correct port number' do
|
|
@sock.connect_address.ip_port.should > 0
|
|
end
|
|
|
|
it 'uses AF_INET6 as the address family' do
|
|
@sock.connect_address.afamily.should == Socket::AF_INET6
|
|
end
|
|
|
|
it 'uses PF_INET6 as the address family' do
|
|
@sock.connect_address.pfamily.should == Socket::PF_INET6
|
|
end
|
|
|
|
it 'uses SOCK_STREAM as the socket type' do
|
|
@sock.connect_address.socktype.should == Socket::SOCK_STREAM
|
|
end
|
|
|
|
it 'uses 0 as the protocol' do
|
|
@sock.connect_address.protocol.should == 0
|
|
end
|
|
end
|
|
|
|
with_feature :unix_socket do
|
|
describe 'using an unbound UNIX socket' do
|
|
before do
|
|
@path = SocketSpecs.socket_path
|
|
@server = UNIXServer.new(@path)
|
|
@client = UNIXSocket.new(@path)
|
|
end
|
|
|
|
after do
|
|
@client.close
|
|
@server.close
|
|
rm_r(@path)
|
|
end
|
|
|
|
it 'raises SocketError' do
|
|
lambda { @client.connect_address }.should raise_error(SocketError)
|
|
end
|
|
end
|
|
|
|
describe 'using a bound UNIX socket' do
|
|
before do
|
|
@path = SocketSpecs.socket_path
|
|
@sock = UNIXServer.new(@path)
|
|
end
|
|
|
|
after do
|
|
@sock.close
|
|
rm_r(@path)
|
|
end
|
|
|
|
it 'returns an Addrinfo' do
|
|
@sock.connect_address.should be_an_instance_of(Addrinfo)
|
|
end
|
|
|
|
it 'uses the correct socket path' do
|
|
@sock.connect_address.unix_path.should == @path
|
|
end
|
|
|
|
it 'uses AF_UNIX as the address family' do
|
|
@sock.connect_address.afamily.should == Socket::AF_UNIX
|
|
end
|
|
|
|
it 'uses PF_UNIX as the protocol family' do
|
|
@sock.connect_address.pfamily.should == Socket::PF_UNIX
|
|
end
|
|
|
|
it 'uses SOCK_STREAM as the socket type' do
|
|
@sock.connect_address.socktype.should == Socket::SOCK_STREAM
|
|
end
|
|
|
|
it 'uses 0 as the protocol' do
|
|
@sock.connect_address.protocol.should == 0
|
|
end
|
|
end
|
|
end
|
|
end
|