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