test/lib_read_write.rb in kgio-1.2.1 vs test/lib_read_write.rb in kgio-1.3.0
- old
+ new
@@ -1,7 +1,9 @@
+# -*- encoding: binary -*-
require 'test/unit'
require 'io/nonblock'
+require 'digest/sha1'
$-w = true
require 'kgio'
module LibReadWriteTest
RANDOM_BLOB = File.open("/dev/urandom") { |fp| fp.read(10 * 1024 * 1024) }
@@ -56,10 +58,47 @@
return
end
assert false, "should never get here (line:#{__LINE__})"
end
+ def test_trywrite_full
+ buf = "\302\251" * 1024 * 1024
+ buf2 = ""
+ dig = Digest::SHA1.new
+ t = Thread.new do
+ sleep 1
+ nr = 0
+ begin
+ dig.update(@rd.readpartial(4096, buf2))
+ nr += buf2.size
+ rescue EOFError
+ break
+ rescue => e
+ end while true
+ dig.hexdigest
+ end
+ 50.times do
+ wr = buf
+ begin
+ rv = @wr.kgio_trywrite(wr)
+ case rv
+ when String
+ wr = rv
+ when Kgio::WaitReadable
+ assert false, "should never get here line=#{__LINE__}"
+ when Kgio::WaitWritable
+ IO.select(nil, [ @wr ])
+ else
+ wr = false
+ end
+ end while wr
+ end
+ @wr.close
+ t.join
+ assert_equal '8ff79d8115f9fe38d18be858c66aa08a1cc27a66', t.value
+ end
+
def test_write_conv
assert_equal nil, @wr.kgio_write(10)
assert_equal "10", @rd.kgio_read(2)
end
@@ -105,9 +144,11 @@
end
def test_trywrite_return_wait_writable
tmp = []
tmp << @wr.kgio_trywrite("HI") until tmp[-1] == Kgio::WaitWritable
+ assert Kgio::WaitWritable === tmp[-1]
+ assert(!(Kgio::WaitReadable === tmp[-1]))
assert_equal Kgio::WaitWritable, tmp.pop
assert tmp.size > 0
penultimate = tmp.pop
assert(penultimate == "I" || penultimate == nil)
assert tmp.size > 0