From e26358413c9d87e1ce8f6cda5cf0b8dd53979ed2 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 20 Mar 2012 22:00:47 +0000 Subject: test/lib_read_write: test workarounds for TCP in FreeBSD 9.0 Under load, TCP sockets may not register as readable right away after the writer finishes. This can be expected for implementations where loopback TCP is a closer simulation of non-local TCP traffic. These test failures were noticed under FreeBSD 9.0. --- test/lib_read_write.rb | 5 +++++ test/test_tcp_connect.rb | 1 + 2 files changed, 6 insertions(+) diff --git a/test/lib_read_write.rb b/test/lib_read_write.rb index cf2f781..c5a60d9 100644 --- a/test/lib_read_write.rb +++ b/test/lib_read_write.rb @@ -57,6 +57,7 @@ module LibReadWriteTest a = "." * 0x1000 b = a.dup @wr.syswrite("a") + IO.select([@rd]) # this seems needed on FreeBSD 9.0 assert_equal "a", @rd.kgio_tryread(0x1000, b) assert_equal "a", b assert_equal "." * 0x1000, a @@ -66,6 +67,7 @@ module LibReadWriteTest a = "." * 0x1000 b = a.dup @wr.syswrite("a") + IO.select([@rd]) # this seems needed on FreeBSD 9.0 assert_equal "a", @rd.kgio_tryread(0x1000, a) assert_equal "a", a assert_equal "." * 0x1000, b @@ -88,6 +90,7 @@ module LibReadWriteTest def test_tryread_eof @wr.close + IO.select([@rd]) # this seems needed on FreeBSD 9.0 assert_nil @rd.kgio_tryread(5) end @@ -157,6 +160,7 @@ module LibReadWriteTest def test_trywrite_conv assert_equal nil, @wr.kgio_trywrite(10) + IO.select([@rd]) # this seems needed on FreeBSD 9.0 assert_equal "10", @rd.kgio_tryread(2) end @@ -182,6 +186,7 @@ module LibReadWriteTest def test_tryread_short assert_equal nil, @wr.kgio_trywrite("hi") + IO.select([@rd]) # this seems needed on FreeBSD 9.0 assert_equal "h", @rd.kgio_tryread(1) assert_equal "i", @rd.kgio_tryread(1) end diff --git a/test/test_tcp_connect.rb b/test/test_tcp_connect.rb index 2dbe541..2cf1b86 100644 --- a/test/test_tcp_connect.rb +++ b/test/test_tcp_connect.rb @@ -78,6 +78,7 @@ class TestKgioTcpConnect < Test::Unit::TestCase def test_wait_writable_set sock = SubSocket.new(@addr) assert_equal "waited", sock.foo if RUBY_PLATFORM =~ /linux/ + IO.select(nil, [sock]) if RUBY_PLATFORM !~ /linux/ assert_equal nil, sock.kgio_write("HELLO") end end -- cgit v1.2.3-24-ge0c7