diff options
author | Eric Wong <normalperson@yhbt.net> | 2011-06-14 08:41:32 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2011-06-14 08:41:32 +0000 |
commit | bbf9a3bc0ca2d91705e27ad8bfb5c0ed9651a2ef (patch) | |
tree | dd6ebb2fb23b4bb7b63f88c3c3df2e7060dd833b /test | |
parent | d224563823accca63fd871260e3f0dad6758c8d4 (diff) | |
download | kgio-bbf9a3bc0ca2d91705e27ad8bfb5c0ed9651a2ef.tar.gz |
io/wait doesn't have an IO#wait_writable method, yet[1] and IO#wait checks FIONREAD which makes it unsuitable for certain descriptors. This method uses the new rb_wait_for_single_fd() function in Ruby 1.9.r. This internally uses ppoll() under Linux, meaning it performs the same regardless of the FD used. [1] http://redmine.ruby-lang.org/issues/4647 [2] http://redmine.ruby-lang.org/issues/4849
Diffstat (limited to 'test')
-rw-r--r-- | test/test_default_wait.rb | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/test/test_default_wait.rb b/test/test_default_wait.rb index 10033fe..55631fd 100644 --- a/test/test_default_wait.rb +++ b/test/test_default_wait.rb @@ -18,4 +18,28 @@ class TestDefaultWait < Test::Unit::TestCase b.syswrite('.') assert_equal a, a.kgio_wait_readable end + + def test_wait_readable_timed + a, b = Kgio::Pipe.new + t0 = Time.now + assert_nil a.kgio_wait_readable(1.1) + diff = Time.now - t0 + assert_in_delta diff, 1.1, 0.05 + + b.kgio_write '.' + assert_equal a, a.kgio_wait_readable(1.1) + end + + def test_wait_writable_timed + a, b = Kgio::Pipe.new + buf = "*" * 65536 + true until Symbol === b.kgio_trywrite(buf) + t0 = Time.now + assert_nil b.kgio_wait_writable(1.1) + diff = Time.now - t0 + assert_in_delta diff, 1.1, 0.05 + + a.kgio_read(16384) + assert_equal b, b.kgio_wait_writable(1.1) + end end |