switch back to gemspec development dependencies
[raindrops.git] / test / test_linux_tcp_info.rb
blobc947211fcca142def4edd0bb6ba794ae5fdaebc5
1 # -*- encoding: binary -*-
2 require 'test/unit'
3 require 'tempfile'
4 require 'raindrops'
5 require 'socket'
6 require 'pp'
7 $stderr.sync = $stdout.sync = true
8 class TestLinuxTCP_Info < Test::Unit::TestCase
10   TEST_ADDR = ENV['UNICORN_TEST_ADDR'] || '127.0.0.1'
12   # Linux kernel commit 5ee3afba88f5a79d0bff07ddd87af45919259f91
13   TCP_INFO_useful_listenq = `uname -r`.strip >= '2.6.24'
16   def test_tcp_server
17     s = TCPServer.new(TEST_ADDR, 0)
18     rv = Raindrops::TCP_Info.new s
19     c = TCPSocket.new TEST_ADDR, s.addr[1]
20     tmp = Raindrops::TCP_Info.new s
21     TCP_INFO_useful_listenq and assert_equal 1, tmp.unacked
23     assert_equal 0, rv.unacked
24     a = s.accept
25     tmp = Raindrops::TCP_Info.new s
26     assert_equal 0, tmp.unacked
27     before = tmp.object_id
29     tmp.get!(s)
30     assert_equal before, tmp.object_id
32     ensure
33       c.close if c
34       a.close if a
35       s.close
36   end
38   def test_accessors
39     s = TCPServer.new TEST_ADDR, 0
40     tmp = Raindrops::TCP_Info.new s
41     tcp_info_methods = tmp.methods - Object.new.methods
42     assert tcp_info_methods.size >= 32
43     tcp_info_methods.each do |m|
44       next if m.to_sym == :get!
45       val = tmp.__send__ m
46       assert_kind_of Integer, val
47       assert val >= 0
48     end
49     ensure
50       s.close
51   end
53   def test_tcp_server_delayed
54     delay = 0.010
55     delay_ms = (delay * 1000).to_i
56     s = TCPServer.new(TEST_ADDR, 0)
57     c = TCPSocket.new TEST_ADDR, s.addr[1]
58     c.syswrite "."
59     sleep(delay * 1.2)
60     a = s.accept
61     i = Raindrops::TCP_Info.new(a)
62     assert i.last_data_recv >= delay_ms, "#{i.last_data_recv} < #{delay_ms}"
63     ensure
64       c.close if c
65       a.close if a
66       s.close
67   end
68 end if RUBY_PLATFORM =~ /linux/