Updated MSpec source to 1c3ee1c8.
[rbx.git] / test / mri / socket / test_socket.rb
blobfc01467f16701d31fb5702dd6de133cd75e1842b
1 begin
2   require "socket"
3   require "test/unit"
4 rescue LoadError
5 end
7 class TestBasicSocket < Test::Unit::TestCase
8   def inet_stream
9     sock = Socket.new(Socket::AF_INET, Socket::SOCK_STREAM, 0)
10     yield sock
11   ensure
12     assert_raise(IOError) {sock.close}
13   end
15   def test_getsockopt
16     inet_stream do |s|
17       n = s.getsockopt(Socket::SOL_SOCKET, Socket::SO_TYPE)
18       assert_equal([Socket::SOCK_STREAM].pack("i"), n)
19       n = s.getsockopt(Socket::SOL_SOCKET, Socket::SO_ERROR)
20       assert_equal([0].pack("i"), n)
21       val = Object.new
22       class << val; self end.__send__(:define_method, :to_int) {
23         s.close
24         Socket::SO_TYPE
25       }
26       assert_raise(IOError) {
27         n = s.getsockopt(Socket::SOL_SOCKET, val)
28       }
29     end
30   end
32   def test_setsockopt # [ruby-dev:25039]
33     s = nil
34     linger = [0, 0].pack("ii")
36     val = Object.new
37     class << val; self end.__send__(:define_method, :to_str) {
38       s.close
39       linger
40     }
41     inet_stream do |s|
42       assert_equal(0, s.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, linger))
44       assert_raise(IOError) {
45         s.setsockopt(Socket::SOL_SOCKET, Socket::SO_LINGER, val)
46       }
47     end
49     val = Object.new
50     class << val; self end.__send__(:define_method, :to_int) {
51       s.close
52       Socket::SO_LINGER
53     }
54     inet_stream do |s|
55       assert_raise(IOError) {
56         s.setsockopt(Socket::SOL_SOCKET, val, linger)
57       }
58     end
59   end
61   def test_listen
62     s = nil
63     log = Object.new
64     class << log; self end.__send__(:define_method, :to_int) {
65       s.close
66       2
67     }
68     inet_stream do |s|
69       assert_raise(IOError) {
70         s.listen(log)
71       }
72     end
73   end
74 end if defined?(Socket)
76 class TestSocket < Test::Unit::TestCase
77   def test_unpack_sockaddr
78     sockaddr_in = Socket.sockaddr_in(80, "")
79     assert_raise(ArgumentError) { Socket.unpack_sockaddr_un(sockaddr_in) }
80     sockaddr_un = Socket.sockaddr_un("/tmp/s")
81     assert_raise(ArgumentError) { Socket.unpack_sockaddr_in(sockaddr_un) }
82   end
83 end if defined?(Socket) && Socket.respond_to?(:sockaddr_un)