tests: retry random ports correctly
[ruby-mogilefs-client.git] / test / test_util.rb
blob49c1735487b68099f150c8f5602d11f4d7dde7dc
1 require 'test/setup'
3 class TestMogileFS__Util < Test::Unit::TestCase
4   include MogileFS::Util
6   def test_mogilefs_write
7     rd, wr = IO.pipe
9     svr = Proc.new do |serv, port|
10       client, client_addr = serv.accept
11       client.sync = true
12       nr = 0
13       loop do
14         begin
15           nr += client.readpartial(16384).length
16         rescue EOFError
17           break
18         end
19       end
20       wr.syswrite("#{nr}\n")
21       client.close rescue nil
22     end
23     t = TempServer.new(svr)
24     s = Socket.mogilefs_new('127.0.0.1', t.port)
25     tmp = s.getsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF)
26     sndbuf_bytes = tmp.unpack('i')[0]
27     big_string = ' ' * (sndbuf_bytes * 10)
29     sent = s.send(big_string, 0)
30     assert(sent < big_string.length)
32     syswrite_full(s, big_string)
33     s.close rescue nil
34     IO.select([rd])
35     assert_equal((sent + big_string.length), rd.sysread(4096).to_i)
36     ensure
37       t.destroy!
38   end
40   def test_write_timeout
41     svr = Proc.new do |serv, port|
42       client, client_addr = serv.accept
43       client.sync = true
44       readed = client.readpartial(16384)
45       sleep
46     end
47     t = TempServer.new(svr)
48     s = Socket.mogilefs_new('127.0.0.1', t.port)
49     tmp = s.getsockopt(Socket::SOL_SOCKET, Socket::SO_SNDBUF)
50     sndbuf_bytes = tmp.unpack('i')[0]
51     big_string = ' ' * (sndbuf_bytes * 10)
53     assert_raises(MogileFS::Timeout) { syswrite_full(s, big_string, 0.1) }
54     s.close rescue nil
55     ensure
56       t.destroy!
57   end
59 end