diff options
Diffstat (limited to 'test/lib_read_write.rb')
-rw-r--r-- | test/lib_read_write.rb | 94 |
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" |