1
0
Fork 0
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
This commit is contained in:
eregon 2018-08-03 16:19:40 +00:00
parent aeeaadaad0
commit b53cf149ad
246 changed files with 9108 additions and 548 deletions

View file

@ -1,4 +1,4 @@
require_relative '../../../spec_helper'
require_relative '../spec_helper'
require_relative '../fixtures/classes'
describe "BasicSocket#setsockopt" do
@ -211,3 +211,124 @@ describe "BasicSocket#setsockopt" do
end
end
end
describe 'BasicSocket#setsockopt' do
describe 'using a STREAM socket' do
before do
@socket = Socket.new(:INET, :STREAM)
end
after do
@socket.close
end
describe 'using separate arguments with Symbols' do
it 'raises TypeError when the first argument is nil' do
lambda { @socket.setsockopt(nil, :REUSEADDR, true) }.should raise_error(TypeError)
end
it 'sets a boolean option' do
@socket.setsockopt(:SOCKET, :REUSEADDR, true).should == 0
@socket.getsockopt(:SOCKET, :REUSEADDR).bool.should == true
end
it 'sets an integer option' do
@socket.setsockopt(:IP, :TTL, 255).should == 0
@socket.getsockopt(:IP, :TTL).int.should == 255
end
it 'sets an IPv6 boolean option' do
socket = Socket.new(:INET6, :STREAM)
begin
socket.setsockopt(:IPV6, :V6ONLY, true).should == 0
socket.getsockopt(:IPV6, :V6ONLY).bool.should == true
ensure
socket.close
end
end
platform_is_not :windows do
it 'raises Errno::EINVAL when setting an invalid option value' do
lambda { @socket.setsockopt(:SOCKET, :OOBINLINE, 'bla') }.should raise_error(Errno::EINVAL)
end
end
end
describe 'using separate arguments with Symbols' do
it 'sets a boolean option' do
@socket.setsockopt('SOCKET', 'REUSEADDR', true).should == 0
@socket.getsockopt(:SOCKET, :REUSEADDR).bool.should == true
end
it 'sets an integer option' do
@socket.setsockopt('IP', 'TTL', 255).should == 0
@socket.getsockopt(:IP, :TTL).int.should == 255
end
end
describe 'using separate arguments with constants' do
it 'sets a boolean option' do
@socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true).should == 0
@socket.getsockopt(:SOCKET, :REUSEADDR).bool.should == true
end
it 'sets an integer option' do
@socket.setsockopt(Socket::IPPROTO_IP, Socket::IP_TTL, 255).should == 0
@socket.getsockopt(:IP, :TTL).int.should == 255
end
end
describe 'using separate arguments with custom objects' do
it 'sets a boolean option' do
level = mock(:level)
name = mock(:name)
level.stub!(:to_str).and_return('SOCKET')
name.stub!(:to_str).and_return('REUSEADDR')
@socket.setsockopt(level, name, true).should == 0
end
end
describe 'using a Socket::Option as the first argument' do
it 'sets a boolean option' do
@socket.setsockopt(Socket::Option.bool(:INET, :SOCKET, :REUSEADDR, true)).should == 0
@socket.getsockopt(:SOCKET, :REUSEADDR).bool.should == true
end
it 'sets an integer option' do
@socket.setsockopt(Socket::Option.int(:INET, :IP, :TTL, 255)).should == 0
@socket.getsockopt(:IP, :TTL).int.should == 255
end
it 'raises ArgumentError when passing 2 arguments' do
option = Socket::Option.bool(:INET, :SOCKET, :REUSEADDR, true)
lambda { @socket.setsockopt(option, :REUSEADDR) }.should raise_error(ArgumentError)
end
it 'raises TypeError when passing 3 arguments' do
option = Socket::Option.bool(:INET, :SOCKET, :REUSEADDR, true)
lambda { @socket.setsockopt(option, :REUSEADDR, true) }.should raise_error(TypeError)
end
end
end
with_feature :unix_socket do
describe 'using a UNIX socket' do
before do
@path = SocketSpecs.socket_path
@server = UNIXServer.new(@path)
end
after do
@server.close
rm_r @path
end
it 'sets a boolean option' do
@server.setsockopt(:SOCKET, :REUSEADDR, true)
@server.getsockopt(:SOCKET, :REUSEADDR).bool.should == true
end
end
end
end