aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/test/cases/pooled_connections_test.rb
diff options
context:
space:
mode:
authorEmilio Tagua <miloops@gmail.com>2009-05-02 03:21:40 -0300
committerEmilio Tagua <miloops@gmail.com>2009-05-02 03:21:40 -0300
commit5e790d368c5d0e89cfd5ef1245e4b131be63716f (patch)
treefe26ed0a2b3056dd67fe46558abd96712cef67d5 /activerecord/test/cases/pooled_connections_test.rb
parent9f36431f58c406312d0b0317543b7f69107e61e9 (diff)
parent3be3470fab788856b4559742434f195cc6b1009a (diff)
downloadrails-5e790d368c5d0e89cfd5ef1245e4b131be63716f.tar.gz
rails-5e790d368c5d0e89cfd5ef1245e4b131be63716f.tar.bz2
rails-5e790d368c5d0e89cfd5ef1245e4b131be63716f.zip
Merge commit 'rails/master'
Diffstat (limited to 'activerecord/test/cases/pooled_connections_test.rb')
-rw-r--r--activerecord/test/cases/pooled_connections_test.rb29
1 files changed, 29 insertions, 0 deletions
diff --git a/activerecord/test/cases/pooled_connections_test.rb b/activerecord/test/cases/pooled_connections_test.rb
index 2649a9358a..bb9013c2a1 100644
--- a/activerecord/test/cases/pooled_connections_test.rb
+++ b/activerecord/test/cases/pooled_connections_test.rb
@@ -1,4 +1,6 @@
require "cases/helper"
+require "models/project"
+require "timeout"
class PooledConnectionsTest < ActiveRecord::TestCase
def setup
@@ -89,6 +91,33 @@ class PooledConnectionsTest < ActiveRecord::TestCase
ensure
ActiveRecord::Base.connection_handler = old_handler
end
+
+ def test_with_connection_nesting_safety
+ ActiveRecord::Base.establish_connection(@connection.merge({:pool => 1, :wait_timeout => 0.1}))
+
+ before_count = Project.count
+
+ add_record('one')
+
+ ActiveRecord::Base.connection.transaction do
+ add_record('two')
+ # Have another thread try to screw up the transaction
+ Thread.new do
+ ActiveRecord::Base.connection.rollback_db_transaction
+ ActiveRecord::Base.connection_pool.release_connection
+ end.join rescue nil
+ add_record('three')
+ end
+
+ after_count = Project.count
+ assert_equal 3, after_count - before_count
+ end
+
+ private
+
+ def add_record(name)
+ ActiveRecord::Base.connection_pool.with_connection { Project.create! :name => name }
+ end
end unless %w(FrontBase).include? ActiveRecord::Base.connection.adapter_name
class AllowConcurrencyDeprecatedTest < ActiveRecord::TestCase