diff options
Diffstat (limited to 'test/test_last_data_recv.rb')
-rw-r--r-- | test/test_last_data_recv.rb | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/test/test_last_data_recv.rb b/test/test_last_data_recv.rb new file mode 100644 index 0000000..edd00f3 --- /dev/null +++ b/test/test_last_data_recv.rb @@ -0,0 +1,58 @@ +# frozen_string_literal: false +begin + require 'aggregate' + have_aggregate = true +rescue LoadError => e + warn "W: #{e} skipping #{__FILE__}" +end +require 'test/unit' +require 'raindrops' +require 'io/wait' + +class TestLastDataRecv < Test::Unit::TestCase + def setup + Raindrops::Aggregate::LastDataRecv.default_aggregate = [] + end + + def teardown + Raindrops::Aggregate::LastDataRecv.default_aggregate = nil + end + + def test_accept_nonblock_agg + s = Socket.new(:INET, :STREAM, 0) + s.listen(128) + addr = s.connect_address + s.extend(Raindrops::Aggregate::LastDataRecv) + s.raindrops_aggregate = [] + c = Socket.new(:INET, :STREAM, 0) + c.connect(addr) + c.write '.' # for TCP_DEFER_ACCEPT + client, ai = s.accept_nonblock(exception: false) + assert client.kind_of?(Socket) + assert ai.kind_of?(Addrinfo) + assert_equal 1, s.raindrops_aggregate.size + assert s.raindrops_aggregate[0].instance_of?(Integer) + client, ai = s.accept_nonblock(exception: false) + assert_equal :wait_readable, client + assert_nil ai + assert_equal 1, s.raindrops_aggregate.size + assert_raise(IO::WaitReadable) { s.accept_nonblock } + end + + def test_accept_nonblock_one + s = TCPServer.new('127.0.0.1', 0) + s.extend(Raindrops::Aggregate::LastDataRecv) + s.raindrops_aggregate = [] + addr = s.addr + c = TCPSocket.new(addr[3], addr[1]) + c.write '.' # for TCP_DEFER_ACCEPT + client = s.accept_nonblock(exception: false) + assert client.kind_of?(TCPSocket) + assert_equal 1, s.raindrops_aggregate.size + assert s.raindrops_aggregate[0].instance_of?(Integer) + client = s.accept_nonblock(exception: false) + assert_equal :wait_readable, client + assert_equal 1, s.raindrops_aggregate.size + assert_raise(IO::WaitReadable) { s.accept_nonblock } + end +end if RUBY_PLATFORM =~ /linux/ && have_aggregate |