diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/ipv6_enabled.rb | 1 | ||||
-rw-r--r-- | test/rack_unicorn.rb | 4 | ||||
-rw-r--r-- | test/test_aggregate_pmq.rb | 1 | ||||
-rw-r--r-- | test/test_inet_diag_socket.rb | 1 | ||||
-rw-r--r-- | test/test_last_data_recv.rb | 58 | ||||
-rw-r--r-- | test/test_last_data_recv_unicorn.rb | 1 | ||||
-rw-r--r-- | test/test_linux.rb | 1 | ||||
-rw-r--r-- | test/test_linux_all_tcp_listen_stats.rb | 1 | ||||
-rw-r--r-- | test/test_linux_all_tcp_listen_stats_leak.rb | 1 | ||||
-rw-r--r-- | test/test_linux_ipv6.rb | 1 | ||||
-rw-r--r-- | test/test_linux_middleware.rb | 1 | ||||
-rw-r--r-- | test/test_linux_reuseport_tcp_listen_stats.rb | 52 | ||||
-rw-r--r-- | test/test_middleware.rb | 1 | ||||
-rw-r--r-- | test/test_middleware_unicorn.rb | 1 | ||||
-rw-r--r-- | test/test_middleware_unicorn_ipv6.rb | 1 | ||||
-rw-r--r-- | test/test_raindrops.rb | 43 | ||||
-rw-r--r-- | test/test_raindrops_gc.rb | 1 | ||||
-rw-r--r-- | test/test_struct.rb | 1 | ||||
-rw-r--r-- | test/test_tcp_info.rb | 1 | ||||
-rw-r--r-- | test/test_watcher.rb | 5 |
20 files changed, 173 insertions, 4 deletions
diff --git a/test/ipv6_enabled.rb b/test/ipv6_enabled.rb index c4c9709..84ed9c1 100644 --- a/test/ipv6_enabled.rb +++ b/test/ipv6_enabled.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false def ipv6_enabled? tmp = TCPServer.new(ENV["TEST_HOST6"] || '::1', 0) tmp.close diff --git a/test/rack_unicorn.rb b/test/rack_unicorn.rb index 779e8bf..05a7751 100644 --- a/test/rack_unicorn.rb +++ b/test/rack_unicorn.rb @@ -1,11 +1,11 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require "test/unit" require "raindrops" -require "rack" -require "rack/lobster" require "open-uri" begin require "unicorn" + require "rack" require "rack/lobster" rescue LoadError => e warn "W: #{e} skipping test since Rack or Unicorn was not found" diff --git a/test/test_aggregate_pmq.rb b/test/test_aggregate_pmq.rb index 692b9bd..24e0277 100644 --- a/test/test_aggregate_pmq.rb +++ b/test/test_aggregate_pmq.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require "test/unit" require "raindrops" pmq = begin diff --git a/test/test_inet_diag_socket.rb b/test/test_inet_diag_socket.rb index a8c9973..e310dff 100644 --- a/test/test_inet_diag_socket.rb +++ b/test/test_inet_diag_socket.rb @@ -1,4 +1,5 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require 'test/unit' require 'raindrops' require 'fcntl' 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 diff --git a/test/test_last_data_recv_unicorn.rb b/test/test_last_data_recv_unicorn.rb index 60d1be9..55f5e7f 100644 --- a/test/test_last_data_recv_unicorn.rb +++ b/test/test_last_data_recv_unicorn.rb @@ -1,4 +1,5 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require "./test/rack_unicorn" require "tempfile" require "net/http" diff --git a/test/test_linux.rb b/test/test_linux.rb index 7808469..5451c3f 100644 --- a/test/test_linux.rb +++ b/test/test_linux.rb @@ -1,4 +1,5 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require 'test/unit' require 'tempfile' require 'raindrops' diff --git a/test/test_linux_all_tcp_listen_stats.rb b/test/test_linux_all_tcp_listen_stats.rb index ef1f943..12a35ba 100644 --- a/test/test_linux_all_tcp_listen_stats.rb +++ b/test/test_linux_all_tcp_listen_stats.rb @@ -1,4 +1,5 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require 'test/unit' require 'socket' require 'raindrops' diff --git a/test/test_linux_all_tcp_listen_stats_leak.rb b/test/test_linux_all_tcp_listen_stats_leak.rb index 7be46d4..a3da07e 100644 --- a/test/test_linux_all_tcp_listen_stats_leak.rb +++ b/test/test_linux_all_tcp_listen_stats_leak.rb @@ -1,4 +1,5 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require 'test/unit' require 'raindrops' require 'socket' diff --git a/test/test_linux_ipv6.rb b/test/test_linux_ipv6.rb index 9e8730a..9ef8f0a 100644 --- a/test/test_linux_ipv6.rb +++ b/test/test_linux_ipv6.rb @@ -1,4 +1,5 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require 'test/unit' require 'tempfile' require 'raindrops' diff --git a/test/test_linux_middleware.rb b/test/test_linux_middleware.rb index f573225..7ed20df 100644 --- a/test/test_linux_middleware.rb +++ b/test/test_linux_middleware.rb @@ -1,4 +1,5 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require 'test/unit' require 'tempfile' require 'raindrops' diff --git a/test/test_linux_reuseport_tcp_listen_stats.rb b/test/test_linux_reuseport_tcp_listen_stats.rb new file mode 100644 index 0000000..82083e0 --- /dev/null +++ b/test/test_linux_reuseport_tcp_listen_stats.rb @@ -0,0 +1,52 @@ +# -*- encoding: binary -*- +# frozen_string_literal: false +require "./test/rack_unicorn" +require 'test/unit' +require 'socket' +require 'raindrops' +$stderr.sync = $stdout.sync = true + +class TestLinuxReuseportTcpListenStats < Test::Unit::TestCase + include Raindrops::Linux + include Unicorn::SocketHelper + TEST_ADDR = ENV['UNICORN_TEST_ADDR'] || '127.0.0.1' + DEFAULT_BACKLOG = 10 + + def setup + @socks = [] + end + + def teardown + @socks.each { |io| io.closed? or io.close } + end + + def new_socket_server(**kwargs) + s = new_tcp_server TEST_ADDR, kwargs[:port] || 0, kwargs + s.listen(kwargs[:backlog] || DEFAULT_BACKLOG) + @socks << s + [ s, s.addr[1] ] + end + + def new_client(port) + s = TCPSocket.new("127.0.0.1", port) + @socks << s + s + end + + def test_reuseport_queue_stats + listeners = 10 + _, port = new_socket_server(reuseport: true) + addr = "#{TEST_ADDR}:#{port}" + (listeners - 1).times do + new_socket_server(reuseport: true, port: port) + end + + listeners.times do |i| + all = Raindrops::Linux.tcp_listener_stats + assert_equal [0, i], all[addr].to_a + new_client(port) + all = Raindrops::Linux.tcp_listener_stats + assert_equal [0, i+1], all[addr].to_a + end + end +end if RUBY_PLATFORM =~ /linux/ && Object.const_defined?(:Unicorn) diff --git a/test/test_middleware.rb b/test/test_middleware.rb index 56ce346..5694cd4 100644 --- a/test/test_middleware.rb +++ b/test/test_middleware.rb @@ -1,4 +1,5 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require 'test/unit' require 'raindrops' diff --git a/test/test_middleware_unicorn.rb b/test/test_middleware_unicorn.rb index 6730d4b..53226a9 100644 --- a/test/test_middleware_unicorn.rb +++ b/test/test_middleware_unicorn.rb @@ -1,4 +1,5 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require "./test/rack_unicorn" $stderr.sync = $stdout.sync = true diff --git a/test/test_middleware_unicorn_ipv6.rb b/test/test_middleware_unicorn_ipv6.rb index 3d6862c..99ecb7f 100644 --- a/test/test_middleware_unicorn_ipv6.rb +++ b/test/test_middleware_unicorn_ipv6.rb @@ -1,4 +1,5 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require "./test/rack_unicorn" require "./test/ipv6_enabled" $stderr.sync = $stdout.sync = true diff --git a/test/test_raindrops.rb b/test/test_raindrops.rb index 0749694..165766e 100644 --- a/test/test_raindrops.rb +++ b/test/test_raindrops.rb @@ -1,6 +1,8 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require 'test/unit' require 'raindrops' +require 'tempfile' class TestRaindrops < Test::Unit::TestCase @@ -162,4 +164,45 @@ class TestRaindrops < Test::Unit::TestCase assert status.success? assert_equal [ 1, 2 ], tmp.to_ary end + + def test_io_backed + file = Tempfile.new('test_io_backed') + rd = Raindrops.new(4, io: file, zero: true) + rd[0] = 123 + rd[1] = 456 + + assert_equal 123, rd[0] + assert_equal 456, rd[1] + + rd.evaporate! + + file.rewind + data = file.read + assert_equal 123, data.unpack('L!')[0] + assert_equal 456, data[Raindrops::SIZE..data.size].unpack('L!')[0] + end + + def test_io_backed_reuse + file = Tempfile.new('test_io_backed') + rd = Raindrops.new(4, io: file, zero: true) + rd[0] = 123 + rd[1] = 456 + rd.evaporate! + + rd = Raindrops.new(4, io: file, zero: false) + assert_equal 123, rd[0] + assert_equal 456, rd[1] + end + + def test_iobacked_noreuse + file = Tempfile.new('test_io_backed') + rd = Raindrops.new(4, io: file, zero: true) + rd[0] = 123 + rd[1] = 456 + rd.evaporate! + + rd = Raindrops.new(4, io: file, zero: true) + assert_equal 0, rd[0] + assert_equal 0, rd[1] + end end diff --git a/test/test_raindrops_gc.rb b/test/test_raindrops_gc.rb index 2098129..a9f2026 100644 --- a/test/test_raindrops_gc.rb +++ b/test/test_raindrops_gc.rb @@ -1,4 +1,5 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require 'test/unit' require 'raindrops' diff --git a/test/test_struct.rb b/test/test_struct.rb index 9792d5b..abf0c59 100644 --- a/test/test_struct.rb +++ b/test/test_struct.rb @@ -1,3 +1,4 @@ +# frozen_string_literal: false require 'test/unit' require 'raindrops' diff --git a/test/test_tcp_info.rb b/test/test_tcp_info.rb index 2ddacfd..2dc5c50 100644 --- a/test/test_tcp_info.rb +++ b/test/test_tcp_info.rb @@ -1,4 +1,5 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require 'test/unit' require 'tempfile' require 'raindrops' diff --git a/test/test_watcher.rb b/test/test_watcher.rb index 28ac49b..3cf667c 100644 --- a/test/test_watcher.rb +++ b/test/test_watcher.rb @@ -1,9 +1,10 @@ # -*- encoding: binary -*- +# frozen_string_literal: false require "test/unit" -require "rack" require "raindrops" begin require 'aggregate' + require 'rack' rescue LoadError => e warn "W: #{e} skipping #{__FILE__}" end @@ -183,4 +184,4 @@ class TestWatcher < Test::Unit::TestCase assert_equal queued_before, headers["X-Last-Peak-At"], "should not change" assert_equal start, headers["X-First-Peak-At"] end -end if RUBY_PLATFORM =~ /linux/ && defined?(Aggregate) +end if RUBY_PLATFORM =~ /linux/ && defined?(Aggregate) && defined?(Rack) |