From: Sokolov Yura 'funny-falcon <funny.falcon@gmail.com>
To: kgio@librelist.com
Subject: [PATCH 2/2] tests for `#kgio_writev` and `#kgio_trywritev`
Date: Tue, 29 May 2012 19:00:29 +0400 [thread overview]
Message-ID: <1338303629-12277-2-git-send-email-funny.falcon@gmail.com> (raw)
In-Reply-To: 1338303629-12277-1-git-send-email-funny.falcon@gmail.com
Simply addapt test from kgio_write and kgio_trywrite for kgio_writev and
kgio_trywritev
---
test/lib_read_write.rb | 126 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 126 insertions(+)
diff --git a/test/lib_read_write.rb b/test/lib_read_write.rb
index 6f345cb..00f3f98 100644
--- a/test/lib_read_write.rb
+++ b/test/lib_read_write.rb
@@ -21,6 +21,14 @@ module LibReadWriteTest
assert_nil @wr.kgio_trywrite("")
end
+ def test_writev_empty
+ assert_nil @wr.kgio_writev([])
+ end
+
+ def test_trywritev_empty
+ assert_nil @wr.kgio_trywritev([])
+ end
+
def test_read_zero
assert_equal "", @rd.kgio_read(0)
buf = "foo"
@@ -116,6 +124,28 @@ module LibReadWriteTest
assert false, "should never get here (line:#{__LINE__})"
end
+ def test_writev_closed
+ @rd.close
+ begin
+ loop { @wr.kgio_writev ["HI"] }
+ rescue Errno::EPIPE, Errno::ECONNRESET => e
+ assert_equal [], e.backtrace
+ return
+ end
+ assert false, "should never get here (line:#{__LINE__})"
+ end
+
+ def test_trywritev_closed
+ @rd.close
+ begin
+ loop { @wr.kgio_trywritev ["HI"] }
+ rescue Errno::EPIPE, Errno::ECONNRESET => e
+ assert_equal [], e.backtrace
+ return
+ end
+ assert false, "should never get here (line:#{__LINE__})"
+ end
+
def test_trywrite_full
buf = "\302\251" * 1024 * 1024
buf2 = ""
@@ -153,6 +183,43 @@ module LibReadWriteTest
assert_equal '8ff79d8115f9fe38d18be858c66aa08a1cc27a66', t.value
end
+ def test_trywritev_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_trywritev(wr)
+ case rv
+ when Array
+ wr = rv
+ when :wait_readable
+ assert false, "should never get here line=#{__LINE__}"
+ when :wait_writable
+ 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)
@@ -214,6 +281,19 @@ module LibReadWriteTest
tmp.each { |count| assert_equal nil, count }
end
+ def test_trywritev_return_wait_writable
+ tmp = []
+ tmp << @wr.kgio_trywritev(["HI"]) until tmp[-1] == :wait_writable
+ assert :wait_writable === tmp[-1]
+ assert(!(:wait_readable === tmp[-1]))
+ assert_equal :wait_writable, tmp.pop
+ assert tmp.size > 0
+ penultimate = tmp.pop
+ assert(penultimate == "I" || penultimate == nil)
+ assert tmp.size > 0
+ tmp.each { |count| assert_equal nil, count }
+ end
+
def test_tryread_extra_buf_eagain_clears_buffer
tmp = "hello world"
rv = @rd.kgio_tryread(2, tmp)
@@ -248,6 +328,36 @@ module LibReadWriteTest
assert_equal buf, readed
end
+ def test_monster_trywritev
+ buf, start = [], 0
+ while start < RANDOM_BLOB.size
+ s = RANDOM_BLOB[start, 10000]
+ start += s.size
+ buf << s
+ end
+ rv = @wr.kgio_trywritev(buf)
+ assert_kind_of Array, rv
+ rv = rv.join
+ assert rv.size < RANDOM_BLOB.size
+ @rd.nonblock = false
+ assert_equal(RANDOM_BLOB, @rd.read(RANDOM_BLOB.size - rv.size) + rv)
+ end
+
+ def test_monster_writev
+ buf, start = [], 0
+ while start < RANDOM_BLOB.size
+ s = RANDOM_BLOB[start, 10000]
+ start += s.size
+ buf << s
+ end
+ thr = Thread.new { @wr.kgio_writev(buf) }
+ @rd.nonblock = false
+ readed = @rd.read(RANDOM_BLOB.size)
+ thr.join
+ assert_nil thr.value
+ assert_equal RANDOM_BLOB, readed
+ end
+
def test_monster_write_wait_writable
@wr.instance_variable_set :@nr, 0
def @wr.kgio_wait_writable
@@ -263,6 +373,22 @@ module LibReadWriteTest
assert @wr.instance_variable_get(:@nr) > 0
end
+ def test_monster_writev_wait_writable
+ @wr.instance_variable_set :@nr, 0
+ def @wr.kgio_wait_writable
+ @nr += 1
+ IO.select(nil, [self])
+ end
+ buf = ["." * 1024] * 1024 * 10
+ buf_size = buf.inject(0){|c, s| c + s.size}
+ thr = Thread.new { @wr.kgio_writev(buf) }
+ readed = @rd.read(buf_size)
+ thr.join
+ assert_nil thr.value
+ assert_equal buf.join, readed
+ assert @wr.instance_variable_get(:@nr) > 0
+ end
+
def test_wait_readable_ruby_default
elapsed = 0
foo = nil
--
1.7.9.5
next prev parent reply other threads:[~2012-05-29 15:01 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-29 15:00 [PATCH 1/2] add `#kgio_writev` and `#kgio_trywritev` Sokolov Yura 'funny-falcon
2012-05-29 15:00 ` Sokolov Yura 'funny-falcon [this message]
2012-05-29 19:13 ` [PATCH 2/2] tests for " Eric Wong
2012-05-29 19:11 ` [PATCH 1/2] add " Eric Wong
2012-05-30 4:30 ` Yura Sokolov
2012-05-30 4:55 ` Eric Wong
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://yhbt.net/kgio/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1338303629-12277-2-git-send-email-funny.falcon@gmail.com \
--to=funny.falcon@gmail.com \
--cc=kgio@librelist.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://yhbt.net/kgio.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).