Ruby mogilefs-client 3.7.1
[ruby-mogilefs-client.git] / test / socket_test.rb
blobd0aff3267da7d92546f464ed6bec2381ec8f64ee
1 require "socket"
2 require "test/unit"
3 module SocketTest
5   def setup
6     @host = ENV["TEST_HOST"] || '127.0.0.1'
7     @srv = TCPServer.new(@host, 0)
8     @port = @srv.addr[1]
9   end
11   def test_start
12     sock = MogileFS::Socket.start(@host, @port)
13     assert_instance_of MogileFS::Socket, sock, sock.inspect
14     begin
15       sock.write_nonblock("a")
16     rescue Errno::EAGAIN
17     end
18     thr = Thread.new { @srv.accept }
19     accepted = thr.value
20     assert_instance_of TCPSocket, accepted, accepted.inspect
21     assert_nil sock.close
22   end
24   def test_new
25     sock = MogileFS::Socket.tcp(@host, @port)
26     assert_instance_of MogileFS::Socket, sock, sock.inspect
27     sock.write_nonblock("a")
28     thr = Thread.new { @srv.accept }
29     accepted = thr.value
30     assert_instance_of TCPSocket, accepted, accepted.inspect
31     assert_equal "a", accepted.read(1)
32     assert_nil sock.close
33   end
35   def test_timed_peek
36     sock = MogileFS::Socket.tcp(@host, @port)
37     accepted = @srv.accept
38     buf = ""
39     assert_raises(MogileFS::UnreadableSocketError) do
40       sock.timed_peek(2, buf, 0.01)
41     end
42     accepted.write "HI"
43     assert_equal "HI", sock.timed_peek(2, buf, 0.1)
44     assert_equal "HI", buf
45     assert_equal "HI", sock.timed_peek(2, buf)
46     assert_equal "HI", sock.timed_read(2, buf)
47     accepted.close
48     assert_nil sock.timed_peek(2, buf)
49   end
51   def test_timed_read
52     sock = MogileFS::Socket.tcp(@host, @port)
53     accepted = @srv.accept
54     buf = ""
55     assert_raises(MogileFS::UnreadableSocketError) do
56       sock.timed_read(2, buf, 0.01)
57     end
58     accepted.write "HI"
59     assert_equal "HI", sock.timed_read(2, buf, 0.1)
60     assert_equal "HI", buf
61     assert_raises(MogileFS::UnreadableSocketError) do
62       sock.timed_read(2, buf, 0.01)
63     end
64     accepted.close
65     assert_nil sock.timed_read(2, buf)
66   end
68   def test_timed_write
69     sock = MogileFS::Socket.tcp(@host, @port)
70     accepted = @srv.accept
71     buf = "A" * 100000
72     written = 0
73     assert_raises(MogileFS::RequestTruncatedError) do
74       loop do
75         assert_equal buf.bytesize, sock.timed_write(buf, 0.01)
76         written += buf.size
77       end
78     end
79     tmp = accepted.read(written)
80     assert_equal written, tmp.size
81   end
83   def timed_gets
84     sock = MogileFS::Socket.tcp(@host, @port)
85     accepted = @srv.accept
86     assert_raises(MogileFS::UnreadableSocketError) { sock.timed_gets(0.01) }
87     accepted.write "HI"
88     assert_raises(MogileFS::UnreadableSocketError) { sock.timed_gets(0.01) }
89     accepted.write "\n"
90     assert_equal "HI\n", sock.timed_gets
91     accepted.close
92     assert_nil sock.timed_gets
93   end
95   def test_read_in_full
96     sock = MogileFS::Socket.tcp(@host, @port)
97     accepted = @srv.accept
98     Thread.new do
99       accepted.write "HELLO"
100       sleep 0.1
101       accepted.write " "
102       sleep 0.1
103       accepted.write "WORLD!!!"
104     end
105     buf = sock.read("HELLO WORLD!!!".bytesize)
106     assert_equal "HELLO WORLD!!!", buf
107   end