about summary refs log tree commit homepage
path: root/test/lib_read_write.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/lib_read_write.rb')
-rw-r--r--test/lib_read_write.rb94
1 files changed, 80 insertions, 14 deletions
diff --git a/test/lib_read_write.rb b/test/lib_read_write.rb
index 18f13f0..b8483a0 100644
--- a/test/lib_read_write.rb
+++ b/test/lib_read_write.rb
@@ -19,6 +19,11 @@ module LibReadWriteTest
     assert_nil @rd.kgio_read(5)
   end
 
+  def test_tryread_eof
+    @wr.close
+    assert_nil @rd.kgio_tryread(5)
+  end
+
   def test_write_closed
     @rd.close
     assert_raises(Errno::EPIPE, Errno::ECONNRESET) {
@@ -26,13 +31,25 @@ module LibReadWriteTest
     }
   end
 
+  def test_trywrite_closed
+    @rd.close
+    assert_raises(Errno::EPIPE, Errno::ECONNRESET) {
+      loop { @wr.kgio_trywrite "HI" }
+    }
+  end
+
   def test_write_conv
     assert_equal nil, @wr.kgio_write(10)
     assert_equal "10", @rd.kgio_read(2)
   end
 
-  def test_read_empty
-    assert_equal Kgio::WaitReadable, @rd.kgio_read(1)
+  def test_trywrite_conv
+    assert_equal nil, @wr.kgio_trywrite(10)
+    assert_equal "10", @rd.kgio_tryread(2)
+  end
+
+  def test_tryread_empty
+    assert_equal Kgio::WaitReadable, @rd.kgio_tryread(1)
   end
 
   def test_read_too_much
@@ -40,12 +57,23 @@ module LibReadWriteTest
     assert_equal "hi", @rd.kgio_read(4)
   end
 
+  def test_tryread_too_much
+    assert_equal nil, @wr.kgio_trywrite("hi")
+    assert_equal "hi", @rd.kgio_tryread(4)
+  end
+
   def test_read_short
     assert_equal nil, @wr.kgio_write("hi")
     assert_equal "h", @rd.kgio_read(1)
     assert_equal "i", @rd.kgio_read(1)
   end
 
+  def test_tryread_short
+    assert_equal nil, @wr.kgio_trywrite("hi")
+    assert_equal "h", @rd.kgio_tryread(1)
+    assert_equal "i", @rd.kgio_tryread(1)
+  end
+
   def test_read_extra_buf
     tmp = ""
     tmp_object_id = tmp.object_id
@@ -56,9 +84,9 @@ module LibReadWriteTest
     assert_equal tmp_object_id, rv.object_id
   end
 
-  def test_write_return_wait_writable
+  def test_trywrite_return_wait_writable
     tmp = []
-    tmp << @wr.kgio_write("HI") until tmp[-1] == Kgio::WaitWritable
+    tmp << @wr.kgio_trywrite("HI") until tmp[-1] == Kgio::WaitWritable
     assert_equal Kgio::WaitWritable, tmp.pop
     assert tmp.size > 0
     penultimate = tmp.pop
@@ -67,19 +95,41 @@ module LibReadWriteTest
     tmp.each { |count| assert_equal nil, count }
   end
 
-  def test_monster_write
+  def test_monster_trywrite
     buf = "." * 1024 * 1024 * 10
-    rv = @wr.kgio_write(buf)
+    rv = @wr.kgio_trywrite(buf)
     assert_kind_of String, rv
     assert rv.size < buf.size
     assert_equal(buf, (rv + @rd.read(buf.size - rv.size)))
   end
 
-  def test_wait_readable_ruby_default
-    def @rd.ruby
-      raise RuntimeError, "Hello"
+  def test_monster_write
+    buf = "." * 1024 * 1024 * 10
+    thr = Thread.new { @wr.kgio_write(buf) }
+    readed = @rd.read(buf.size)
+    thr.join
+    assert_nil thr.value
+    assert_equal buf, readed
+  end
+
+  def test_monster_write_wait_writable
+    @wr.instance_variable_set :@nr, 0
+    def @wr.wait_writable
+      @nr += 1
+      IO.select(nil, [self])
     end
-    assert_nothing_raised { Kgio.wait_readable = :ruby }
+    Kgio.wait_writable = :wait_writable
+    buf = "." * 1024 * 1024 * 10
+    thr = Thread.new { @wr.kgio_write(buf) }
+    readed = @rd.read(buf.size)
+    thr.join
+    assert_nil thr.value
+    assert_equal buf, readed
+    assert @wr.instance_variable_get(:@nr) > 0
+  end
+
+  def test_wait_readable_ruby_default
+    assert_nothing_raised { Kgio.wait_readable = nil }
     elapsed = 0
     foo = nil
     t0 = Time.now
@@ -95,9 +145,6 @@ module LibReadWriteTest
   end
 
   def test_wait_writable_ruby_default
-    def @wr.ruby
-      raise RuntimeError, "Hello"
-    end
     buf = "." * 512
     nr = 0
     begin
@@ -105,7 +152,7 @@ module LibReadWriteTest
     rescue Errno::EAGAIN
       break
     end while true
-    assert_nothing_raised { Kgio.wait_writable = :ruby }
+    assert_nothing_raised { Kgio.wait_writable = nil }
     elapsed = 0
     foo = nil
     t0 = Time.now
@@ -138,6 +185,25 @@ module LibReadWriteTest
     assert_nil foo
   end
 
+  def test_tryread_wait_readable_method
+    def @rd.moo
+      raise "Hello"
+    end
+    assert_nothing_raised { Kgio.wait_readable = :moo }
+    assert_equal Kgio::WaitReadable, @rd.kgio_tryread(5)
+  end
+
+  def test_trywrite_wait_readable_method
+    def @wr.moo
+      raise "Hello"
+    end
+    assert_nothing_raised { Kgio.wait_writable = :moo }
+    tmp = []
+    buf = "." * 1024
+    10000.times { tmp << @wr.kgio_trywrite(buf) }
+    assert_equal Kgio::WaitWritable, tmp.pop
+  end
+
   def test_wait_writable_method
     def @wr.moo
       defined?(@z) ? raise(RuntimeError, "Hello") : @z = "HI"