about summary refs log tree commit homepage
path: root/test/test_autopush.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/test_autopush.rb')
-rw-r--r--test/test_autopush.rb119
1 files changed, 80 insertions, 39 deletions
diff --git a/test/test_autopush.rb b/test/test_autopush.rb
index 2fa49be..4d15b7b 100644
--- a/test/test_autopush.rb
+++ b/test/test_autopush.rb
@@ -6,6 +6,7 @@ require 'kgio'
 
 class TestAutopush < Test::Unit::TestCase
   TCP_CORK = 3
+  TCP_NOPUSH = 4
 
   def setup
     Kgio.autopush = false
@@ -14,8 +15,11 @@ class TestAutopush < Test::Unit::TestCase
     @host = ENV["TEST_HOST"] || '127.0.0.1'
     @srv = Kgio::TCPServer.new(@host, 0)
     assert_nothing_raised {
-      @srv.setsockopt(Socket::SOL_TCP, TCP_CORK, 1)
+      @srv.setsockopt(Socket::IPPROTO_TCP, TCP_CORK, 1)
     } if RUBY_PLATFORM =~ /linux/
+    assert_nothing_raised {
+      @srv.setsockopt(Socket::IPPROTO_TCP, TCP_NOPUSH, 1)
+    } if RUBY_PLATFORM =~ /freebsd/
     @port = @srv.addr[1]
   end
 
@@ -27,16 +31,30 @@ class TestAutopush < Test::Unit::TestCase
     tmp.close rescue nil
     @srv = Kgio::UNIXServer.new(@path)
     @rd = Kgio::UNIXSocket.new(@path)
-    io, err = Strace.me { @wr = @srv.kgio_accept }
-    assert_nil err
-    rc = nil
-    io, err = Strace.me {
-      @wr.kgio_write "HI\n"
-      rc = @wr.kgio_tryread 666
-    }
-    assert_nil err
-    lines = io.readlines
-    assert lines.grep(/TCP_CORK/).empty?, lines.inspect
+    t0 = nil
+    if defined?(Strace)
+      io, err = Strace.me { @wr = @srv.kgio_accept }
+      assert_nil err
+      rc = nil
+      io, err = Strace.me {
+        t0 = Time.now
+        @wr.kgio_write "HI\n"
+        rc = @wr.kgio_tryread 666
+      }
+      assert_nil err
+      lines = io.readlines
+      assert lines.grep(/TCP_CORK/).empty?, lines.inspect
+    else
+      assert_nothing_raised do
+        @wr = @srv.kgio_accept
+        t0 = Time.now
+        @wr.kgio_write "HI\n"
+        rc = @wr.kgio_tryread 666
+      end
+    end
+    assert_equal "HI\n", @rd.kgio_read(3)
+    diff = Time.now - t0
+    assert(diff < 0.200, "nopush on UNIX sockets? diff=#{diff} > 200ms")
     assert_equal :wait_readable, rc
   ensure
     File.unlink(@path) rescue nil
@@ -47,64 +65,87 @@ class TestAutopush < Test::Unit::TestCase
     assert_equal false, Kgio.autopush?
 
     @wr = Kgio::TCPSocket.new(@host, @port)
-    io, err = Strace.me { @rd = @srv.kgio_accept }
-    assert_nil err
-    lines = io.readlines
-    assert lines.grep(/TCP_CORK/).empty?, lines.inspect
-    assert_equal 1, @rd.getsockopt(Socket::SOL_TCP, TCP_CORK).unpack("i")[0]
+    if defined?(Strace)
+      io, err = Strace.me { @rd = @srv.kgio_accept }
+      assert_nil err
+      lines = io.readlines
+      assert lines.grep(/TCP_CORK/).empty?, lines.inspect
+      assert_equal 1, @rd.getsockopt(Socket::SOL_TCP, TCP_CORK).unpack("i")[0]
+    else
+      @rd = @srv.kgio_accept
+    end
 
     rbuf = "..."
     t0 = Time.now
     @rd.kgio_write "HI\n"
     @wr.kgio_read(3, rbuf)
     diff = Time.now - t0
-    assert(diff >= 0.200, "TCP_CORK broken? diff=#{diff} > 200ms")
+    assert(diff >= 0.200, "nopush broken? diff=#{diff} > 200ms")
     assert_equal "HI\n", rbuf
-  end if RUBY_PLATFORM =~ /linux/
+  end
 
   def test_autopush_true
     Kgio.autopush = true
     assert_equal true, Kgio.autopush?
     @wr = Kgio::TCPSocket.new(@host, @port)
-    io, err = Strace.me { @rd = @srv.kgio_accept }
-    assert_nil err
-    lines = io.readlines
-    assert_equal 1, lines.grep(/TCP_CORK/).size, lines.inspect
-    assert_equal 1, @rd.getsockopt(Socket::SOL_TCP, TCP_CORK).unpack("i")[0]
+
+    if defined?(Strace)
+      io, err = Strace.me { @rd = @srv.kgio_accept }
+      assert_nil err
+      lines = io.readlines
+      assert_equal 1, lines.grep(/TCP_CORK/).size, lines.inspect
+      assert_equal 1, @rd.getsockopt(Socket::SOL_TCP, TCP_CORK).unpack("i")[0]
+    else
+      @rd = @srv.kgio_accept
+    end
 
     @wr.write "HI\n"
     rbuf = ""
-    io, err = Strace.me { @rd.kgio_read(3, rbuf) }
-    assert_nil err
-    lines = io.readlines
-    assert lines.grep(/TCP_CORK/).empty?, lines.inspect
-    assert_equal "HI\n", rbuf
+    if defined?(Strace)
+      io, err = Strace.me { @rd.kgio_read(3, rbuf) }
+      assert_nil err
+      lines = io.readlines
+      assert lines.grep(/TCP_CORK/).empty?, lines.inspect
+      assert_equal "HI\n", rbuf
+    else
+      assert_equal "HI\n", @rd.kgio_read(3, rbuf)
+    end
 
     t0 = Time.now
     @rd.kgio_write "HI2U2\n"
     @rd.kgio_write "HOW\n"
     rc = false
-    io, err = Strace.me { rc = @rd.kgio_tryread(666) }
+
+    if defined?(Strace)
+      io, err = Strace.me { rc = @rd.kgio_tryread(666) }
+    else
+      rc = @rd.kgio_tryread(666)
+    end
+
     @wr.readpartial(666, rbuf)
     rbuf == "HI2U2\nHOW\n" or warn "rbuf=#{rbuf.inspect} looking bad?"
     diff = Time.now - t0
     assert(diff < 0.200, "time diff=#{diff} >= 200ms")
     assert_equal :wait_readable, rc
-    assert_nil err
-    lines = io.readlines
-    assert_equal 2, lines.grep(/TCP_CORK/).size, lines.inspect
+    if defined?(Strace)
+      assert_nil err
+      lines = io.readlines
+      assert_equal 2, lines.grep(/TCP_CORK/).size, lines.inspect
+    end
     assert_nothing_raised { @wr.close }
     assert_nothing_raised { @rd.close }
 
     @wr = Kgio::TCPSocket.new(@host, @port)
-    io, err = Strace.me { @rd = @srv.kgio_accept }
-    assert_nil err
-    lines = io.readlines
-    assert lines.grep(/TCP_CORK/).empty?, "optimization fail: #{lines.inspect}"
-    assert_equal 1, @rd.getsockopt(Socket::SOL_TCP, TCP_CORK).unpack("i")[0]
-  end if RUBY_PLATFORM =~ /linux/
+    if defined?(Strace)
+      io, err = Strace.me { @rd = @srv.kgio_accept }
+      assert_nil err
+      lines = io.readlines
+      assert lines.grep(/TCP_CORK/).empty?,"optimization fail: #{lines.inspect}"
+      assert_equal 1, @rd.getsockopt(Socket::SOL_TCP, TCP_CORK).unpack("i")[0]
+    end
+  end
 
   def teardown
     Kgio.autopush = false
   end
-end
+end if RUBY_PLATFORM =~ /linux|freebsd/