Permalink
Browse files

Fix checkin method, add a couple more tests

  • Loading branch information...
1 parent fe575dd commit 3ce64d4f1608330072e1959a10f9b84205baebfa @nicksieger nicksieger committed Aug 7, 2008
@@ -237,7 +237,7 @@ def checkout
def checkin(conn)
@connection_mutex.synchronize do
- @checked_out -= conn
+ @checked_out.delete conn
@queue.signal
end
end
@@ -44,7 +44,6 @@ def test_threaded_connections
class PooledConnectionsTest < ActiveRecord::TestCase
def setup
@connection = ActiveRecord::Base.remove_connection
- @connections = []
@allow_concurrency = ActiveRecord::Base.allow_concurrency
ActiveRecord::Base.allow_concurrency = true
end
@@ -55,8 +54,9 @@ def teardown
ActiveRecord::Base.establish_connection(@connection)
end
- def gather_connections
+ def checkout_connections
ActiveRecord::Base.establish_connection(@connection.merge({:pool => 2, :wait_timeout => 0.3}))
+ @connections = []
@timed_out = 0
4.times do
@@ -70,10 +70,40 @@ def gather_connections
end
end
- def test_threaded_connections
- gather_connections
+ def test_pooled_connection_checkout
+ checkout_connections
assert_equal @connections.length, 2
assert_equal @timed_out, 2
end
+
+ def checkout_checkin_connections(pool_size, threads)
+ ActiveRecord::Base.establish_connection(@connection.merge({:pool => pool_size, :wait_timeout => 0.5}))
+ @connection_count = 0
+ @timed_out = 0
+ threads.times do
+ Thread.new do
+ begin
+ conn = ActiveRecord::Base.connection_pool.checkout
+ sleep 0.1
+ ActiveRecord::Base.connection_pool.checkin conn
+ @connection_count += 1
+ rescue ActiveRecord::ConnectionTimeoutError
+ @timed_out += 1
+ end
+ end.join
+ end
+ end
+
+ def test_pooled_connection_checkin_one
+ checkout_checkin_connections 1, 2
+ assert_equal 2, @connection_count
+ assert_equal 0, @timed_out
+ end
+
+ def test_pooled_connection_checkin_two
+ checkout_checkin_connections 2, 3
+ assert_equal 3, @connection_count
+ assert_equal 0, @timed_out
+ end
end
end

0 comments on commit 3ce64d4

Please sign in to comment.