test_syssend: avoid warning on cleanup
[kgio.git] / test / test_accept_class.rb
blob01dc26331f3ab99ccb485f9ab7edc90f9ab19b93
1 require 'test/unit'
2 require 'io/nonblock'
3 $-w = true
4 require 'kgio'
6 class TestAcceptClass < Test::Unit::TestCase
7   class FooSocket < Kgio::Socket
8   end
10   def setup
11     assert_equal Kgio::Socket, Kgio.accept_class
12   end
14   def teardown
15     Kgio.accept_class = nil
16     assert_equal Kgio::Socket, Kgio.accept_class
17   end
19   def test_tcp_socket
20     Kgio.accept_class = Kgio::TCPSocket
21     assert_equal Kgio::TCPSocket, Kgio.accept_class
22   end
24   def test_invalid
25     assert_raises(TypeError) { Kgio.accept_class = TCPSocket }
26     assert_equal Kgio::Socket, Kgio.accept_class
27   end
29   def test_accepted_class
30     @host = ENV["TEST_HOST"] || '127.0.0.1'
31     @srv = Kgio::TCPServer.new(@host, 0)
32     @port = @srv.addr[1]
33     socks = []
35     Kgio.accept_class = Kgio::TCPSocket
36     socks << TCPSocket.new(@host, @port)
37     assert_instance_of Kgio::TCPSocket, @srv.kgio_accept
38     socks << TCPSocket.new(@host, @port)
39     IO.select([@srv])
40     assert_instance_of Kgio::TCPSocket, @srv.kgio_tryaccept
42     Kgio.accept_class = nil
43     socks << TCPSocket.new(@host, @port)
44     assert_instance_of Kgio::Socket, @srv.kgio_accept
45     socks << TCPSocket.new(@host, @port)
46     IO.select([@srv])
47     assert_instance_of Kgio::Socket, @srv.kgio_tryaccept
49     Kgio.accept_class = Kgio::UNIXSocket
50     socks << TCPSocket.new(@host, @port)
51     assert_instance_of Kgio::UNIXSocket, @srv.kgio_accept
52     socks << TCPSocket.new(@host, @port)
53     IO.select([@srv])
54     assert_instance_of Kgio::UNIXSocket, @srv.kgio_tryaccept
56     socks << TCPSocket.new(@host, @port)
57     assert_instance_of FooSocket, @srv.kgio_accept(FooSocket)
59     socks << TCPSocket.new(@host, @port)
60     IO.select([@srv])
61     assert_instance_of FooSocket, @srv.kgio_tryaccept(FooSocket)
62     socks.each(&:close)
63   end
64 end