From d5c1a5b1f5ae405c8b7c2a875e1cd471575df2d4 Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Sun, 19 Aug 2018 10:29:02 +0800 Subject: Improve tests for ActiveRecord::ConnectionAdapters::ConnectionPool configurations. --- activerecord/test/cases/connection_pool_test.rb | 37 +++++++++++++++++++++++++ activerecord/test/cases/reaper_test.rb | 4 +-- 2 files changed, 39 insertions(+), 2 deletions(-) (limited to 'activerecord') diff --git a/activerecord/test/cases/connection_pool_test.rb b/activerecord/test/cases/connection_pool_test.rb index 9ac03629c3..bd87a2d5f0 100644 --- a/activerecord/test/cases/connection_pool_test.rb +++ b/activerecord/test/cases/connection_pool_test.rb @@ -156,6 +156,43 @@ module ActiveRecord @pool.connections.each { |conn| conn.close if conn.in_use? } end + def test_idle_timeout_configuration + @pool.disconnect! + spec = ActiveRecord::Base.connection_pool.spec + spec.config.merge!(idle_timeout: "0.02") + @pool = ConnectionPool.new(spec) + idle_conn = @pool.checkout + @pool.checkin(idle_conn) + + def idle_conn.seconds_idle + @seconds_idle + end + + idle_conn.instance_variable_set(:@seconds_idle, 0.01) + @pool.flush + assert_equal 1, @pool.connections.length + + idle_conn.instance_variable_set(:@seconds_idle, 0.02) + @pool.flush + assert_equal 0, @pool.connections.length + end + + def test_disable_flush + @pool.disconnect! + spec = ActiveRecord::Base.connection_pool.spec + spec.config.merge!(idle_timeout: -5) + @pool = ConnectionPool.new(spec) + idle_conn = @pool.checkout + @pool.checkin(idle_conn) + + def idle_conn.seconds_idle + 1 + end + + @pool.flush + assert_equal 1, @pool.connections.length + end + def test_flush idle_conn = @pool.checkout recent_conn = @pool.checkout diff --git a/activerecord/test/cases/reaper_test.rb b/activerecord/test/cases/reaper_test.rb index b034fe3e3b..b630f782bc 100644 --- a/activerecord/test/cases/reaper_test.rb +++ b/activerecord/test/cases/reaper_test.rb @@ -61,9 +61,9 @@ module ActiveRecord def test_reaping_frequency_configuration spec = ActiveRecord::Base.connection_pool.spec.dup - spec.config[:reaping_frequency] = 100 + spec.config[:reaping_frequency] = "10.01" pool = ConnectionPool.new spec - assert_equal 100, pool.reaper.frequency + assert_equal 10.01, pool.reaper.frequency end def test_connection_pool_starts_reaper -- cgit v1.2.3 From ce048a7a73e340843b2e7ec96f8b383ba99f102b Mon Sep 17 00:00:00 2001 From: Guo Xiang Tan Date: Sun, 19 Aug 2018 23:09:32 +0800 Subject: Speed up slow ConnectionPool test case. --- activerecord/test/cases/connection_pool_test.rb | 30 ++++++++++++++++--------- 1 file changed, 19 insertions(+), 11 deletions(-) (limited to 'activerecord') diff --git a/activerecord/test/cases/connection_pool_test.rb b/activerecord/test/cases/connection_pool_test.rb index bd87a2d5f0..6aecf5fa35 100644 --- a/activerecord/test/cases/connection_pool_test.rb +++ b/activerecord/test/cases/connection_pool_test.rb @@ -91,7 +91,9 @@ module ActiveRecord end def test_full_pool_exception + @pool.checkout_timeout = 0.001 # no need to delay test suite by waiting the whole full default timeout @pool.size.times { assert @pool.checkout } + assert_raises(ConnectionTimeoutError) do @pool.checkout end @@ -164,15 +166,19 @@ module ActiveRecord idle_conn = @pool.checkout @pool.checkin(idle_conn) - def idle_conn.seconds_idle - @seconds_idle - end + idle_conn.instance_variable_set( + :@idle_since, + Concurrent.monotonic_time - 0.01 + ) - idle_conn.instance_variable_set(:@seconds_idle, 0.01) @pool.flush assert_equal 1, @pool.connections.length - idle_conn.instance_variable_set(:@seconds_idle, 0.02) + idle_conn.instance_variable_set( + :@idle_since, + Concurrent.monotonic_time - 0.02 + ) + @pool.flush assert_equal 0, @pool.connections.length end @@ -185,9 +191,10 @@ module ActiveRecord idle_conn = @pool.checkout @pool.checkin(idle_conn) - def idle_conn.seconds_idle - 1 - end + idle_conn.instance_variable_set( + :@idle_since, + Concurrent.monotonic_time - 1 + ) @pool.flush assert_equal 1, @pool.connections.length @@ -203,9 +210,10 @@ module ActiveRecord assert_equal 3, @pool.connections.length - def idle_conn.seconds_idle - 1000 - end + idle_conn.instance_variable_set( + :@idle_since, + Concurrent.monotonic_time - 1000 + ) @pool.flush(30) -- cgit v1.2.3