diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/ipv6_enabled.rb | 9 | ||||
-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 | 6 | ||||
-rw-r--r-- | test/test_linux_all_tcp_listen_stats.rb | 1 | ||||
-rw-r--r-- | test/test_linux_all_tcp_listen_stats_leak.rb | 5 | ||||
-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 | 45 | ||||
-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 | 9 | ||||
-rw-r--r-- | test/test_watcher.rb | 23 |
20 files changed, 196 insertions, 26 deletions
diff --git a/test/ipv6_enabled.rb b/test/ipv6_enabled.rb index f02b48f..84ed9c1 100644 --- a/test/ipv6_enabled.rb +++ b/test/ipv6_enabled.rb @@ -1,9 +1,10 @@ +# frozen_string_literal: false def ipv6_enabled? tmp = TCPServer.new(ENV["TEST_HOST6"] || '::1', 0) tmp.close true - rescue => e - warn "skipping IPv6 tests, host does not seem to be IPv6 enabled:" - warn " #{e.class}: #{e}" - false +rescue => e + warn "skipping IPv6 tests, host does not seem to be IPv6 enabled:" + warn " #{e.class}: #{e}" + false end 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 bfefcc4..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' @@ -76,6 +77,7 @@ class TestLinux < Test::Unit::TestCase assert_equal 0, stats[tmp.path].active assert_equal 0, stats[tmp.path].queued + us.close end def test_unix_resolves_symlinks @@ -151,8 +153,8 @@ class TestLinux < Test::Unit::TestCase assert_equal 1, stats.size assert_equal 0, stats[addr].queued assert_equal 1, stats[addr].active - ensure - nlsock.close + ensure + nlsock.close end def test_tcp_multi 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 7368220..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' @@ -37,7 +38,7 @@ class TestLinuxAllTcpListenStatsLeak < Test::Unit::TestCase end cur_kb = rss_kb p [ :cur_kb, cur_kb ] - ensure - s.close + ensure + s.close end end if ENV["STRESS"].to_i != 0 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 67089b7..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 @@ -134,7 +136,7 @@ class TestRaindrops < Test::Unit::TestCase assert_equal 0, rd[rd.capa - 1] assert_equal 1, rd.incr(rd.capa - 1) assert_raises(ArgumentError) { rd[rd.capa] } - rescue RangeError + rescue RangeError end # if RUBY_PLATFORM =~ /linux/ def test_evaporate @@ -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 b107565..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' @@ -60,10 +61,10 @@ class TestTCP_Info < Test::Unit::TestCase a = s.accept i = Raindrops::TCP_Info.new(a) assert i.last_data_recv >= delay_ms, "#{i.last_data_recv} < #{delay_ms}" - ensure - c.close if c - a.close if a - s.close + ensure + c.close if c + a.close if a + s.close end def test_tcp_server_state_closed diff --git a/test/test_watcher.rb b/test/test_watcher.rb index d1e4d15..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 @@ -118,28 +119,28 @@ class TestWatcher < Test::Unit::TestCase def test_x_current_header env = @req.class.env_for "/active/#@addr.txt" - status, headers, body = @app.call(env) + _status, headers, _body = @app.call(env) assert_equal "0", headers["X-Current"], headers.inspect env = @req.class.env_for "/queued/#@addr.txt" - status, headers, body = @app.call(env) + _status, headers, _body = @app.call(env) assert_equal "1", headers["X-Current"], headers.inspect @ios << @srv.accept sleep 0.1 env = @req.class.env_for "/queued/#@addr.txt" - status, headers, body = @app.call(env) + _status, headers, _body = @app.call(env) assert_equal "0", headers["X-Current"], headers.inspect env = @req.class.env_for "/active/#@addr.txt" - status, headers, body = @app.call(env) + _status, headers, _body = @app.call(env) assert_equal "1", headers["X-Current"], headers.inspect end def test_peaks env = @req.class.env_for "/active/#@addr.txt" - status, headers, body = @app.call(env.dup) + _status, headers, _body = @app.call(env.dup) start = headers["X-First-Peak-At"] assert headers["X-First-Peak-At"], headers.inspect assert headers["X-Last-Peak-At"], headers.inspect @@ -148,14 +149,14 @@ class TestWatcher < Test::Unit::TestCase before = headers["X-Last-Peak-At"] env = @req.class.env_for "/queued/#@addr.txt" - status, headers, body = @app.call(env) + _status, headers, _body = @app.call(env) assert_nothing_raised { Time.parse(headers["X-First-Peak-At"]) } assert_nothing_raised { Time.parse(headers["X-Last-Peak-At"]) } assert_equal before, headers["X-Last-Peak-At"], "should not change" sleep 2 env = @req.class.env_for "/active/#@addr.txt" - status, headers, body = @app.call(env.dup) + _status, headers, _body = @app.call(env.dup) assert_equal before, headers["X-Last-Peak-At"], headers.inspect @ios << @srv.accept @@ -167,7 +168,7 @@ class TestWatcher < Test::Unit::TestCase end sleep 0.1 env = @req.class.env_for "/queued/#@addr.txt" - status, headers, body = @app.call(env.dup) + _status, headers, _body = @app.call(env.dup) assert headers["X-Last-Peak-At"], headers.inspect assert_nothing_raised { Time.parse(headers["X-Last-Peak-At"]) } assert before != headers["X-Last-Peak-At"] @@ -177,10 +178,10 @@ class TestWatcher < Test::Unit::TestCase sleep 2 env = @req.class.env_for "/queued/#@addr.txt" - status, headers, body = @app.call(env) + _status, headers, _body = @app.call(env) assert_equal "0", headers["X-Current"] assert_nothing_raised { Time.parse(headers["X-Last-Peak-At"]) } 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) |