diff options
Diffstat (limited to 'spec/rubyspec/library/socket/socket')
7 files changed, 48 insertions, 42 deletions
diff --git a/spec/rubyspec/library/socket/socket/bind_spec.rb b/spec/rubyspec/library/socket/socket/bind_spec.rb index 57dff3bd6d..399c988b32 100644 --- a/spec/rubyspec/library/socket/socket/bind_spec.rb +++ b/spec/rubyspec/library/socket/socket/bind_spec.rb @@ -5,8 +5,8 @@ include Socket::Constants describe "Socket#bind on SOCK_DGRAM socket" do before :each do - @sock = Socket.new(AF_INET, SOCK_DGRAM, 0); - @sockaddr = Socket.pack_sockaddr_in(SocketSpecs.port, "127.0.0.1"); + @sock = Socket.new(AF_INET, SOCK_DGRAM, 0) + @sockaddr = Socket.pack_sockaddr_in(0, "127.0.0.1") end after :each do @@ -22,30 +22,30 @@ describe "Socket#bind on SOCK_DGRAM socket" do @sock.bind(@sockaddr).should == 0 end - it "raises Errno::EINVAL when binding to an already bound port" do - @sock.bind(@sockaddr); + it "raises Errno::EINVAL when already bound" do + @sock.bind(@sockaddr) - lambda { @sock.bind(@sockaddr); }.should raise_error(Errno::EINVAL); + lambda { @sock.bind(@sockaddr) }.should raise_error(Errno::EINVAL) end it "raises Errno::EADDRNOTAVAIL when the specified sockaddr is not available from the local machine" do - sockaddr1 = Socket.pack_sockaddr_in(SocketSpecs.port, "4.3.2.1"); - lambda { @sock.bind(sockaddr1); }.should raise_error(Errno::EADDRNOTAVAIL) + sockaddr1 = Socket.pack_sockaddr_in(0, "4.3.2.1") + lambda { @sock.bind(sockaddr1) }.should raise_error(Errno::EADDRNOTAVAIL) end platform_is_not :windows, :cygwin do it "raises Errno::EACCES when the current user does not have permission to bind" do - sockaddr1 = Socket.pack_sockaddr_in(1, "127.0.0.1"); - lambda { @sock.bind(sockaddr1); }.should raise_error(Errno::EACCES) + sockaddr1 = Socket.pack_sockaddr_in(1, "127.0.0.1") + lambda { @sock.bind(sockaddr1) }.should raise_error(Errno::EACCES) end end end describe "Socket#bind on SOCK_STREAM socket" do before :each do - @sock = Socket.new(AF_INET, SOCK_STREAM, 0); + @sock = Socket.new(AF_INET, SOCK_STREAM, 0) @sock.setsockopt(SOL_SOCKET, SO_REUSEADDR, true) - @sockaddr = Socket.pack_sockaddr_in(SocketSpecs.port, "127.0.0.1"); + @sockaddr = Socket.pack_sockaddr_in(0, "127.0.0.1") end after :each do @@ -61,21 +61,21 @@ describe "Socket#bind on SOCK_STREAM socket" do @sock.bind(@sockaddr).should == 0 end - it "raises Errno::EINVAL when binding to an already bound port" do - @sock.bind(@sockaddr); + it "raises Errno::EINVAL when already bound" do + @sock.bind(@sockaddr) - lambda { @sock.bind(@sockaddr); }.should raise_error(Errno::EINVAL); + lambda { @sock.bind(@sockaddr) }.should raise_error(Errno::EINVAL) end it "raises Errno::EADDRNOTAVAIL when the specified sockaddr is not available from the local machine" do - sockaddr1 = Socket.pack_sockaddr_in(SocketSpecs.port, "4.3.2.1"); - lambda { @sock.bind(sockaddr1); }.should raise_error(Errno::EADDRNOTAVAIL) + sockaddr1 = Socket.pack_sockaddr_in(0, "4.3.2.1") + lambda { @sock.bind(sockaddr1) }.should raise_error(Errno::EADDRNOTAVAIL) end platform_is_not :windows, :cygwin do it "raises Errno::EACCES when the current user does not have permission to bind" do - sockaddr1 = Socket.pack_sockaddr_in(1, "127.0.0.1"); - lambda { @sock.bind(sockaddr1); }.should raise_error(Errno::EACCES) + sockaddr1 = Socket.pack_sockaddr_in(1, "127.0.0.1") + lambda { @sock.bind(sockaddr1) }.should raise_error(Errno::EACCES) end end end diff --git a/spec/rubyspec/library/socket/socket/connect_nonblock_spec.rb b/spec/rubyspec/library/socket/socket/connect_nonblock_spec.rb index 77c2340688..fd92c0740c 100644 --- a/spec/rubyspec/library/socket/socket/connect_nonblock_spec.rb +++ b/spec/rubyspec/library/socket/socket/connect_nonblock_spec.rb @@ -6,7 +6,8 @@ require 'socket' describe "Socket#connect_nonblock" do before :each do @hostname = "127.0.0.1" - @addr = Socket.sockaddr_in(SocketSpecs.port, @hostname) + @server = TCPServer.new(@hostname, 0) # started, but no accept + @addr = Socket.sockaddr_in(@server.addr[1], @hostname) @socket = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0) @thread = nil end @@ -17,27 +18,31 @@ describe "Socket#connect_nonblock" do end it "connects the socket to the remote side" do - ready = false + port = nil + accept = false @thread = Thread.new do - server = TCPServer.new(@hostname, SocketSpecs.port) - ready = true + server = TCPServer.new(@hostname, 0) + port = server.addr[1] + Thread.pass until accept conn = server.accept conn << "hello!" conn.close server.close end - Thread.pass while (@thread.status and @thread.status != 'sleep') or !ready + Thread.pass until port + addr = Socket.sockaddr_in(port, @hostname) begin - @socket.connect_nonblock(@addr) + @socket.connect_nonblock(addr) rescue Errno::EINPROGRESS end + accept = true IO.select nil, [@socket] begin - @socket.connect_nonblock(@addr) + @socket.connect_nonblock(addr) rescue Errno::EISCONN # Not all OS's use this errno, so we trap and ignore it end diff --git a/spec/rubyspec/library/socket/socket/for_fd_spec.rb b/spec/rubyspec/library/socket/socket/for_fd_spec.rb index 7f3cfcceb4..6688988448 100644 --- a/spec/rubyspec/library/socket/socket/for_fd_spec.rb +++ b/spec/rubyspec/library/socket/socket/for_fd_spec.rb @@ -4,8 +4,9 @@ require 'socket' describe "Socket.for_fd" do before :each do - @server = TCPServer.new("127.0.0.1", SocketSpecs.port) - @client = TCPSocket.open("127.0.0.1", SocketSpecs.port) + @server = TCPServer.new("127.0.0.1", 0) + @port = @server.addr[1] + @client = TCPSocket.open("127.0.0.1", @port) end after :each do diff --git a/spec/rubyspec/library/socket/socket/getnameinfo_spec.rb b/spec/rubyspec/library/socket/socket/getnameinfo_spec.rb index 2b0ea4a723..9fc55dd61b 100644 --- a/spec/rubyspec/library/socket/socket/getnameinfo_spec.rb +++ b/spec/rubyspec/library/socket/socket/getnameinfo_spec.rb @@ -14,9 +14,9 @@ describe "Socket.getnameinfo" do end it "gets the name information and don't resolve it" do - sockaddr = Socket.sockaddr_in SocketSpecs.port, '127.0.0.1' + sockaddr = Socket.sockaddr_in 3333, '127.0.0.1' name_info = Socket.getnameinfo(sockaddr, Socket::NI_NUMERICHOST | Socket::NI_NUMERICSERV) - name_info.should == ['127.0.0.1', "#{SocketSpecs.port}"] + name_info.should == ['127.0.0.1', "3333"] end def should_be_valid_dns_name(name) @@ -28,10 +28,10 @@ describe "Socket.getnameinfo" do end it "gets the name information and resolve the host" do - sockaddr = Socket.sockaddr_in SocketSpecs.port, '127.0.0.1' + sockaddr = Socket.sockaddr_in 3333, '127.0.0.1' name_info = Socket.getnameinfo(sockaddr, Socket::NI_NUMERICSERV) should_be_valid_dns_name(name_info[0]) - name_info[1].should == SocketSpecs.port.to_s + name_info[1].should == 3333.to_s end it "gets the name information and resolves the service" do @@ -44,8 +44,8 @@ describe "Socket.getnameinfo" do end it "gets a 3-element array and doesn't resolve hostname" do - name_info = Socket.getnameinfo(["AF_INET", SocketSpecs.port, '127.0.0.1'], Socket::NI_NUMERICHOST | Socket::NI_NUMERICSERV) - name_info.should == ['127.0.0.1', "#{SocketSpecs.port}"] + name_info = Socket.getnameinfo(["AF_INET", 3333, '127.0.0.1'], Socket::NI_NUMERICHOST | Socket::NI_NUMERICSERV) + name_info.should == ['127.0.0.1', "3333"] end it "gets a 3-element array and resolves the service" do @@ -54,8 +54,8 @@ describe "Socket.getnameinfo" do end it "gets a 4-element array and doesn't resolve hostname" do - name_info = Socket.getnameinfo(["AF_INET", SocketSpecs.port, 'foo', '127.0.0.1'], Socket::NI_NUMERICHOST | Socket::NI_NUMERICSERV) - name_info.should == ['127.0.0.1', "#{SocketSpecs.port}"] + name_info = Socket.getnameinfo(["AF_INET", 3333, 'foo', '127.0.0.1'], Socket::NI_NUMERICHOST | Socket::NI_NUMERICSERV) + name_info.should == ['127.0.0.1', "3333"] end it "gets a 4-element array and resolves the service" do diff --git a/spec/rubyspec/library/socket/socket/listen_spec.rb b/spec/rubyspec/library/socket/socket/listen_spec.rb index ebc97954fb..bea87f4ec5 100644 --- a/spec/rubyspec/library/socket/socket/listen_spec.rb +++ b/spec/rubyspec/library/socket/socket/listen_spec.rb @@ -14,7 +14,7 @@ describe "Socket#listen" do end it "verifies we can listen for incoming connections" do - sockaddr = Socket.pack_sockaddr_in(SocketSpecs.port, "127.0.0.1") + sockaddr = Socket.pack_sockaddr_in(0, "127.0.0.1") @socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true) @socket.bind(sockaddr) @socket.listen(1).should == 0 diff --git a/spec/rubyspec/library/socket/socket/unpack_sockaddr_in_spec.rb b/spec/rubyspec/library/socket/socket/unpack_sockaddr_in_spec.rb index 2df3b69a6d..91d2b947a1 100644 --- a/spec/rubyspec/library/socket/socket/unpack_sockaddr_in_spec.rb +++ b/spec/rubyspec/library/socket/socket/unpack_sockaddr_in_spec.rb @@ -5,13 +5,13 @@ require 'socket' describe "Socket.unpack_sockaddr_in" do it "decodes the host name and port number of a packed sockaddr_in" do - sockaddr = Socket.sockaddr_in SocketSpecs.port, '127.0.0.1' - Socket.unpack_sockaddr_in(sockaddr).should == [SocketSpecs.port, '127.0.0.1'] + sockaddr = Socket.sockaddr_in 3333, '127.0.0.1' + Socket.unpack_sockaddr_in(sockaddr).should == [3333, '127.0.0.1'] end it "gets the hostname and port number from a passed Addrinfo" do - addrinfo = Addrinfo.tcp('127.0.0.1', SocketSpecs.port) - Socket.unpack_sockaddr_in(addrinfo).should == [SocketSpecs.port, '127.0.0.1'] + addrinfo = Addrinfo.tcp('127.0.0.1', 3333) + Socket.unpack_sockaddr_in(addrinfo).should == [3333, '127.0.0.1'] end platform_is_not :windows do diff --git a/spec/rubyspec/library/socket/socket/unpack_sockaddr_un_spec.rb b/spec/rubyspec/library/socket/socket/unpack_sockaddr_un_spec.rb index 4d558c89c4..f81d36f7e9 100644 --- a/spec/rubyspec/library/socket/socket/unpack_sockaddr_un_spec.rb +++ b/spec/rubyspec/library/socket/socket/unpack_sockaddr_un_spec.rb @@ -14,12 +14,12 @@ describe 'Socket.unpack_sockaddr_un' do end it 'raises an ArgumentError when the sin_family is not AF_UNIX' do - sockaddr = Socket.sockaddr_in(SocketSpecs.port, '127.0.0.1') + sockaddr = Socket.sockaddr_in(0, '127.0.0.1') lambda { Socket.unpack_sockaddr_un(sockaddr) }.should raise_error(ArgumentError) end it 'raises an ArgumentError when passed addrinfo is not AF_UNIX' do - addrinfo = Addrinfo.tcp('127.0.0.1', SocketSpecs.port) + addrinfo = Addrinfo.tcp('127.0.0.1', 0) lambda { Socket.unpack_sockaddr_un(addrinfo) }.should raise_error(ArgumentError) end end |