mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
This commit was manufactured by cvs2svn to create branch 'ruby_1_8'.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10213 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
23e5a96017
commit
0eef378965
1 changed files with 156 additions and 0 deletions
156
test/socket/test_unix.rb
Normal file
156
test/socket/test_unix.rb
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
begin
|
||||
require "socket"
|
||||
rescue LoadError
|
||||
end
|
||||
|
||||
require "test/unit"
|
||||
require "tempfile"
|
||||
|
||||
class TestUNIXSocket < Test::Unit::TestCase
|
||||
def test_fd_passing
|
||||
r1, w = IO.pipe
|
||||
s1, s2 = UNIXSocket.pair
|
||||
begin
|
||||
s1.send_io(nil)
|
||||
rescue NotImplementedError
|
||||
assert_raise(NotImplementedError) { s2.recv_io }
|
||||
rescue TypeError
|
||||
s1.send_io(r1)
|
||||
r2 = s2.recv_io
|
||||
assert_equal(r1.stat.ino, r2.stat.ino)
|
||||
assert_not_equal(r1.fileno, r2.fileno)
|
||||
w.syswrite "a"
|
||||
assert_equal("a", r2.sysread(10))
|
||||
ensure
|
||||
s1.close
|
||||
s2.close
|
||||
w.close
|
||||
r1.close
|
||||
r2.close if r2 && !r2.closed?
|
||||
end
|
||||
end
|
||||
|
||||
def bound_unix_socket(klass)
|
||||
tmpfile = Tempfile.new("testrubysock")
|
||||
path = tmpfile.path
|
||||
tmpfile.close(true)
|
||||
yield klass.new(path), path
|
||||
ensure
|
||||
File.unlink path if path && File.socket?(path)
|
||||
end
|
||||
|
||||
def test_addr
|
||||
bound_unix_socket(UNIXServer) {|serv, path|
|
||||
c = UNIXSocket.new(path)
|
||||
s = serv.accept
|
||||
assert_equal(["AF_UNIX", path], c.peeraddr)
|
||||
assert_equal(["AF_UNIX", ""], c.addr)
|
||||
assert_equal(["AF_UNIX", ""], s.peeraddr)
|
||||
assert_equal(["AF_UNIX", path], s.addr)
|
||||
assert_equal(path, s.path)
|
||||
assert_equal("", c.path)
|
||||
}
|
||||
end
|
||||
|
||||
def test_noname_path
|
||||
s1, s2 = UNIXSocket.pair
|
||||
assert_equal("", s1.path)
|
||||
assert_equal("", s2.path)
|
||||
ensure
|
||||
s1.close
|
||||
s2.close
|
||||
end
|
||||
|
||||
def test_noname_addr
|
||||
s1, s2 = UNIXSocket.pair
|
||||
assert_equal(["AF_UNIX", ""], s1.addr)
|
||||
assert_equal(["AF_UNIX", ""], s2.addr)
|
||||
ensure
|
||||
s1.close
|
||||
s2.close
|
||||
end
|
||||
|
||||
def test_noname_peeraddr
|
||||
s1, s2 = UNIXSocket.pair
|
||||
assert_equal(["AF_UNIX", ""], s1.peeraddr)
|
||||
assert_equal(["AF_UNIX", ""], s2.peeraddr)
|
||||
ensure
|
||||
s1.close
|
||||
s2.close
|
||||
end
|
||||
|
||||
def test_noname_unpack_sockaddr_un
|
||||
s1, s2 = UNIXSocket.pair
|
||||
assert_equal("", Socket.unpack_sockaddr_un(s1.getsockname))
|
||||
assert_equal("", Socket.unpack_sockaddr_un(s2.getsockname))
|
||||
assert_equal("", Socket.unpack_sockaddr_un(s1.getpeername))
|
||||
assert_equal("", Socket.unpack_sockaddr_un(s2.getpeername))
|
||||
ensure
|
||||
s1.close
|
||||
s2.close
|
||||
end
|
||||
|
||||
def test_noname_recvfrom
|
||||
s1, s2 = UNIXSocket.pair
|
||||
s2.write("a")
|
||||
assert_equal(["a", ["AF_UNIX", ""]], s1.recvfrom(10))
|
||||
ensure
|
||||
s1.close
|
||||
s2.close
|
||||
end
|
||||
|
||||
def test_noname_recvfrom_nonblock
|
||||
s1, s2 = UNIXSocket.pair
|
||||
s2.write("a")
|
||||
IO.select [s1]
|
||||
assert_equal(["a", ["AF_UNIX", ""]], s1.recvfrom_nonblock(10))
|
||||
ensure
|
||||
s1.close
|
||||
s2.close
|
||||
end
|
||||
|
||||
def test_too_long_path
|
||||
assert_raise(ArgumentError) { Socket.sockaddr_un("a" * 300) }
|
||||
assert_raise(ArgumentError) { UNIXServer.new("a" * 300) }
|
||||
end
|
||||
|
||||
def test_nul
|
||||
assert_raise(ArgumentError) { Socket.sockaddr_un("a\0b") }
|
||||
assert_raise(ArgumentError) { UNIXServer.new("a\0b") }
|
||||
end
|
||||
|
||||
def test_dgram_pair
|
||||
s1, s2 = UNIXSocket.pair(Socket::SOCK_DGRAM)
|
||||
assert_raise(Errno::EAGAIN) { s1.recvfrom_nonblock(10) }
|
||||
s2.send("", 0)
|
||||
s2.send("haha", 0)
|
||||
s2.send("", 0)
|
||||
s2.send("", 0)
|
||||
assert_equal("", s1.recv(10))
|
||||
assert_equal("haha", s1.recv(10))
|
||||
assert_equal("", s1.recv(10))
|
||||
assert_equal("", s1.recv(10))
|
||||
assert_raise(Errno::EAGAIN) { s1.recvfrom_nonblock(10) }
|
||||
ensure
|
||||
s1.close
|
||||
s2.close
|
||||
end
|
||||
|
||||
def test_seqpacket_pair
|
||||
s1, s2 = UNIXSocket.pair(Socket::SOCK_SEQPACKET)
|
||||
assert_raise(Errno::EAGAIN) { s1.recvfrom_nonblock(10) }
|
||||
s2.send("", 0)
|
||||
s2.send("haha", 0)
|
||||
s2.send("", 0)
|
||||
s2.send("", 0)
|
||||
assert_equal("", s1.recv(10))
|
||||
assert_equal("haha", s1.recv(10))
|
||||
assert_equal("", s1.recv(10))
|
||||
assert_equal("", s1.recv(10))
|
||||
assert_raise(Errno::EAGAIN) { s1.recvfrom_nonblock(10) }
|
||||
ensure
|
||||
s1.close
|
||||
s2.close
|
||||
end
|
||||
|
||||
end if defined?(UNIXSocket)
|
||||
Loading…
Add table
Add a link
Reference in a new issue