about summary refs log tree commit homepage
path: root/test
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2011-06-14 08:41:32 +0000
committerEric Wong <normalperson@yhbt.net>2011-06-14 08:41:32 +0000
commitbbf9a3bc0ca2d91705e27ad8bfb5c0ed9651a2ef (patch)
treedd6ebb2fb23b4bb7b63f88c3c3df2e7060dd833b /test
parentd224563823accca63fd871260e3f0dad6758c8d4 (diff)
downloadkgio-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.rb24
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