summaryrefslogtreecommitdiff
path: root/spec/rubyspec/library/socket/basicsocket/setsockopt_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/rubyspec/library/socket/basicsocket/setsockopt_spec.rb')
-rw-r--r--spec/rubyspec/library/socket/basicsocket/setsockopt_spec.rb213
1 files changed, 0 insertions, 213 deletions
diff --git a/spec/rubyspec/library/socket/basicsocket/setsockopt_spec.rb b/spec/rubyspec/library/socket/basicsocket/setsockopt_spec.rb
deleted file mode 100644
index 523a22d957..0000000000
--- a/spec/rubyspec/library/socket/basicsocket/setsockopt_spec.rb
+++ /dev/null
@@ -1,213 +0,0 @@
-require File.expand_path('../../../../spec_helper', __FILE__)
-require File.expand_path('../../fixtures/classes', __FILE__)
-
-describe "BasicSocket#setsockopt" do
-
- before :each do
- @sock = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
- end
-
- after :each do
- @sock.close unless @sock.closed?
- end
-
- it "sets the socket linger to 0" do
- linger = [0, 0].pack("ii")
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, linger).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER).to_s
-
- if (n.size == 8) # linger struct on some platforms, not just a value
- n.should == [0, 0].pack("ii")
- else
- n.should == [0].pack("i")
- end
- end
-
- it "sets the socket linger to some positive value" do
- linger = [64, 64].pack("ii")
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, linger).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER).to_s
- if (n.size == 8) # linger struct on some platforms, not just a value
- a = n.unpack('ii')
- a[0].should_not == 0
- a[1].should == 64
- else
- n.should == [64].pack("i")
- end
- end
-
- platform_is_not :windows do
- it "raises EINVAL if passed wrong linger value" do
- lambda do
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, 0)
- end.should raise_error(Errno::EINVAL)
- end
- end
-
- platform_is_not :aix do
- # A known bug in AIX. getsockopt(2) does not properly set
- # the fifth argument for SO_TYPE, SO_OOBINLINE, SO_BROADCAST, etc.
-
- it "sets the socket option Socket::SO_OOBINLINE" do
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, true).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE).to_s
- n.should_not == [0].pack("i")
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, false).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE).to_s
- n.should == [0].pack("i")
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, 1).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE).to_s
- n.should_not == [0].pack("i")
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, 0).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE).to_s
- n.should == [0].pack("i")
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, 2).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE).to_s
- n.should_not == [0].pack("i")
-
- platform_is_not :windows do
- lambda {
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, "")
- }.should raise_error(SystemCallError)
- end
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, "blah").should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE).to_s
- n.should_not == [0].pack("i")
-
- platform_is_not :windows do
- lambda {
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, "0")
- }.should raise_error(SystemCallError)
- end
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, "\x00\x00\x00\x00").should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE).to_s
- n.should == [0].pack("i")
-
- platform_is_not :windows do
- lambda {
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, "1")
- }.should raise_error(SystemCallError)
- end
-
- platform_is_not :windows do
- lambda {
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, "\x00\x00\x00")
- }.should raise_error(SystemCallError)
- end
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, [1].pack('i')).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE).to_s
- n.should_not == [0].pack("i")
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, [0].pack('i')).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE).to_s
- n.should == [0].pack("i")
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE, [1000].pack('i')).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_OOBINLINE).to_s
- n.should_not == [0].pack("i")
- end
- end
-
- it "sets the socket option Socket::SO_SNDBUF" do
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, 4000).should == 0
- sndbuf = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF).to_s
- # might not always be possible to set to exact size
- sndbuf.unpack('i')[0].should >= 4000
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, true).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF).to_s
- n.unpack('i')[0].should >= 1
-
- lambda {
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, nil).should == 0
- }.should raise_error(TypeError)
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, 1).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF).to_s
- n.unpack('i')[0].should >= 1
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, 2).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF).to_s
- n.unpack('i')[0].should >= 2
-
- lambda {
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, "")
- }.should raise_error(SystemCallError)
-
- lambda {
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, "bla")
- }.should raise_error(SystemCallError)
-
- lambda {
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, "0")
- }.should raise_error(SystemCallError)
-
- lambda {
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, "1")
- }.should raise_error(SystemCallError)
-
- lambda {
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, "\x00\x00\x00")
- }.should raise_error(SystemCallError)
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, "\x00\x00\x01\x00").should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF).to_s
- n.unpack('i')[0].should >= "\x00\x00\x01\x00".unpack('i')[0]
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, [4000].pack('i')).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF).to_s
- n.unpack('i')[0].should >= 4000
-
- @sock.setsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF, [1000].pack('i')).should == 0
- n = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF).to_s
- n.unpack('i')[0].should >= 1000
- end
-
- platform_is_not :aix do
- describe 'accepts Socket::Option as argument' do
- it 'boolean' do
- option = Socket::Option.bool(:INET, :SOCKET, :KEEPALIVE, true)
- @sock.setsockopt(option).should == 0
- @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE).bool.should == true
- end
-
- it 'int' do
- option = Socket::Option.int(:INET, :SOCKET, :KEEPALIVE, 1)
- @sock.setsockopt(option).should == 0
- @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE).bool.should == true
- end
- end
- end
-
- platform_is :aix do
- describe 'accepts Socket::Option as argument' do
- it 'boolean' do
- option = Socket::Option.bool(:INET, :SOCKET, :KEEPALIVE, true)
- @sock.setsockopt(option).should == 0
- end
-
- it 'int' do
- option = Socket::Option.int(:INET, :SOCKET, :KEEPALIVE, 1)
- @sock.setsockopt(option).should == 0
- end
- end
- end
-
- describe 'accepts Socket::Option as argument' do
- it 'linger' do
- option = Socket::Option.linger(true, 10)
- @sock.setsockopt(option).should == 0
- onoff, seconds = @sock.getsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER).linger
- seconds.should == 10
- # Both results can be produced depending on the OS and value of Socket::SO_LINGER
- [true, Socket::SO_LINGER].should include(onoff)
- end
- end
-end