about summary refs log tree commit homepage
path: root/test
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2015-12-01 03:39:16 +0000
committerEric Wong <e@80x24.org>2015-12-01 03:47:35 +0000
commita6d4cb930e852afd3d703ef13a692f941c9ff7bb (patch)
tree3be2e4238f6f1c0f926b8a945c58fa61b738c3a7 /test
parent8442dd48690ec64766082194ca5f744248fabf57 (diff)
downloadyahns-a6d4cb930e852afd3d703ef13a692f941c9ff7bb.tar.gz
Linux 4.2 gained the ability to do true zero-copy sendfile support
for Unix sockets; so buffer space is accounted differently.
Previously Linux only avoided copies in userspace when doing
sendfile for Unix sockets, not internally within the kernel.

This kernel change has no bearing on normal code which would need to
account for concurrent draining by the client; only test code
designed to create a failure condition.
Diffstat (limited to 'test')
-rw-r--r--test/test_wbuf.rb13
1 files changed, 11 insertions, 2 deletions
diff --git a/test/test_wbuf.rb b/test/test_wbuf.rb
index 0eacb08..0d7959c 100644
--- a/test/test_wbuf.rb
+++ b/test/test_wbuf.rb
@@ -71,8 +71,17 @@ class TestWbuf < Testcase
       end while true
     end
     wbuf = Yahns::Wbuf.new([], true, Dir.tmpdir, :wait_writable)
-    assert_equal :wait_writable, wbuf.wbuf_write(a, buf)
-    assert_equal :wait_writable, wbuf.wbuf_flush(a)
+
+    rv1 = wbuf.wbuf_write(a, buf)
+    rv2 = wbuf.wbuf_flush(a)
+    case rv1
+    when nil
+      assert_equal true, rv2, 'some kernels succeed with real sendfile'
+    when :wait_writable
+      assert_equal :wait_writable, rv2, 'some block on sendfile'
+    else
+      flunk "unexpected from wbuf_write/flush: #{rv1.inspect} / #{rv2.inspect}"
+    end
 
     # drain the buffer
     Timeout.timeout(10) { b.read(b.nread) until b.nread == 0 }